PKQ6|""EGG-INFO/dependency_links.txthttp://files.turbogears.org/eggs/ PKQ6pX^EGG-INFO/entry_points.txt [console_scripts] tg-admin = turbogears.command:main [distutils.commands] docs = turbogears.docgen:GenSite [paste.paster_create_template] tgbase = turbogears.command.quickstart:BaseTemplate turbogears = turbogears.command.quickstart:TurbogearsTemplate tgbig = turbogears.command.quickstart:TGBig tgwidget = turbogears.command.quickstart:TGWidgetTemplate [turbogears.command] quickstart = turbogears.command.quickstart:quickstart sql = turbogears.command.base:SQL shell = turbogears.command.base:Shell toolbox = turbogears.command.base:ToolboxCommand update = turbogears.command.quickstart:update i18n = turbogears.command.i18n:InternationalizationTool info = turbogears.command.info:InfoCommand [turbogears.identity.provider] sqlobject = turbogears.identity.soprovider:SqlObjectIdentityProvider sqlalchemy= turbogears.identity.saprovider:SqlAlchemyIdentityProvider [turbogears.extensions] identity = turbogears.identity.visitor visit = turbogears.visit [turbogears.visit.manager] sqlobject = turbogears.visit.sovisit:SqlObjectVisitManager sqlalchemy = turbogears.visit.savisit:SqlAlchemyVisitManager [turbogears.toolboxcommand] widgets = turbogears.toolbox.base:WidgetBrowser shell = turbogears.toolbox.shell:WebConsole admi18n = turbogears.toolbox.admi18n:Internationalization designer = turbogears.toolbox.designer:Designer info = turbogears.toolbox.base:Info catwalk = turbogears.toolbox.catwalk:CatWalk PK%P62EGG-INFO/not-zip-safe PKQ6lŷ$$EGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: TurboGears Version: 1.0.3 Summary: front-to-back rapid web development Home-page: http://www.turbogears.org Author: Kevin Dangoor Author-email: dangoor+turbogears@gmail.com License: MIT Download-URL: http://www.turbogears.org/download/filelist.html Description: front-to-back rapid web development =================================== TurboGears brings together four major pieces to create an easy to install, easy to use web megaframework. It covers everything from front end (MochiKit JavaScript for the browser, Kid for templates in Python) to the controllers (CherryPy) to the back end (SQLObject). The TurboGears project is focused on providing documentation and integration with these tools without losing touch with the communities that already exist around those tools. TurboGears is easy to use for a wide range of web applications. The latest development version is available in the TurboGears subversion repository. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Software Development :: Libraries :: Python Modules PKQ6[d EGG-INFO/requires.txtTurboJson >= 0.9.9 TurboCheetah >= 0.9.5 TurboKid >= 1.0.2 CherryPy >= 2.2.1,<3.0.0alpha simplejson >= 1.3 elementtree >= 1.2.6 PasteScript >= 0.9.7 FormEncode >= 0.7.1 setuptools >= 0.6c2 RuleDispatch >= 0.5a0.dev-r2303 DecoratorTools >= 1.4 ConfigObj >= 4.3.2 cElementTree >= 1.0.5 [tgtesttools] nose >= 0.9.1 SQLAlchemy>=0.3 pysqlite [future] Genshi>=0.3 SQLAlchemy>=0.3 [testtools] nose >= 0.9.1 [exp] TGFastData [standard] SQLObject==bugfix,>=0.7.1dev-r1860,<=0.7.99PKQ6&AbbEGG-INFO/SOURCES.txtCHANGELOG.txt CONTRIBUTORS.txt LICENSE.txt README.txt codename.py ez_setup.py setup.cfg setup.py toolbox-start.py TurboGears.egg-info/PKG-INFO TurboGears.egg-info/SOURCES.txt TurboGears.egg-info/dependency_links.txt TurboGears.egg-info/entry_points.txt TurboGears.egg-info/not-zip-safe TurboGears.egg-info/requires.txt TurboGears.egg-info/top_level.txt apigen/setup.py apigen/apigen/__init__.py apigen/apigen/colorizer.py apigen/apigen/command.py apigen/apigen/element_colorizer.py apigen/apigen/pythondoc.py apigen/apigen/release.py apigen/apigen.egg-info/PKG-INFO apigen/apigen.egg-info/SOURCES.txt apigen/apigen.egg-info/entry_points.txt apigen/apigen.egg-info/not-zip-safe apigen/apigen.egg-info/top_level.txt thirdparty/externals.py turbogears/__init__.py turbogears/config.py turbogears/controllers.py turbogears/database.py turbogears/decorator.py turbogears/docgen.py turbogears/errorhandling.py turbogears/finddata.py turbogears/genericfunctions.py turbogears/paginate.py turbogears/release.py turbogears/scheduler.py turbogears/startup.py turbogears/testutil.py turbogears/util.py turbogears/validators.py turbogears/command/__init__.py turbogears/command/base.py turbogears/command/i18n.py turbogears/command/info.py turbogears/command/quickstart.py turbogears/feed/__init__.py turbogears/feed/atom0_3.kid turbogears/feed/atom1_0.kid turbogears/feed/feed.py turbogears/feed/rss2_0.kid turbogears/i18n/__init__.py turbogears/i18n/format.py turbogears/i18n/kidutils.py turbogears/i18n/tg_gettext.py turbogears/i18n/utils.py turbogears/i18n/data/TurboGears.pot turbogears/i18n/data/__init__.py turbogears/i18n/data/af.py turbogears/i18n/data/af_ZA.py turbogears/i18n/data/am.py turbogears/i18n/data/am_ET.py turbogears/i18n/data/ar.py turbogears/i18n/data/ar_AE.py turbogears/i18n/data/ar_BH.py turbogears/i18n/data/ar_DZ.py turbogears/i18n/data/ar_EG.py turbogears/i18n/data/ar_IN.py turbogears/i18n/data/ar_IQ.py turbogears/i18n/data/ar_JO.py turbogears/i18n/data/ar_KW.py turbogears/i18n/data/ar_LB.py turbogears/i18n/data/ar_LY.py turbogears/i18n/data/ar_MA.py turbogears/i18n/data/ar_OM.py turbogears/i18n/data/ar_QA.py turbogears/i18n/data/ar_SA.py turbogears/i18n/data/ar_SD.py turbogears/i18n/data/ar_SY.py turbogears/i18n/data/ar_TN.py turbogears/i18n/data/ar_YE.py turbogears/i18n/data/be.py turbogears/i18n/data/be_BY.py turbogears/i18n/data/bg.py turbogears/i18n/data/bg_BG.py turbogears/i18n/data/bn.py turbogears/i18n/data/bn_IN.py turbogears/i18n/data/ca.py turbogears/i18n/data/ca_ES.py turbogears/i18n/data/cs.py turbogears/i18n/data/cs_CZ.py turbogears/i18n/data/da.py turbogears/i18n/data/da_DK.py turbogears/i18n/data/de.py turbogears/i18n/data/de_AT.py turbogears/i18n/data/de_BE.py turbogears/i18n/data/de_CH.py turbogears/i18n/data/de_DE.py turbogears/i18n/data/de_LU.py turbogears/i18n/data/el.py turbogears/i18n/data/el_GR.py turbogears/i18n/data/en.py turbogears/i18n/data/en_AU.py turbogears/i18n/data/en_BE.py turbogears/i18n/data/en_BW.py turbogears/i18n/data/en_CA.py turbogears/i18n/data/en_GB.py turbogears/i18n/data/en_HK.py turbogears/i18n/data/en_IE.py turbogears/i18n/data/en_IN.py turbogears/i18n/data/en_MT.py turbogears/i18n/data/en_NZ.py turbogears/i18n/data/en_PH.py turbogears/i18n/data/en_SG.py turbogears/i18n/data/en_US.py turbogears/i18n/data/en_US_POSIX.py turbogears/i18n/data/en_VI.py turbogears/i18n/data/en_ZA.py turbogears/i18n/data/en_ZW.py turbogears/i18n/data/eo.py turbogears/i18n/data/es.py turbogears/i18n/data/es_AR.py turbogears/i18n/data/es_BO.py turbogears/i18n/data/es_CL.py turbogears/i18n/data/es_CO.py turbogears/i18n/data/es_CR.py turbogears/i18n/data/es_DO.py turbogears/i18n/data/es_EC.py turbogears/i18n/data/es_ES.py turbogears/i18n/data/es_GT.py turbogears/i18n/data/es_HN.py turbogears/i18n/data/es_MX.py turbogears/i18n/data/es_NI.py turbogears/i18n/data/es_PA.py turbogears/i18n/data/es_PE.py turbogears/i18n/data/es_PR.py turbogears/i18n/data/es_PY.py turbogears/i18n/data/es_SV.py turbogears/i18n/data/es_US.py turbogears/i18n/data/es_UY.py turbogears/i18n/data/es_VE.py turbogears/i18n/data/et.py turbogears/i18n/data/et_EE.py turbogears/i18n/data/eu.py turbogears/i18n/data/eu_ES.py turbogears/i18n/data/fa.py turbogears/i18n/data/fa_AF.py turbogears/i18n/data/fa_IR.py turbogears/i18n/data/fi.py turbogears/i18n/data/fi_FI.py turbogears/i18n/data/fo.py turbogears/i18n/data/fo_FO.py turbogears/i18n/data/fr.py turbogears/i18n/data/fr_BE.py turbogears/i18n/data/fr_CA.py turbogears/i18n/data/fr_CH.py turbogears/i18n/data/fr_FR.py turbogears/i18n/data/fr_LU.py turbogears/i18n/data/ga.py turbogears/i18n/data/ga_IE.py turbogears/i18n/data/gl.py turbogears/i18n/data/gl_ES.py turbogears/i18n/data/gu.py turbogears/i18n/data/gu_IN.py turbogears/i18n/data/gv.py turbogears/i18n/data/gv_GB.py turbogears/i18n/data/he.py turbogears/i18n/data/he_IL.py turbogears/i18n/data/hi.py turbogears/i18n/data/hi_IN.py turbogears/i18n/data/hr.py turbogears/i18n/data/hr_HR.py turbogears/i18n/data/hu.py turbogears/i18n/data/hu_HU.py turbogears/i18n/data/hy.py turbogears/i18n/data/hy_AM.py turbogears/i18n/data/hy_AM_REVISED.py turbogears/i18n/data/id.py turbogears/i18n/data/id_ID.py turbogears/i18n/data/is.py turbogears/i18n/data/is_IS.py turbogears/i18n/data/it.py turbogears/i18n/data/it_CH.py turbogears/i18n/data/it_IT.py turbogears/i18n/data/ja.py turbogears/i18n/data/ja_JP.py turbogears/i18n/data/kk.py turbogears/i18n/data/kk_KZ.py turbogears/i18n/data/kl.py turbogears/i18n/data/kl_GL.py turbogears/i18n/data/kn.py turbogears/i18n/data/kn_IN.py turbogears/i18n/data/ko.py turbogears/i18n/data/ko_KR.py turbogears/i18n/data/kok.py turbogears/i18n/data/kok_IN.py turbogears/i18n/data/kw.py turbogears/i18n/data/kw_GB.py turbogears/i18n/data/lt.py turbogears/i18n/data/lt_LT.py turbogears/i18n/data/lv.py turbogears/i18n/data/lv_LV.py turbogears/i18n/data/mk.py turbogears/i18n/data/mk_MK.py turbogears/i18n/data/mr.py turbogears/i18n/data/mr_IN.py turbogears/i18n/data/ms.py turbogears/i18n/data/ms_BN.py turbogears/i18n/data/ms_MY.py turbogears/i18n/data/mt.py turbogears/i18n/data/mt_MT.py turbogears/i18n/data/nb.py turbogears/i18n/data/nb_NO.py turbogears/i18n/data/nl.py turbogears/i18n/data/nl_BE.py turbogears/i18n/data/nl_NL.py turbogears/i18n/data/nn.py turbogears/i18n/data/nn_NO.py turbogears/i18n/data/no.py turbogears/i18n/data/no_NO.py turbogears/i18n/data/om.py turbogears/i18n/data/om_ET.py turbogears/i18n/data/om_KE.py turbogears/i18n/data/pa.py turbogears/i18n/data/pa_IN.py turbogears/i18n/data/pl.py turbogears/i18n/data/pl_PL.py turbogears/i18n/data/ps.py turbogears/i18n/data/ps_AF.py turbogears/i18n/data/pt.py turbogears/i18n/data/pt_BR.py turbogears/i18n/data/pt_PT.py turbogears/i18n/data/ro.py turbogears/i18n/data/ro_RO.py turbogears/i18n/data/ru.py turbogears/i18n/data/ru_RU.py turbogears/i18n/data/ru_UA.py turbogears/i18n/data/sh.py turbogears/i18n/data/sh_YU.py turbogears/i18n/data/sk.py turbogears/i18n/data/sk_SK.py turbogears/i18n/data/sl.py turbogears/i18n/data/sl_SI.py turbogears/i18n/data/so.py turbogears/i18n/data/so_DJ.py turbogears/i18n/data/so_ET.py turbogears/i18n/data/so_KE.py turbogears/i18n/data/so_SO.py turbogears/i18n/data/sq.py turbogears/i18n/data/sq_AL.py turbogears/i18n/data/sr.py turbogears/i18n/data/sr_YU.py turbogears/i18n/data/sv.py turbogears/i18n/data/sv_FI.py turbogears/i18n/data/sv_SE.py turbogears/i18n/data/sw.py turbogears/i18n/data/sw_KE.py turbogears/i18n/data/sw_TZ.py turbogears/i18n/data/ta.py turbogears/i18n/data/ta_IN.py turbogears/i18n/data/te.py turbogears/i18n/data/te_IN.py turbogears/i18n/data/th.py turbogears/i18n/data/th_TH.py turbogears/i18n/data/ti.py turbogears/i18n/data/ti_ER.py turbogears/i18n/data/ti_ET.py turbogears/i18n/data/tr.py turbogears/i18n/data/tr_TR.py turbogears/i18n/data/uk.py turbogears/i18n/data/uk_UA.py turbogears/i18n/data/vi.py turbogears/i18n/data/vi_VN.py turbogears/i18n/data/zh.py turbogears/i18n/data/zh_CN.py turbogears/i18n/data/zh_HK.py turbogears/i18n/data/zh_MO.py turbogears/i18n/data/zh_SG.py turbogears/i18n/data/zh_TW.py turbogears/i18n/data/de/LC_MESSAGES/TurboGears.mo turbogears/i18n/data/de/LC_MESSAGES/TurboGears.po turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.mo turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.po turbogears/i18n/sogettext/__init__.py turbogears/i18n/sogettext/model.py turbogears/i18n/tests/__init__.py turbogears/i18n/tests/test_format.py turbogears/i18n/tests/test_kidutils.py turbogears/i18n/tests/test_so_gettext.py turbogears/i18n/tests/test_tg_gettext.py turbogears/i18n/tests/test_utils.py turbogears/identity/__init__.py turbogears/identity/conditions.py turbogears/identity/exceptions.py turbogears/identity/saprovider.py turbogears/identity/soprovider.py turbogears/identity/visitor.py turbogears/identity/tests/__init__.py turbogears/identity/tests/test_identity.py turbogears/identity/tests/test_visit.py turbogears/qstemplates/__init__.py turbogears/qstemplates/qsbase/+einame+.egg-info/PKG-INFO turbogears/qstemplates/qsbase/+einame+.egg-info/paster_plugins.txt turbogears/qstemplates/qsbase/+einame+.egg-info/sqlobject.txt_tmpl turbogears/qstemplates/qsbase/+package+/__init__.py_tmpl turbogears/qstemplates/qsbase/+package+/release.py_tmpl turbogears/qstemplates/qsbase/+package+/static/css/empty turbogears/qstemplates/qsbase/+package+/static/images/favicon.ico turbogears/qstemplates/qsbase/+package+/static/images/tg_under_the_hood.png turbogears/qstemplates/qsbase/+package+/static/images/under_the_hood_blue.png turbogears/qstemplates/qsbase/+package+/static/javascript/empty turbogears/qstemplates/qsbase/+package+/templates/__init__.py_tmpl turbogears/qstemplates/quickstart/README.txt_tmpl turbogears/qstemplates/quickstart/dev.cfg_tmpl turbogears/qstemplates/quickstart/sample-prod.cfg_tmpl turbogears/qstemplates/quickstart/setup.py_tmpl turbogears/qstemplates/quickstart/start-+package+.py_tmpl turbogears/qstemplates/quickstart/test.cfg_tmpl turbogears/qstemplates/quickstart/+package+/controllers.py_tmpl turbogears/qstemplates/quickstart/+package+/json.py_tmpl turbogears/qstemplates/quickstart/+package+/model.py_tmpl turbogears/qstemplates/quickstart/+package+/config/__init__.py_tmpl turbogears/qstemplates/quickstart/+package+/config/app.cfg_tmpl turbogears/qstemplates/quickstart/+package+/config/log.cfg_tmpl turbogears/qstemplates/quickstart/+package+/sqlobject-history/empty turbogears/qstemplates/quickstart/+package+/static/css/style.css turbogears/qstemplates/quickstart/+package+/static/images/header_inner.png turbogears/qstemplates/quickstart/+package+/static/images/info.png turbogears/qstemplates/quickstart/+package+/static/images/ok.png turbogears/qstemplates/quickstart/+package+/templates/login.kid turbogears/qstemplates/quickstart/+package+/templates/master.kid turbogears/qstemplates/quickstart/+package+/templates/welcome.kid turbogears/qstemplates/quickstart/+package+/tests/__init__.py_tmpl turbogears/qstemplates/quickstart/+package+/tests/test_controllers.py_tmpl turbogears/qstemplates/quickstart/+package+/tests/test_model.py_tmpl turbogears/qstemplates/quickstartbig/+package+/controllers/__init__.py_tmpl turbogears/qstemplates/quickstartbig/+package+/controllers/root.py_tmpl turbogears/qstemplates/widget/README.txt_tmpl turbogears/qstemplates/widget/setup.py_tmpl turbogears/qstemplates/widget/+package+/widgets.py_tmpl turbogears/static/__init__.py turbogears/static/css/__init__.py turbogears/static/css/interpreter.css turbogears/static/css/toolbox.css turbogears/static/css/widget.css turbogears/static/images/__init__.py turbogears/static/images/add.png turbogears/static/images/admi18n.png turbogears/static/images/arrow_down.png turbogears/static/images/arrow_down_small.png turbogears/static/images/arrow_left.png turbogears/static/images/arrow_right.png turbogears/static/images/arrow_up.png turbogears/static/images/arrow_up_small.png turbogears/static/images/catwalk.png turbogears/static/images/catwalk_logo.png turbogears/static/images/catwalk_logo_bg.png turbogears/static/images/column_chooser.png turbogears/static/images/designer.png turbogears/static/images/discard.png turbogears/static/images/edit.png turbogears/static/images/file.png turbogears/static/images/folder.png turbogears/static/images/identity.png turbogears/static/images/info.png turbogears/static/images/play.png turbogears/static/images/remove.png turbogears/static/images/save.png turbogears/static/images/shell.png turbogears/static/images/small_gear.png turbogears/static/images/stop.png turbogears/static/images/table.gif turbogears/static/images/tg_power.png turbogears/static/images/tg_under_the_hood.png turbogears/static/images/tg_under_the_hood_sans_gear.png turbogears/static/images/toolbox_logo.png turbogears/static/images/toolbox_top_baggrund.png turbogears/static/images/toolbox_top_vertical_line.png turbogears/static/images/top.png turbogears/static/images/top_bg.png turbogears/static/images/transp.png turbogears/static/images/trash.png turbogears/static/images/widgets.png turbogears/static/js/MochiKit.js turbogears/static/js/__init__.py turbogears/static/js/interpreter.js turbogears/static/js/widget.js turbogears/static/js/tool-man/cookies.js turbogears/static/js/tool-man/coordinates.js turbogears/static/js/tool-man/core.js turbogears/static/js/tool-man/css.js turbogears/static/js/tool-man/drag.js turbogears/static/js/tool-man/dragsort.js turbogears/static/js/tool-man/events.js turbogears/tests/__init__.py turbogears/tests/config.cfg turbogears/tests/configfile.cfg turbogears/tests/form.kid turbogears/tests/othertemplate.kid turbogears/tests/simple.kid turbogears/tests/test_catwalk.py turbogears/tests/test_command_i18n.py turbogears/tests/test_config.py turbogears/tests/test_controllers.py turbogears/tests/test_database.py turbogears/tests/test_decorator.py turbogears/tests/test_errorhandling.py turbogears/tests/test_expose.py turbogears/tests/test_form_controllers.py turbogears/tests/test_genericfunctions.py turbogears/tests/test_sqlalchemy.py turbogears/tests/test_testutil.py turbogears/tests/test_validators.py turbogears/tests/test_view.py turbogears/tests/textfmt.tmpl turbogears/tests/util.py turbogears/tests/catwalk_models/__init__.py turbogears/tests/catwalk_models/browse.py turbogears/tests/catwalk_models/model_list.py turbogears/tests/catwalk_models/model_structure.py turbogears/tests/catwalk_models/single_join.py turbogears/tests/catwalk_models/catwalk-session/session.pkl turbogears/tests/locale/en/LC_MESSAGES/messages.mo turbogears/tests/locale/en/LC_MESSAGES/messages.po turbogears/tests/locale/fi/LC_MESSAGES/messages.mo turbogears/tests/locale/fi/LC_MESSAGES/messages.po turbogears/toolbox/__init__.py turbogears/toolbox/base.py turbogears/toolbox/console.kid turbogears/toolbox/info.kid turbogears/toolbox/main.kid turbogears/toolbox/master.kid turbogears/toolbox/shell.py turbogears/toolbox/widgets.kid turbogears/toolbox/admi18n/__init__.py turbogears/toolbox/admi18n/catalog.py turbogears/toolbox/admi18n/inter.kid turbogears/toolbox/admi18n/internationalization.kid turbogears/toolbox/admi18n/language.kid turbogears/toolbox/admi18n/languageManagement.kid turbogears/toolbox/admi18n/msgfmt.py turbogears/toolbox/admi18n/po_view.kid turbogears/toolbox/admi18n/pygettext.py turbogears/toolbox/admi18n/stringCollection.kid turbogears/toolbox/catwalk/__init__.py turbogears/toolbox/catwalk/browse.py turbogears/toolbox/catwalk/browse_grid.kid turbogears/toolbox/catwalk/catwalk.kid turbogears/toolbox/catwalk/columns.kid turbogears/toolbox/catwalk/static/css/catwalk.css turbogears/toolbox/catwalk/static/javascript/browse.js turbogears/toolbox/catwalk/static/javascript/catwalk.js turbogears/toolbox/catwalk/static/javascript/greybox/AmiJS.js turbogears/toolbox/catwalk/static/javascript/greybox/blank.gif turbogears/toolbox/catwalk/static/javascript/greybox/close.gif turbogears/toolbox/catwalk/static/javascript/greybox/greybox.css turbogears/toolbox/catwalk/static/javascript/greybox/greybox.js turbogears/toolbox/catwalk/static/javascript/greybox/greybox__.js turbogears/toolbox/catwalk/static/javascript/greybox/greybox_inline.js turbogears/toolbox/catwalk/static/javascript/greybox/logo.png turbogears/toolbox/catwalk/static/javascript/greybox/overlay.png turbogears/toolbox/designer/__init__.py turbogears/toolbox/designer/modelDesigner.kid turbogears/toolbox/designer/static/css/style.css turbogears/toolbox/designer/static/diagram/index.html turbogears/toolbox/designer/static/diagram/images/back.gif turbogears/toolbox/designer/static/diagram/images/shadow.png turbogears/toolbox/designer/static/diagram/images/shadow_bottom.png turbogears/toolbox/designer/static/diagram/images/shadow_corner.png turbogears/toolbox/designer/static/diagram/images/shadow_right.png turbogears/toolbox/designer/static/diagram/js/ajax.js turbogears/toolbox/designer/static/diagram/js/animator.js turbogears/toolbox/designer/static/diagram/js/generic.js turbogears/toolbox/designer/static/diagram/js/io.js turbogears/toolbox/designer/static/diagram/js/main.js turbogears/toolbox/designer/static/diagram/js/objects.js turbogears/toolbox/designer/static/diagram/js/settings.js turbogears/toolbox/designer/static/diagram/js/sql_types.js turbogears/toolbox/designer/static/diagram/styles/bar.css turbogears/toolbox/designer/static/diagram/styles/foo turbogears/toolbox/designer/static/diagram/styles/style.css turbogears/toolbox/designer/static/diagram/styles/style.js turbogears/toolbox/designer/static/images/info.png turbogears/toolbox/designer/static/javascript/modelDesigner.js turbogears/toolbox/designer/static/sessions/Survey.js turbogears/toolbox/designer/static/sessions/TurboTunes.js turbogears/toolbox/designer/static/sessions/WebShop.js turbogears/view/__init__.py turbogears/view/base.py turbogears/view/templates/__init__.py turbogears/view/templates/sitetemplate.kid turbogears/visit/__init__.py turbogears/visit/api.py turbogears/visit/savisit.py turbogears/visit/sovisit.py turbogears/widgets/__init__.py turbogears/widgets/base.py turbogears/widgets/big_widgets.py turbogears/widgets/datagrid.py turbogears/widgets/forms.py turbogears/widgets/i18n.py turbogears/widgets/links.py turbogears/widgets/meta.py turbogears/widgets/rpc.py turbogears/widgets/static/ajax.js turbogears/widgets/static/ajaxgrid.js turbogears/widgets/static/autocompletefield.css turbogears/widgets/static/autocompletefield.js turbogears/widgets/static/grid.css turbogears/widgets/static/img.gif turbogears/widgets/static/spinner.gif turbogears/widgets/static/spinnerstopped.png turbogears/widgets/static/calendar/calendar-blue.css turbogears/widgets/static/calendar/calendar-blue2.css turbogears/widgets/static/calendar/calendar-brown.css turbogears/widgets/static/calendar/calendar-green.css turbogears/widgets/static/calendar/calendar-setup.js turbogears/widgets/static/calendar/calendar-system.css turbogears/widgets/static/calendar/calendar-tas.css turbogears/widgets/static/calendar/calendar-win2k-1.css turbogears/widgets/static/calendar/calendar-win2k-2.css turbogears/widgets/static/calendar/calendar-win2k-cold-1.css turbogears/widgets/static/calendar/calendar-win2k-cold-2.css turbogears/widgets/static/calendar/calendar.js turbogears/widgets/static/calendar/menuarrow.gif turbogears/widgets/static/calendar/menuarrow2.gif turbogears/widgets/static/calendar/lang/calendar-af.js turbogears/widgets/static/calendar/lang/calendar-al.js turbogears/widgets/static/calendar/lang/calendar-bg.js turbogears/widgets/static/calendar/lang/calendar-big5-utf-8.js turbogears/widgets/static/calendar/lang/calendar-big5-utf8.js turbogears/widgets/static/calendar/lang/calendar-big5.js turbogears/widgets/static/calendar/lang/calendar-br.js turbogears/widgets/static/calendar/lang/calendar-ca.js turbogears/widgets/static/calendar/lang/calendar-cs-utf-8.js turbogears/widgets/static/calendar/lang/calendar-cs-utf8.js turbogears/widgets/static/calendar/lang/calendar-cs-win.js turbogears/widgets/static/calendar/lang/calendar-da.js turbogears/widgets/static/calendar/lang/calendar-de.js turbogears/widgets/static/calendar/lang/calendar-du.js turbogears/widgets/static/calendar/lang/calendar-el.js turbogears/widgets/static/calendar/lang/calendar-en.js turbogears/widgets/static/calendar/lang/calendar-es.js turbogears/widgets/static/calendar/lang/calendar-fi.js turbogears/widgets/static/calendar/lang/calendar-fr.js turbogears/widgets/static/calendar/lang/calendar-he-utf-8.js turbogears/widgets/static/calendar/lang/calendar-he-utf8.js turbogears/widgets/static/calendar/lang/calendar-hr-utf-8.js turbogears/widgets/static/calendar/lang/calendar-hr-utf8.js turbogears/widgets/static/calendar/lang/calendar-hr.js turbogears/widgets/static/calendar/lang/calendar-hu.js turbogears/widgets/static/calendar/lang/calendar-it.js turbogears/widgets/static/calendar/lang/calendar-jp.js turbogears/widgets/static/calendar/lang/calendar-ko-utf-8.js turbogears/widgets/static/calendar/lang/calendar-ko-utf8.js turbogears/widgets/static/calendar/lang/calendar-ko.js turbogears/widgets/static/calendar/lang/calendar-lt-utf-8.js turbogears/widgets/static/calendar/lang/calendar-lt-utf8.js turbogears/widgets/static/calendar/lang/calendar-lt.js turbogears/widgets/static/calendar/lang/calendar-lv.js turbogears/widgets/static/calendar/lang/calendar-nl.js turbogears/widgets/static/calendar/lang/calendar-no.js turbogears/widgets/static/calendar/lang/calendar-pl-utf-8.js turbogears/widgets/static/calendar/lang/calendar-pl-utf8.js turbogears/widgets/static/calendar/lang/calendar-pl.js turbogears/widgets/static/calendar/lang/calendar-pt-utf-8.js turbogears/widgets/static/calendar/lang/calendar-pt-utf8.js turbogears/widgets/static/calendar/lang/calendar-pt.js turbogears/widgets/static/calendar/lang/calendar-ro.js turbogears/widgets/static/calendar/lang/calendar-ru.js turbogears/widgets/static/calendar/lang/calendar-ru_win_.js turbogears/widgets/static/calendar/lang/calendar-si.js turbogears/widgets/static/calendar/lang/calendar-sk.js turbogears/widgets/static/calendar/lang/calendar-sp.js turbogears/widgets/static/calendar/lang/calendar-sv.js turbogears/widgets/static/calendar/lang/calendar-tr.js turbogears/widgets/static/calendar/lang/calendar-zh-cn-utf-8.js turbogears/widgets/static/calendar/lang/calendar-zh-cn-utf8.js turbogears/widgets/static/calendar/lang/calendar-zh-cn.js turbogears/widgets/static/calendar/lang/calendar-zh-tw-utf-8.js turbogears/widgets/static/calendar/lang/calendar-zh-tw-utf8.js turbogears/widgets/static/calendar/lang/calendar-zh-tw.js turbogears/widgets/static/calendar/lang/calendar-zh-utf-8.js turbogears/widgets/static/calendar/lang/calendar-zh-utf8.js turbogears/widgets/static/calendar/lang/calendar-zh.js turbogears/widgets/static/calendar/skins/aqua/active-bg.gif turbogears/widgets/static/calendar/skins/aqua/dark-bg.gif turbogears/widgets/static/calendar/skins/aqua/hover-bg.gif turbogears/widgets/static/calendar/skins/aqua/menuarrow.gif turbogears/widgets/static/calendar/skins/aqua/normal-bg.gif turbogears/widgets/static/calendar/skins/aqua/rowhover-bg.gif turbogears/widgets/static/calendar/skins/aqua/status-bg.gif turbogears/widgets/static/calendar/skins/aqua/theme.css turbogears/widgets/static/calendar/skins/aqua/title-bg.gif turbogears/widgets/static/calendar/skins/aqua/today-bg.gif turbogears/widgets/static/sh/SyntaxHighlighter.css turbogears/widgets/static/sh/shBrushCSharp.js turbogears/widgets/static/sh/shBrushCss.js turbogears/widgets/static/sh/shBrushDelphi.js turbogears/widgets/static/sh/shBrushJScript.js turbogears/widgets/static/sh/shBrushJava.js turbogears/widgets/static/sh/shBrushPhp.js turbogears/widgets/static/sh/shBrushPython.js turbogears/widgets/static/sh/shBrushRuby.js turbogears/widgets/static/sh/shBrushSql.js turbogears/widgets/static/sh/shBrushVb.js turbogears/widgets/static/sh/shBrushXml.js turbogears/widgets/static/sh/shCore.js turbogears/widgets/static/tabber/tabber-minimized.js turbogears/widgets/static/tabber/tabber.css turbogears/widgets/static/tabber/tabber.js turbogears/widgets/static/tabber/tabber_cookie.js turbogears/widgets/templates/__init__.py turbogears/widgets/templates/datagrid.kid turbogears/widgets/templates/paginate_datagrid.kid turbogears/widgets/tests/__init__.py turbogears/widgets/tests/form.kid turbogears/widgets/tests/test_datagrid.py turbogears/widgets/tests/test_forms.py turbogears/widgets/tests/test_link_inclusion.py turbogears/widgets/tests/test_nested_form_controllers.py turbogears/widgets/tests/test_nested_widgets.py turbogears/widgets/tests/test_new_validation.py turbogears/widgets/tests/test_request_related_features.py turbogears/widgets/tests/test_widgets.py turbogears/widgets/tests/two_forms.kid turbogears/widgets/tests/widget.kid PKQ6trp EGG-INFO/top_level.txtturbogears PK6turbogears/config.pyimport sys, os, glob, re from cherrypy import config from configobj import ConfigObj import pkg_resources import logging import logging.handlers __all__ = ["update_config", "get", "update"] try: set except NameError: from sets import Set as set class ConfigError(Exception): pass def _get_formatters(formatters): for key, formatter in formatters.items(): kw = {} fmt = formatter.get("format", None) if fmt: fmt = fmt.replace("*(", "%(") kw["fmt"] = fmt datefmt = formatter.get("datefmt", None) if datefmt: kw["datefmt"] = datefmt formatter = logging.Formatter(**kw) formatters[key] = formatter def _get_handlers(handlers, formatters): for key, handler in handlers.items(): kw = {} try: cls = handler.get("class") args = handler.get("args", tuple()) level = handler.get("level", None) try: cls = eval(cls, logging.__dict__) except NameError: try: cls = eval(cls, logging.handlers.__dict__) except NameError, err: raise ConfigError("Specified class in handler " "%s is not a recognizable logger name" % key) try: handler_obj = cls(*eval(args, logging.__dict__)) except IOError,err: raise ConfigError("Missing or wrong argument to " "%s in handler %s -> %s " % (cls.__name__,key,err)) except TypeError,err: raise ConfigError("Wrong format for arguments " "to %s in handler %s -> %s" % (cls.__name__,key,err)) if level: level = eval(level, logging.__dict__) handler_obj.setLevel(level) except KeyError: raise ConfigError("No class specified for logging " "handler %s" % key) formatter = handler.get("formatter", None) if formatter: try: formatter = formatters[formatter] except KeyError: raise ConfigError("Handler %s references unknown " "formatter %s" % (key, formatter)) handler_obj.setFormatter(formatter) handlers[key] = handler_obj def _get_loggers(loggers, handlers): for key, logger in loggers.items(): qualname = logger.get("qualname", None) if qualname: log = logging.getLogger(qualname) else: log = logging.getLogger() level = logger.get("level", None) if level: level = eval(level, logging.__dict__) else: level = logging.NOTSET log.setLevel(level) propagate = logger.get("propagate", None) if propagate is not None: log.propagate = propagate cfghandlers = logger.get("handlers", None) if cfghandlers: if isinstance(cfghandlers, basestring): cfghandlers = [cfghandlers] for handler in cfghandlers: try: handler = handlers[handler] except KeyError: raise ConfigError("Logger %s references unknown " "handler %s" % (key, handler)) log.addHandler(handler) def configure_loggers(config): """Configures the Python logging module, using options that are very similar to the ones listed in the Python documentation. This also removes the logging configuration from the configuration dictionary because CherryPy doesn't like it there. Here are some of the Python examples converted to the format used here: [logging] [[loggers]] [[[parser]]] [logger_parser] level="DEBUG" handlers="hand01" propagate=1 qualname="compiler.parser" [[handlers]] [[[hand01]]] class="StreamHandler" level="NOTSET" formatter="form01" args="(sys.stdout,)" [[formatters]] [[[form01]]] format="F1 *(asctime)s *(levelname)s *(message)s" datefmt= One notable format difference is that *() is used in the formatter instead of %() because %() is already used for config file interpolation. """ if not config.has_key("logging"): config["global"]["tg.new_style_logging"] = False return logcfg = config["logging"] formatters = logcfg.get("formatters", {}) _get_formatters(formatters) handlers = logcfg.get("handlers", {}) _get_handlers(handlers, formatters) loggers = logcfg.get("loggers", {}) _get_loggers(loggers, handlers) del config["logging"] config["global"]["tg.new_style_logging"] = True def config_defaults(): current_dir_uri = os.path.abspath(os.getcwd()) if not current_dir_uri.startswith("/"): current_dir_uri = "/" + current_dir_uri defaults = {'current_dir_uri' : current_dir_uri} return defaults def config_obj(configfile = None, modulename = None): defaults = config_defaults() if modulename: mod_globals = dict() lastdot = modulename.rfind(".") firstdot = modulename.find(".") packagename = modulename[:lastdot] top_level_package = modulename[:firstdot] modname = modulename[lastdot+1:] modfile = pkg_resources.resource_filename(packagename, modname + ".cfg") if not os.path.exists(modfile): modfile = pkg_resources.resource_filename(packagename, modname) if os.path.isdir(modfile): configfiles = glob.glob(os.path.join(modfile, "*.cfg")) else: configfiles = [modfile] configdata = ConfigObj(unrepr=True) top_level_dir = pkg_resources.resource_filename( top_level_package, "")[:-1].replace("\\", "/") package_dir = pkg_resources.resource_filename( packagename, "")[:-1].replace("\\", "/") defaults.update(dict(top_level_dir=top_level_dir, package_dir=package_dir)) configdata.merge(dict(DEFAULT=defaults)) for file in configfiles: configdata2 = ConfigObj(file, unrepr=True) configdata2.merge(dict(DEFAULT=defaults)) configdata.merge(configdata2) if configfile: if modulename: configdata2 = ConfigObj(configfile, unrepr=True) configdata2.merge(dict(DEFAULT=defaults)) configdata.merge(configdata2) else: configdata = ConfigObj(configfile, unrepr=True) return configdata def update_config(configfile=None, modulename=None): """Updates the system configuration either from a ConfigObj (INI-style) config file, a module name specified in dotted notation or both (the module name is assumed to have a ".cfg" extension). If both are specified, the module is called first, followed by the config file. This means that the config file's options override the options in the module file.""" configdict = config_obj(configfile, modulename).dict() configure_loggers(configdict) config.update(configdict) def get(key, default_value=None, return_section=False, path=None): """Retrieves a config value""" value = config.get(key, default_value, return_section, path) if value and key == 'sqlobject.dburi' and os.name == "nt": value = re.sub('///(\w):', '///\\1|', value) return value def update(configvalues): """Updates the configuration with the values from the dictionary.""" return config.update(configvalues) PKf6#S##turbogears/config.pyc; 8Fc@sdkZdkZdkZdkZdklZdklZdkZdk Z dk Z dddgZ ye Wn e j odklZ nXdefdYZd Zd Zd Zd Zd ZeedZeedZeeedZdZdS(N(sconfig(s ConfigObjs update_configsgetsupdate(sSets ConfigErrorcBstZRS(N(s__name__s __module__(((s*build\bdist.win32\egg\turbogears\config.pys ConfigErrorscCsx|iD]\}}h}|idt}|o |idd}||d %s s4Wrong format for arguments to %s in handler %s -> %ss)No class specified for logging handler %ss formatters*Handler %s references unknown formatter %s(shandlerssitemsskeyshandlerskwsgetsclsstuplesargssNoneslevelsevalsloggings__dict__s NameErrorserrs ConfigErrors handler_objsIOErrors__name__s TypeErrorssetLevelsKeyErrors formatters formatterss setFormatter( shandlerss formattersserrsargss handler_objshandlerskws formatterskeyslevelscls((s*build\bdist.win32\egg\turbogears\config.pys _get_handlers sB  !c Cs\xU|iD]G\}}|idt} | oti| }n ti}|idt}|ot |ti }n ti }|i||idt}|tj o ||_n|idt}|oyt|to |g}nxY|D]M}y||}Wn)tj otd||fnX|i|qWq q WdS(Nsqualnameslevels propagateshandlerss'Logger %s references unknown handler %s(sloggerssitemsskeysloggersgetsNonesqualnamesloggings getLoggerslogslevelsevals__dict__sNOTSETssetLevels propagates cfghandlerss isinstances basestringshandlershandlerssKeyErrors ConfigErrors addHandler( sloggersshandlerss cfghandlersslogslevelshandlers propagateskeysloggersqualname((s*build\bdist.win32\egg\turbogears\config.pys _get_loggersGs2       cCs|id ot|ddUpdates the configuration with the values from the dictionary.N(sconfigsupdates configvalues(s configvalues((s*build\bdist.win32\egg\turbogears\config.pysupdates(ssyssossglobsrescherrypysconfigs configobjs ConfigObjs pkg_resourcessloggingslogging.handlerss__all__ssets NameErrorssetssSets Exceptions ConfigErrors_get_formatterss _get_handlerss _get_loggerssconfigure_loggerssconfig_defaultssNones config_objs update_configsFalsesgetsupdate(ssets config_objs__all__sres _get_loggerss update_configsconfigs_get_formatterss ConfigObjsgetsglobsupdatessyss ConfigErrors _get_handlerssloggingsconfigure_loggerss pkg_resourcessconfig_defaultssos((s*build\bdist.win32\egg\turbogears\config.pys?s($      '  1 ) PK 6vVVturbogears/controllers.py"""Classes and methods for TurboGears controllers.""" import logging import re import urllib import types from itertools import izip import cherrypy from dispatch import generic, strategy, functions import turbogears.util as tg_util import turbogears from inspect import isclass from turbogears import view, database, errorhandling, config from turbogears.decorator import weak_signature_decorator from turbogears.validators import Invalid from turbogears.errorhandling import error_handler, exception_handler log = logging.getLogger("turbogears.controllers") unicodechars = re.compile(r"([^\x00-\x7F])") if config.get("session_filter.on", None) == True: if config.get("session_filter.storage_type", None) == "PostgreSQL": import psycopg2 config.update( {'session_filter.get_db': psycopg2.connect( psycopg2.get('sessions.postgres.dsn')) }) # support for mysql/sqlite/etc here def _process_output(output, template, format, content_type, mapping, fragment=False): """ Produces final output form from the data returned from a controller method. See the expose() arguments for more info in theses ones since they are the same. """ if isinstance(output, dict): from turbogears.widgets import js_location css = tg_util.setlike() js = dict(izip(js_location, iter(tg_util.setlike, None))) include_widgets = {} include_widgets_lst = config.get("tg.include_widgets", []) if config.get("tg.mochikit_all", False): include_widgets_lst.insert(0, 'turbogears.mochikit') for i in include_widgets_lst: widget = tg_util.load_class(i) if isclass(widget): widget = widget() include_widgets["tg_%s" % i.split(".")[-1]] = widget for script in widget.retrieve_javascript(): if hasattr(script, "location"): js[script.location].add(script) else: js[js_location.head].add(script) css.add_all(widget.retrieve_css()) for value in output.itervalues(): if hasattr(value, "retrieve_css"): retrieve = getattr(value, "retrieve_css") if callable(retrieve): css.add_all(value.retrieve_css()) if hasattr(value, "retrieve_javascript"): retrieve = getattr(value, "retrieve_javascript") if callable(retrieve): for script in value.retrieve_javascript(): if hasattr(script, "location"): js[script.location].add(script) else: js[js_location.head].add(script) output.update(include_widgets) output["tg_css"] = css #output.update([("tg_js_%s" % str(l), js[l]) for l in js_location]) for l in iter(js_location): output["tg_js_%s" % str(l)] = js[l] tg_flash = _get_flash() if not tg_flash == None: output["tg_flash"] = tg_flash output = view.render(output, template=template, format=format, mapping=mapping, content_type=content_type, fragment=fragment) else: if content_type: cherrypy.response.headers["Content-Type"] = content_type # fix the Safari XMLHttpRequest encoding problem try: contentType = cherrypy.response.headers["Content-Type"] ua = cherrypy.request.headers["User-Agent"] except KeyError: return output if not contentType.startswith("text/"): return output ua = view.UserAgent(ua) enc = tg_util.get_template_encoding_default() if ua.browser == "safari": if isinstance(output, str): output = output.decode(enc) elif isinstance(output, types.GeneratorType): output = "".join(output) output = unicodechars.sub( lambda m: "&#x%x;" % ord(m.group(1)), output).encode("ascii") if isinstance(output, unicode): output = output.encode(enc) return output class BadFormatError(Exception): """Output-format exception.""" def validate(form=None, validators=None, failsafe_schema=errorhandling.FailsafeSchema.none, failsafe_values=None, state_factory=None): """Validate input. @param form form to validate input from @param validators individual validators to use for parameters @param failsafe_schema fail-safe schema @param failsafe_values replacements for erroneous inputs @param state_factory callable which returns the initial state instance for validation """ def entangle(func): recursion_guard = dict(func=func) if callable(form) and not hasattr(form, "validate"): init_form = lambda self: form(self) else: init_form = lambda self: form def validate(func, *args, **kw): if tg_util.call_on_stack("validate", recursion_guard, 4): return func(*args, **kw) form = init_form(args and args[0] or kw["self"]) args, kw = tg_util.to_kw(func, args, kw) errors = {} if state_factory is not None: state = state_factory() else: state = None if form: value = kw.copy() try: kw.update(form.validate(value, state)) except Invalid, e: errors = e.unpack_errors() cherrypy.request.validation_exception = e cherrypy.request.validated_form = form if validators: if isinstance(validators, dict): for field, validator in validators.iteritems(): try: kw[field] = validator.to_python( kw.get(field, None), state ) except Invalid, error: errors[field] = error else: try: value = kw.copy() kw.update(validators.to_python(value, state)) except Invalid, e: errors = e.unpack_errors() cherrypy.request.validation_exception = e cherrypy.request.validation_errors = errors cherrypy.request.input_values = kw.copy() cherrypy.request.validation_state = state if errors: kw = errorhandling.dispatch_failsafe(failsafe_schema, failsafe_values, errors, func, kw) args, kw = tg_util.from_kw(func, args, kw) return errorhandling.run_with_errors(errors, func, *args, **kw) return validate return weak_signature_decorator(entangle) class CustomDispatch(functions.GenericFunction): def combine(self,cases): strict = [strategy.ordered_signatures,strategy.safe_methods] cases = strategy.separate_qualifiers( cases, primary = strict, ) primary = strategy.method_chain(cases.get('primary',[])) if type(primary) != types.FunctionType: for i in primary: for y in i: return y[1] return primary def _add_rule(_expose, found_default, as_format, accept_format, template, rulefunc): if as_format == "default": if found_default: colon = template.find(":") if colon == -1: as_format = template else: as_format = template[:colon] else: found_default = True ruleparts = [] ruleparts.append('kw.get("tg_format", "default") == "%s"' % as_format) if accept_format: ruleparts.append('(accept == "%s" and kw.get("tg_format", ' '"default") == "default")' % accept_format) rule = " or ".join(ruleparts) log.debug("Generated rule %s", rule) _expose.when(rule)(rulefunc) return found_default def _build_rules(func): def _expose(func, accept, allow_json, *args, **kw): pass _expose = generic(CustomDispatch)(_expose) if func._allow_json: log.debug("Adding allow_json rule: " 'allow_json and ' '(kw.get("tg_format", None) == "json" or accept ' '=="text/javascript")') _expose.when('allow_json ' 'and (kw.get("tg_format", None) == "json" or accept' ' =="text/javascript")')( lambda _func, accept, allow_json, *args, **kw: _execute_func( _func, "json", None, None, None, False, args, kw)) found_default = False for ruleinfo in func._ruleinfo: found_default = _add_rule(_expose, found_default, **ruleinfo) func._expose = _expose def expose(template=None, validators=None, allow_json=None, html=None, format=None, content_type=None, inputform=None, fragment=False, as_format="default", mapping=None, accept_format=None): """Exposes a method to the web. By putting the expose decorator on a method, you tell TurboGears that the method should be accessible via URL traversal. Additionally, expose handles the output processing (turning a dictionary into finished output) and is also responsible for ensuring that the request is wrapped in a database transaction. You can apply multiple expose decorators to a method, if you'd like to support multiple output formats. The decorator that's listed first in your code without as_format or accept_format is the default that is chosen when no format is specifically asked for. Any other expose calls that are missing as_format and accept_format will have as_format implicitly set to the whatever comes before the ":" in the template name (or the whole template name if there is no ":". For example, expose("json"), if it's not the default expose, will have as_format set to "json". When as_format is set, passing the same value in the tg_format parameter in a request will choose the options for that expose decorator. Similarly, accept_format will watch for matching Accept headers. You can also use both. expose("json", as_format="json", accept_format="text/javascript") will choose JSON output for either case: tg_format=json as a parameter or Accept: text/javascript as a request header. Passing allow_json=True to an expose decorator is equivalent to adding the decorator just mentioned. Each expose decorator has its own set of options, and each one can choose a different template or even template engine (you can use Kid for HTML output and Cheetah for plain text, for example). See the other expose parameters below to learn about the options you can pass to the template engine. Take a look at the test_expose.py suite for more examples. @param template "templateengine:dotted.reference" reference along the Python path for the template and the template engine. For example, "kid:foo.bar" will have Kid render the bar template in the foo package. @keyparam format format for the template engine to output (if the template engine can render different formats. Kid, for example, can render "html", "xml" or "xhtml") @keyparam content_type sets the content-type http header @keyparam allow_json allow the function to be exposed as json @keyparam fragment for template engines (like Kid) that generate DOCTYPE declarations and the like, this is a signal to just generate the immediate template fragment. Use this if you're building up a page from multiple templates or going to put something onto a page with .innerHTML. @keyparam mapping mapping with options that are sent to the template engine @keyparam as_format designates which value of tg_format will choose this expose. @keyparam accept_format which value of an Accept: header will choose this expose. @keyparam html deprecated in favor of template @keyparam validators deprecated. Maps argument names to validator applied to that arg @keyparam inputform deprecated. A form object that generates the input to this method """ if html: template = html if not template: template = format if format == "json" or (format == None and template == None): template = "json" allow_json = True if content_type is None: content_type = config.get("tg.content_type", None) if config.get("tg.session.automatic_lock",None) == True: cherrypy.session.acquire_lock() def entangle(func): log.debug("Exposing %s", func) log.debug("template: %s, format: %s, allow_json: %s, " "content-type: %s", template, format, allow_json, content_type) if not getattr(func, "exposed", False): def expose(func, *args, **kw): accept = cherrypy.request.headers.get('Accept', "").lower() if not hasattr(func, "_expose"): _build_rules(func) if hasattr(cherrypy.request, "in_transaction"): output = func._expose(func, accept, func._allow_json, *args, **kw) else: cherrypy.request.in_transaction = True output = database.run_with_transaction( func._expose, func, accept, func._allow_json, *args, **kw) return output func.exposed = True func._ruleinfo = [] allow_json_from_config = config.get( "tg.allow_json", False) func._allow_json = allow_json_from_config else: expose = lambda func, *args, **kw: func(*args, **kw) func._ruleinfo.insert(0, dict(as_format = as_format, accept_format = accept_format, template = template, rulefunc = lambda _func, accept, allow_json, *args, **kw: _execute_func(_func, template, format, content_type, mapping, fragment, args, kw))) if allow_json: func._allow_json = True if inputform or validators: import warnings warnings.warn( "Use a separate decorator validate() rather than passing " "arguments validators and/or inputform to decorator " "expose().", DeprecationWarning, 2) func = validate(form=inputform, validators=validators)(func) return expose return weak_signature_decorator(entangle) def _execute_func(func, template, format, content_type, mapping, fragment, args, kw): """Call controller method and process it's output.""" if config.get("tg.strict_parameters", False): tg_util.remove_keys(kw, ["tg_random", "tg_format"]) else: args, kw = tg_util.adapt_call(func, args, kw) if config.get('server.environment', 'development') == 'development': # Only output this in development mode: If it's a field storage object, # this means big memory usage, and we don't want that in production log.debug("Calling %s with *(%s), **(%s)", func, args, kw) output = errorhandling.try_call(func, *args, **kw) if isinstance(output, list): return output assert isinstance(output, basestring) or isinstance(output, dict) \ or isinstance(output, types.GeneratorType), \ "Method %s.%s() returned unexpected output. Output should " \ "be of type basestring, dict or generator." % ( args[0].__class__.__name__, func.__name__) if isinstance(output, dict): template = output.pop("tg_template", template) format= output.pop("tg_format", format) if template and template.startswith("."): template = func.__module__[:func.__module__.rfind('.')]+template return _process_output(output, template, format, content_type, mapping, fragment) def flash(message): """Set a message to be displayed in the browser on next page display.""" cherrypy.response.simple_cookie['tg_flash'] = tg_util.to_utf8(message) cherrypy.response.simple_cookie['tg_flash']['path'] = '/' def _get_flash(): """Retrieve the flash message (if one is set), clearing the message.""" request_cookie = cherrypy.request.simple_cookie response_cookie = cherrypy.response.simple_cookie def clearcookie(): response_cookie["tg_flash"] = "" response_cookie["tg_flash"]['expires'] = 0 response_cookie['tg_flash']['path'] = '/' if response_cookie.has_key("tg_flash"): message = response_cookie["tg_flash"].value response_cookie.pop("tg_flash") if request_cookie.has_key("tg_flash"): # New flash overrided old one sitting in cookie. Clear that old cookie. clearcookie() elif request_cookie.has_key("tg_flash"): message = request_cookie["tg_flash"].value if not response_cookie.has_key("tg_flash"): clearcookie() else: message = None if message: message = unicode(message, 'utf-8') return message class Controller(object): """Base class for a web application's controller. Currently, this provides positional parameters functionality via a standard default method. """ class RootController(Controller): """Base class for the root of a web application. Your web application should have one of these. The root of your application is used to compute URLs used by your app. """ is_app_root = True msglog = logging.getLogger('cherrypy.msg') msglogfunc = {0: msglog.info, 1: msglog.warning, 2: msglog.error} def _cp_log_message(self, msg, context = 'nocontext', severity = 0): log = self.msglogfunc[severity] text = ''.join((context, ': ', msg)) log(text) accesslog = logging.getLogger("turbogears.access") def _cp_log_access(self): tmpl = '%(h)s %(l)s %(u)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' try: username = cherrypy.request.user_name if not username: username = "-" except AttributeError: username = "-" s = tmpl % {'h': cherrypy.request.remote_host, 'l': '-', 'u': username, 'r': cherrypy.request.requestLine, 's': cherrypy.response.status.split(" ", 1)[0], 'b': cherrypy.response.headers.get('Content-Length', '') or "-", 'f': cherrypy.request.headers.get('referer', ''), 'a': cherrypy.request.headers.get('user-agent', ''), } self.accesslog.info(s) Root = RootController def url(tgpath, tgparams=None, **kw): """Computes URLs. tgpath can be a list or a string. If the path is absolute (starts with a "/"), the server.webpath and the approot of the application are prepended to the path. In order for the approot to be detected properly, the root object should extend controllers.RootController. Query parameters for the URL can be passed in as a dictionary in the second argument *or* as keyword parameters. """ if not isinstance(tgpath, basestring): tgpath = "/".join(list(tgpath)) if tgpath.startswith("/"): if tg_util.request_available(): check_app_root() tgpath = cherrypy.request.app_root + tgpath result = config.get("server.webpath", "") + tgpath else: result = tgpath if tgparams is not None: tgparams.update(kw) else: tgparams = kw args = [] for key, value in tgparams.iteritems(): if value is None: continue if isinstance(value, unicode): value = value.encode("utf8") args.append("%s=%s" % (key, urllib.quote(str(value)))) if args: result += "?" + "&".join(args) return result def check_app_root(): """Sets cherrypy.request.app_root if needed.""" if hasattr(cherrypy.request, "app_root"): return found_root = False trail = cherrypy.request.object_trail top = len(trail) - 1 # compute the app_root by stepping back through the object # trail and collecting up the path elements after the first # root we find # we can eliminate this if we find a way to use # CherryPy's mounting mechanism whenever a new root # is hit. rootlist = [] for i in xrange(len(trail) - 1, -1, -1): path, obj = trail[i] if not found_root and isinstance(obj, RootController): if i == top: break found_root = True if found_root and i > 0: rootlist.insert(0, path) app_root = "/".join(rootlist) if not app_root.startswith("/"): app_root = "/" + app_root if app_root.endswith("/"): app_root = app_root[:-1] cherrypy.request.app_root = app_root def redirect(redirect_path, redirect_params=None, **kw): """ Redirect (via cherrypy.HTTPRedirect). Raises the exception instead of returning it, this to allow users to both call it as a function or to raise it as an exeption. """ raise cherrypy.HTTPRedirect( url(tgpath=redirect_path, tgparams=redirect_params, **kw)) __all__ = ["expose", "validate", "redirect", "flash", "Root", "RootController", "Controller", "error_handler", "exception_handler", ] PKf6bYhYhturbogears/controllers.pyc; fFc @sxdZdkZdkZdkZdkZdklZdkZdkl Z l Z l Z dk i ZdkZdklZdklZlZlZlZdklZdklZdklZlZeid Zeid Z ei!d e"e#joRei!d e"d jo5dk$Z$ei%hde$i&e$i!d<qPne'dZ(de)fdYZ*e"e"ei+i,e"e"dZ-de i.fdYZ/dZ0dZ1e"e"e"e"e"e"e"e'de"e"d Z2dZ3dZ4dZ5de6fdYZ7de7fd YZ8e8Z9e"d!Z:d"Z;e"d#Z<d$d%d&d'd(ddd)d*g Z=dS(+s/Classes and methods for TurboGears controllers.N(sizip(sgenericsstrategys functions(sisclass(sviewsdatabases errorhandlingsconfig(sweak_signature_decorator(sInvalid(s error_handlersexception_handlersturbogears.controllerss([^\x00-\x7F])ssession_filter.onssession_filter.storage_types PostgreSQLssession_filter.get_dbssessions.postgres.dsnc Cst|todkl} ti}tt| t tit }h} t idg} t idto| iddnx| D]}ti|}t|o |}n|| d|iddodi?|}nt@iAd|iBd}nt|tCo|iB| }n|SdS(s Produces final output form from the data returned from a controller method. See the expose() arguments for more info in theses ones since they are the same. (s js_locationstg.include_widgetsstg.mochikit_allisturbogears.mochikitstg_%ss.islocations retrieve_csssretrieve_javascriptstg_cssstg_js_%sstg_flashstemplatesformatsmappings content_typesfragments Content-Types User-Agentstext/ssafariscCsdt|idS(Ns&#x%x;i(sordsmsgroup(sm((s/build\bdist.win32\egg\turbogears\controllers.pyslssasciiN(Ds isinstancesoutputsdictsturbogears.widgetss js_locationstg_utilssetlikescsssizipsitersNonesjssinclude_widgetssconfigsgetsinclude_widgets_lstsFalsesinsertsis load_classswidgetsisclassssplitsretrieve_javascriptsscriptshasattrslocationsaddsheadsadd_alls retrieve_csss itervaluessvaluesgetattrsretrievescallablesupdateslsstrs _get_flashstg_flashsviewsrenderstemplatesformatsmappings content_typesfragmentscherrypysresponsesheaderss contentTypesrequestsuasKeyErrors startswiths UserAgentsget_template_encoding_defaultsencsbrowsersdecodestypess GeneratorTypesjoins unicodecharsssubsencodesunicode(soutputstemplatesformats content_typesmappingsfragmentsretrievestg_flashswidgets js_locationsinclude_widgetssencsscriptsinclude_widgets_lstscsss contentTypesjssvaluesislsua((s/build\bdist.win32\egg\turbogears\controllers.pys_process_outputs  !       $       "sBadFormatErrorcBstZdZRS(sOutput-format exception.(s__name__s __module__s__doc__(((s/build\bdist.win32\egg\turbogears\controllers.pysBadFormatErrorrs cs&d}t|SdS(sQValidate input. @param form form to validate input from @param validators individual validators to use for parameters @param failsafe_schema fail-safe schema @param failsafe_values replacements for erroneous inputs @param state_factory callable which returns the initial state instance for validation csltd|totd odn dd}|SdS(Nsfuncsvalidatecs |S(N(sformsself(sself(sform(s/build\bdist.win32\egg\turbogears\controllers.pysscsS(N(sform(sself(sform(s/build\bdist.win32\egg\turbogears\controllers.pyssc s\tiddo|||Sn|o|dp|d}ti|||\}}h}t j o }nt }|oi|i }y|i|i||Wn-tj o!}|i}|ti_nX|ti_nottoixiD]T\}} y&| i|i|t |||s( s_exposesgenericsCustomDispatchsfuncs _allow_jsonslogsdebugswhensFalses found_defaults _ruleinfosruleinfos _add_rule(sfuncs found_defaultsruleinfos_expose((s/build\bdist.win32\egg\turbogears\controllers.pys _build_ruless    sdefaultc s|o |n o ndjptjo tjodtntjotidtntidttjot i i n d} t | SdS(sU Exposes a method to the web. By putting the expose decorator on a method, you tell TurboGears that the method should be accessible via URL traversal. Additionally, expose handles the output processing (turning a dictionary into finished output) and is also responsible for ensuring that the request is wrapped in a database transaction. You can apply multiple expose decorators to a method, if you'd like to support multiple output formats. The decorator that's listed first in your code without as_format or accept_format is the default that is chosen when no format is specifically asked for. Any other expose calls that are missing as_format and accept_format will have as_format implicitly set to the whatever comes before the ":" in the template name (or the whole template name if there is no ":". For example, expose("json"), if it's not the default expose, will have as_format set to "json". When as_format is set, passing the same value in the tg_format parameter in a request will choose the options for that expose decorator. Similarly, accept_format will watch for matching Accept headers. You can also use both. expose("json", as_format="json", accept_format="text/javascript") will choose JSON output for either case: tg_format=json as a parameter or Accept: text/javascript as a request header. Passing allow_json=True to an expose decorator is equivalent to adding the decorator just mentioned. Each expose decorator has its own set of options, and each one can choose a different template or even template engine (you can use Kid for HTML output and Cheetah for plain text, for example). See the other expose parameters below to learn about the options you can pass to the template engine. Take a look at the test_expose.py suite for more examples. @param template "templateengine:dotted.reference" reference along the Python path for the template and the template engine. For example, "kid:foo.bar" will have Kid render the bar template in the foo package. @keyparam format format for the template engine to output (if the template engine can render different formats. Kid, for example, can render "html", "xml" or "xhtml") @keyparam content_type sets the content-type http header @keyparam allow_json allow the function to be exposed as json @keyparam fragment for template engines (like Kid) that generate DOCTYPE declarations and the like, this is a signal to just generate the immediate template fragment. Use this if you're building up a page from multiple templates or going to put something onto a page with .innerHTML. @keyparam mapping mapping with options that are sent to the template engine @keyparam as_format designates which value of tg_format will choose this expose. @keyparam accept_format which value of an Accept: header will choose this expose. @keyparam html deprecated in favor of template @keyparam validators deprecated. Maps argument names to validator applied to that arg @keyparam inputform deprecated. A form object that generates the input to this method sjsonstg.content_typestg.session.automatic_lockcs%tid|tid t|dt o:d}t |_ g|_ t idt}||_n d}|i idtdd d d d  o t |_npo;dk}|id tdtdd|}n|SdS(Ns Exposing %ss:template: %s, format: %s, allow_json: %s, content-type: %ssexposedcOstiiiddi}t|d ot|nttido"|i |||i ||}n1tti_ti|i |||i ||}|SdS(NsAcceptss_exposesin_transaction(scherrypysrequestsheaderssgetslowersacceptshasattrsfuncs _build_ruless_exposes _allow_jsonsargsskwsoutputsTruesin_transactionsdatabasesrun_with_transaction(sfuncsargsskwsacceptsoutput((s/build\bdist.win32\egg\turbogears\controllers.pysexposeMs" $s tg.allow_jsoncOs |||S(N(sfuncsargsskw(sfuncsargsskw((s/build\bdist.win32\egg\turbogears\controllers.pys`sis as_formats accept_formatstemplatesrulefuncc st|||S(N( s _execute_funcs_funcstemplatesformats content_typesmappingsfragmentsargsskw(s_funcsaccepts allow_jsonsargsskw(s content_typesformatsmappingsfragmentstemplate(s/build\bdist.win32\egg\turbogears\controllers.pysdsstUse a separate decorator validate() rather than passing arguments validators and/or inputform to decorator expose().isforms validators(slogsdebugsfuncstemplatesformats allow_jsons content_typesgetattrsFalsesexposesTruesexposeds _ruleinfosconfigsgetsallow_json_from_configs _allow_jsonsinsertsdicts as_formats accept_formats inputforms validatorsswarningsswarnsDeprecationWarningsvalidate(sfuncswarningssexposesallow_json_from_config( s content_types validatorsstemplates as_formatsformatsfragmentsmappings inputforms accept_formats allow_json(s/build\bdist.win32\egg\turbogears\controllers.pysentangleHs*          N(shtmlstemplatesformatsNonesTrues allow_jsons content_typesconfigsgetscherrypyssessions acquire_locksentanglesweak_signature_decorator( stemplates validatorss allow_jsonshtmlsformats content_types inputformsfragments as_formatsmappings accept_formatsentangle(( stemplates validatorss allow_jsonsformats content_types inputformsfragments as_formatsmappings accept_formats/build\bdist.win32\egg\turbogears\controllers.pysexposesC  '  '.c Cstidtoti|ddgnti|||\}}tidddjot i d|||nt i |||}t|to|Snt|tp t|tpt|tip!td|dii|ift|to(|id |}|id|}n|o |id o!|i|iid  |}nt||||||Sd S( s/Call controller method and process it's output.stg.strict_parameterss tg_randoms tg_formatsserver.environments developmentsCalling %s with *(%s), **(%s)sbMethod %s.%s() returned unexpected output. Output should be of type basestring, dict or generator.is tg_templates.N(!sconfigsgetsFalsestg_utils remove_keysskws adapt_callsfuncsargsslogsdebugs errorhandlingstry_callsoutputs isinstanceslists basestringsdictstypess GeneratorTypesAssertionErrors __class__s__name__spopstemplatesformats startswiths __module__srfinds_process_outputs content_typesmappingsfragment( sfuncstemplatesformats content_typesmappingsfragmentsargsskwsoutput((s/build\bdist.win32\egg\turbogears\controllers.pys _execute_funcxs T!cCs1ti|tiids__doc__sloggingsresurllibstypess itertoolssizipscherrypysdispatchsgenericsstrategys functionssturbogears.utilsutilstg_utils turbogearssinspectsisclasssviewsdatabases errorhandlingsconfigsturbogears.decoratorsweak_signature_decoratorsturbogears.validatorssInvalidsturbogears.errorhandlings error_handlersexception_handlers getLoggerslogscompiles unicodecharssgetsNonesTruespsycopg2supdatesconnectsFalses_process_outputs ExceptionsBadFormatErrorsFailsafeSchemasnonesvalidatesGenericFunctionsCustomDispatchs _add_rules _build_rulessexposes _execute_funcsflashs _get_flashsobjects ControllersRootControllersRootsurlscheck_app_rootsredirects__all__((s _get_flashs turbogearssexception_handlersizipsInvalidsBadFormatErrors error_handlers _build_rulessredirects functionss unicodecharsscherrypys__all__sgenericspsycopg2sflashs _add_rulesurllibsstrategysres Controllersconfigstg_utils errorhandlingsisclasssexposesRootControllerscheck_app_rootsvalidatesRootstypesslogsweak_signature_decoratorsloggingsCustomDispatchsdatabasesurls_process_outputs _execute_funcsview((s/build\bdist.win32\egg\turbogears\controllers.pys?sJ            0 TE  *   $ $  PK<6 9877turbogears/database.py"""Provides convenient access to an SQLObject or SQLAlchemy managed database.""" import sys import time import logging try: import sqlobject from sqlobject.dbconnection import ConnectionHub, Transaction, TheURIOpener from sqlobject.util.threadinglocal import local as threading_local except ImportError: sqlobject = None import cherrypy from cherrypy.filters.basefilter import BaseFilter import dispatch from turbogears import config from turbogears.util import remove_keys from turbogears.genericfunctions import MultiorderGenericFunction log = logging.getLogger("turbogears.database") _engine = None # Provide support for sqlalchemy try: import sqlalchemy from sqlalchemy.ext import activemapper, sessioncontext from sqlalchemy.exceptions import InvalidRequestError def get_engine(): "Retreives the engine based on the current configuration" global _engine if not _engine: alch_args = dict() for k, v in config.config.configMap["global"].items(): if "sqlalchemy" in k: alch_args[k.split(".")[-1]] = v dburi = alch_args.pop('dburi') if not dburi: raise KeyError("No sqlalchemy database config found!") _engine = sqlalchemy.create_engine(dburi, **alch_args) metadata.connect(_engine) elif not metadata.is_bound(): metadata.connect(_engine) return _engine def create_session(): """Creates a session that uses the engine from thread-local metadata""" if not metadata.is_bound(): bind_meta_data() return sqlalchemy.create_session() metadata = activemapper.metadata session = activemapper.Objectstore(create_session) activemapper.objectstore = session def bind_meta_data(): get_engine() except ImportError: sqlalchemy = None try: set except NameError: from sets import Set as set hub_registry = set() # This dictionary stores the AutoConnectHubs used for each # connection URI _hubs = dict() if sqlobject: def _mysql_timestamp_converter(raw): """Convert a MySQL TIMESTAMP to a floating point number representing the seconds since the Un*x Epoch. It uses custom code the input seems to be the new (MySQL 4.1+) timestamp format, otherwise code from the MySQLdb module is used.""" if raw[4] == '-': return time.mktime(time.strptime(raw, '%Y-%m-%d %H:%M:%S')) else: import MySQLdb.converters return MySQLdb.converters.mysql_timestamp_converter(raw) class AutoConnectHub(ConnectionHub): """Connects to the database once per thread. The AutoConnectHub also provides convenient methods for managing transactions.""" uri = None params = {} def __init__(self, uri=None, supports_transactions=True): if not uri: uri = config.get("sqlobject.dburi") self.uri = uri self.supports_transactions = supports_transactions hub_registry.add(self) ConnectionHub.__init__(self) def _is_interesting_version(self): "Return True only if version of MySQLdb <= 1.0." import MySQLdb module_version = MySQLdb.version_info[0:2] major = module_version[0] minor = module_version[1] # we can't use Decimal here because it is only available for Python 2.4 return (major < 1 or (major == 1 and minor < 2)) def _enable_timestamp_workaround(self, connection): """Enable a workaround for an incompatible timestamp format change in MySQL 4.1 when using an old version of MySQLdb. See trac ticket #1235 - http://trac.turbogears.org/ticket/1235 for details.""" # precondition: connection is a MySQLConnection import MySQLdb import MySQLdb.converters if self._is_interesting_version(): conversions = MySQLdb.converters.conversions.copy() conversions[MySQLdb.constants.FIELD_TYPE.TIMESTAMP] = \ _mysql_timestamp_converter # There is no method to use custom keywords when using # "connectionForURI" in sqlobject so we have to insert the # conversions afterwards. connection.kw["conv"] = conversions def getConnection(self): try: conn = self.threadingLocal.connection return self.begin(conn) except AttributeError: if self.uri: conn = sqlobject.connectionForURI(self.uri) # the following line effectively turns off the DBAPI connection # cache. We're already holding on to a connection per thread, # and the cache causes problems with sqlite. if self.uri.startswith("sqlite"): TheURIOpener.cachedURIs = {} elif self.uri.startswith("mysql") and \ config.get("turbogears.enable_mysql41_timestamp_workaround", False): self._enable_timestamp_workaround(conn) self.threadingLocal.connection = conn return self.begin(conn) raise AttributeError( "No connection has been defined for this thread " "or process") def reset(self): """Used for testing purposes. This drops all of the connections that are being held.""" self.threadingLocal = threading_local() def begin(self, conn=None): "Starts a transaction." if not self.supports_transactions: return conn if not conn: conn = self.getConnection() if isinstance(conn, Transaction): if conn._obsolete: conn.begin() return conn self.threadingLocal.old_conn = conn trans = conn.transaction() self.threadingLocal.connection = trans return trans def commit(self): "Commits the current transaction." if not self.supports_transactions: return try: conn = self.threadingLocal.connection except AttributeError: return if isinstance(conn, Transaction): self.threadingLocal.connection.commit() def rollback(self): "Rolls back the current transaction." if not self.supports_transactions: return try: conn = self.threadingLocal.connection except AttributeError: return if isinstance(conn, Transaction) and not conn._obsolete: self.threadingLocal.connection.rollback() def end(self): "Ends the transaction, returning to a standard connection." if not self.supports_transactions: return try: conn = self.threadingLocal.connection except AttributeError: return if not isinstance(conn, Transaction): return if not conn._obsolete: conn.rollback() self.threadingLocal.connection = self.threadingLocal.old_conn del self.threadingLocal.old_conn self.threadingLocal.connection.cache.clear() class PackageHub(object): """Transparently proxies to an AutoConnectHub for the URI that is appropriate for this package. A package URI is configured via "packagename.dburi" in the global CherryPy settings. If there is no package DB URI configured, the default (provided by "sqlobject.dburi") is used. The hub is not instantiated until an attempt is made to use the database. """ def __init__(self, packagename): self.packagename = packagename self.hub = None def __get__(self, obj, type): if not self.hub: self.set_hub() return self.hub.__get__(obj, type) def __set__(self, obj, type): if not self.hub: self.set_hub() return self.hub.__set__(obj, type) def __getattr__(self, name): if not self.hub: self.set_hub() return getattr(self.hub, name) def set_hub(self): dburi = config.get("%s.dburi" % self.packagename, None) if not dburi: dburi = config.get("sqlobject.dburi", None) if not dburi: raise KeyError, "No database configuration found!" if dburi.startswith("notrans_"): dburi = dburi[8:] trans = False else: trans = True hub = _hubs.get(dburi, None) if not hub: hub = AutoConnectHub(dburi, supports_transactions=trans) _hubs[dburi] = hub self.hub = hub else: class AutoConnectHub(object): pass class PackageHub(object): pass def set_db_uri(dburi, package=None): """Sets the database URI to use either globally or for a specific package. Note that once the database is accessed, calling setDBUri will have no effect. @param dburi: database URI to use @param package: package name this applies to, or None to set the default. """ if package: config.update({'global': {"%s.dburi" % package : dburi} }) else: config.update({'global': {"sqlobject.dburi" : dburi} }) def commit_all(): "Commits the Transactions in all registered hubs (for this thread)" for hub in hub_registry: hub.commit() def rollback_all(): "Rolls back the Transactions in all registered hubs (for this thread)" for hub in hub_registry: hub.rollback() def end_all(): "Ends the Transactions in all registered hubs (for this thread)" for hub in hub_registry: hub.end() [dispatch.generic(MultiorderGenericFunction)] def run_with_transaction(func, *args, **kw): pass def _use_sa(args=None): # check to see if sqlalchemy has been imported and configured return _engine is not None [run_with_transaction.when("not _use_sa(args)")] # include "args" to avoid call being pre-cached def so_rwt(func, *args, **kw): log.debug("Starting SQLObject transaction") try: try: retval = func(*args, **kw) commit_all() return retval except cherrypy.HTTPRedirect: commit_all() raise except cherrypy.InternalRedirect: commit_all() raise except: # No need to "rollback" the sqlalchemy unit of work, because nothing # has hit the db yet. rollback_all() raise finally: end_all() def dispatch_exception(exception, args, kw): # errorhandling import here to avoid circular imports from turbogears.errorhandling import dispatch_error # Keep in mind func is not the real func but _expose real_func, accept, allow_json, controller = args[:4] args = args[4:] exc_type, exc_value, exc_trace = sys.exc_info() remove_keys(kw, ("tg_source", "tg_errors", "tg_exceptions")) try: output = dispatch_error( controller, real_func, None, exception, *args, **kw) except dispatch.NoApplicableMethods: raise exc_type, exc_value, exc_trace else: del exc_trace return output # include "args" to avoid call being pre-cached [run_with_transaction.when("_use_sa(args)")] def sa_rwt(func, *args, **kw): log.debug("New SA transaction") del session.context.current req = cherrypy.request req.sa_transaction = session.create_transaction() try: retval = func(*args, **kw) req.sa_transaction.commit() except (cherrypy.HTTPRedirect,cherrypy.InternalRedirect): try: req.sa_transaction.commit() except Exception,e: retval = dispatch_exception(e,args,kw) else: raise except InvalidRequestError, e: # do nothing here transaction # has been already rolledback and # we should just display output pass except Exception, e: req.sa_transaction.rollback() retval = dispatch_exception(e,args,kw) return retval def so_to_dict(sqlobj): "Converts SQLObject to a dictionary based on columns" d = {} if sqlobj == None: # stops recursion return d for name in sqlobj.sqlmeta.columns.keys(): d[name] = getattr(sqlobj, name) "id must be added explicitly" d["id"] = sqlobj.id if sqlobj._inheritable: d.update(so_to_dict(sqlobj._parent)) d.pop('childName') return d def so_columns(sqlclass, columns=None): """Returns a dict with all columns from a SQLObject including those from InheritableSO's bases""" if columns is None: columns = {} columns.update(filter(lambda i: i[0] != 'childName', sqlclass.sqlmeta.columns.items())) if sqlclass._inheritable: so_columns(sqlclass.__base__, columns) return columns def so_joins(sqlclass, joins=None): """Returns a list with all joins from a SQLObject including those from InheritableSO's bases""" if joins is None: joins = [] joins.extend(sqlclass.sqlmeta.joins) if sqlclass._inheritable: so_joins(sqlclass.__base__, joins) return joins class EndTransactionsFilter(BaseFilter): def on_end_resource(self): if _use_sa(): session.clear() end_all() __all__ = ["PackageHub", "AutoConnectHub", "set_db_uri", "commit_all", "rollback_all", "end_all", "so_to_dict", "so_columns", "so_joins", "EndTransactionsFilter"] if sqlalchemy: __all__.extend(["metadata", "session", "bind_meta_data"]) PKf6g J Jturbogears/database.pyc; T-Fc @sdZdkZdkZdkZy3dkZdklZlZlZdk l Z Wne j o e ZnXdkZdklZdkZdklZdklZdklZeidZe ayidkZd klZlZd kl Z d Z!d Z"ei#Z#ei$e"Z%e%e_&d Z'Wne j o e ZnXye(Wn e)j odk*l+Z(nXe(Z,e-Z.eo9dZ/defdYZ0de1fdYZ2n-de1fdYZ0de1fdYZ2e dZ3dZ4dZ5dZ6ei7egdZ8e dZ9e8i:dgdZ;dZ<e8i:dgd Z=d!Z>e d"Z?e d#Z@d$efd%YZAddd&d'd(d)d*d+d,d$g ZBeoeBiCd-d.d/gndS(0sJProvides convenient access to an SQLObject or SQLAlchemy managed database.N(s ConnectionHubs Transactions TheURIOpener(slocal(s BaseFilter(sconfig(s remove_keys(sMultiorderGenericFunctionsturbogears.database(s activemapperssessioncontext(sInvalidRequestErrorcCst ot}xLtiidiD]4\}}d|jo|||iddEnds the Transactions in all registered hubs (for this thread)N(s hub_registryshubsend(shub((s,build\bdist.win32\egg\turbogears\database.pysend_all!scOsdS(N((sfuncsargsskw((s,build\bdist.win32\egg\turbogears\database.pysrun_with_transaction'scCsttj SdS(N(s_enginesNone(sargs((s,build\bdist.win32\egg\turbogears\database.pys_use_sa*ssnot _use_sa(args)cOstidzty|||}t|SWnOtij otn1ti j otnt nXWdt XdS(NsStarting SQLObject transaction( slogsdebugsfuncsargsskwsretvals commit_allscherrypys HTTPRedirectsInternalRedirects rollback_allsend_all(sfuncsargsskwsretval((s,build\bdist.win32\egg\turbogears\database.pysso_rwt/s"  c Csdkl}|d \}}} }|d}ti\} }}t |dddfy|||t|||} Wn"tij o| ||n X~| SdS(N(sdispatch_erroris tg_sources tg_errorss tg_exceptions(sturbogears.errorhandlingsdispatch_errorsargss real_funcsaccepts allow_jsons controllerssyssexc_infosexc_types exc_values exc_traces remove_keysskwsNones exceptionsoutputsdispatchsNoApplicableMethods( s exceptionsargsskws exc_traces real_funcsaccepts exc_values controllersdispatch_errorsoutputsexc_types allow_json((s,build\bdist.win32\egg\turbogears\database.pysdispatch_exceptionDs  s _use_sa(args)cOstidti`ti}ti|_ y |||}|i iWntitifj oEy|i iWn'tj o}t|||}qXnItj o }n5tj o(}|i it|||}nX|SdS(NsNew SA transaction(slogsdebugssessionscontextscurrentscherrypysrequestsreqscreate_transactionssa_transactionsfuncsargsskwsretvalscommits HTTPRedirectsInternalRedirects Exceptionsesdispatch_exceptionsInvalidRequestErrorsrollback(sfuncsargsskwsesreqsretval((s,build\bdist.win32\egg\turbogears\database.pyssa_rwtYs&    cCsh}|tjo|Snx-|iiiD]}t||||sN( scolumnssNonesupdatesfilterssqlclassssqlmetasitemss _inheritables so_columnss__base__(ssqlclassscolumns((s,build\bdist.win32\egg\turbogears\database.pys so_columnss   cCsP|tjo g}n|i|ii|iot|i|n|SdS(s]Returns a list with all joins from a SQLObject including those from InheritableSO's basesN(sjoinssNonesextendssqlclassssqlmetas _inheritablesso_joinss__base__(ssqlclasssjoins((s,build\bdist.win32\egg\turbogears\database.pysso_joinss   sEndTransactionsFiltercBstZdZRS(NcCs#totintdS(N(s_use_sassessionsclearsend_all(sself((s,build\bdist.win32\egg\turbogears\database.pyson_end_resources (s__name__s __module__son_end_resource(((s,build\bdist.win32\egg\turbogears\database.pysEndTransactionsFilterss set_db_uris commit_alls rollback_allsend_alls so_to_dicts so_columnssso_joinssmetadatassessionsbind_meta_data(Ds__doc__ssysstimesloggings sqlobjectssqlobject.dbconnections ConnectionHubs Transactions TheURIOpenerssqlobject.util.threadinglocalslocalsthreading_locals ImportErrorsNonescherrypyscherrypy.filters.basefilters BaseFiltersdispatchs turbogearssconfigsturbogears.utils remove_keyssturbogears.genericfunctionssMultiorderGenericFunctions getLoggerslogs_engines sqlalchemyssqlalchemy.exts activemapperssessioncontextssqlalchemy.exceptionssInvalidRequestErrors get_enginescreate_sessionsmetadatas Objectstoressessions objectstoresbind_meta_datassets NameErrorssetssSets hub_registrysdicts_hubss_mysql_timestamp_convertersAutoConnectHubsobjects PackageHubs set_db_uris commit_alls rollback_allsend_allsgenericsrun_with_transactions_use_saswhensso_rwtsdispatch_exceptionssa_rwts so_to_dicts so_columnssso_joinssEndTransactionsFilters__all__sextend(,ssetscherrypys_mysql_timestamp_convertersbind_meta_datasdispatchs sqlalchemys so_columnss TheURIOpeners_hubsssa_rwtslogs__all__s BaseFiltersAutoConnectHubs ConnectionHubsend_alls rollback_allssessioncontextsconfigsmetadatas hub_registrys Transactions activemappers get_enginestimes commit_allsrun_with_transactionssyss_use_sasInvalidRequestErrors so_to_dictsso_rwtscreate_sessions sqlobjectsloggingsso_joinss PackageHubs set_db_urisdispatch_exceptionssessions remove_keyssthreading_localsMultiorderGenericFunctionsEndTransactionsFilter((s,build\bdist.win32\egg\turbogears\database.pys?sx                      v.           $PK@6@4 ``turbogears/decorator.pyimport itertools from copy import copy from inspect import getargspec, formatargspec from peak.util.decorators import decorate_assignment # Inspired by Michele Simionato's decorator library # http://www.phyast.pitt.edu/~micheles/python/documentation.html def decorate(func, caller, signature=None): """Decorate func with caller.""" if signature is not None: argnames, varargs, kwargs, defaults = signature else: argnames, varargs, kwargs, defaults = getargspec(func) if defaults is None: defaults = () parameters = formatargspec(argnames, varargs, kwargs, defaults)[1:-1] defval = itertools.count(len(argnames)-len(defaults)) args = formatargspec(argnames, varargs, kwargs, defaults, formatvalue=lambda value:"=%s" % ( argnames[defval.next()]))[1:-1] func_str = """ def %s(%s): return caller(func, %s) """ % (func.__name__, parameters, args) exec_dict = dict(func=func, caller=caller) exec func_str in exec_dict newfunc = exec_dict[func.__name__] newfunc.__doc__ = func.__doc__ newfunc.__dict__ = func.__dict__.copy() newfunc.__module__ = func.__module__ if hasattr(func, "__composition__"): newfunc.__composition__ = copy(func.__composition__) else: newfunc.__composition__ = [func] newfunc.__composition__.append(newfunc) return newfunc def decorator(entangler, signature=None): """Decorate function with entangler. Use signature as signature or preserve original signature if signature is None. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. """ def callback(frame, k, v, old_locals): return decorate(v, entangler(v), signature) return decorate_assignment(callback, 3) def weak_signature_decorator(entangler): """Decorate function with entangler and change signature to accept arbitrary additional arguments. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. """ def callback(frame, k, v, old_locals): return decorate(v, entangler(v), make_weak_signature(v)) return decorate_assignment(callback, 3) def simple_decorator(caller, signature=None): """Decorate function with caller.""" def entangle(func): return decorate(func, caller, signature) return entangle def simple_weak_signature_decorator(caller): """Decorate function with caller and change signature to accept arbitrary additional arguments.""" def entangle(func): return decorate(func, caller, make_weak_signature(func)) return entangle def make_weak_signature(func): """Change signature to accept arbitrary additional arguments.""" argnames, varargs, kwargs, defaults = getargspec(func) if kwargs is None: kwargs = "_decorator__kwargs" if varargs is None: varargs = "_decorator__varargs" return argnames, varargs, kwargs, defaults def compose(*decorators): """Compose decorators.""" return lambda func: reduce(lambda f, g: g(f), decorators, func) def func_composition(func): """Return composition (decorator wise) of function.""" return getattr(func, "__composition__", [func]) def func_original(func): """Return original (undecorated) function.""" return func_composition(func)[0] def func_id(func): """Return identity of function. Identity is invariant under decorator application (if decorator is created with decorator() or weak_signature_decorator()). """ return id(func_original(func)) def func_eq(f, g): """Check if functions are identical.""" return func_id(f) == func_id(g) __all__ = ["decorator", "compose", "func_id", "func_eq", "func_original", "func_composition", "weak_signature_decorator", "decorate", "make_weak_signature", "simple_decorator", "simple_weak_signature_decorator",] PKf6L"Nturbogears/decorator.pyc; xp+Fc @sdkZdklZdklZlZdklZedZedZ dZ edZ dZ d Z d Zd Zd Zd ZdZdddddddddddg ZdS(N(scopy(s getargspecs formatargspec(sdecorate_assignmentc sl|ej o|\} }}ne|\} }}|ejo f}ne| ||dd!}e i e e |e| ||dddd!}d|i||f} ed|d|} | | U| |i}|i|_|ii|_|i|_e|doe|i|_n |g|_|ii||Sd S( sDecorate func with caller.iis formatvaluecsdiS(Ns=%s(sargnamessdefvalsnext(svalue(sdefvalsargnames(s-build\bdist.win32\egg\turbogears\decorator.pysss' def %s(%s): return caller(func, %s) sfuncscallers__composition__N(s signaturesNonesargnamessvarargsskwargssdefaultss getargspecsfuncs formatargspecs parameterss itertoolsscountslensdefvalsargss__name__sfunc_strsdictscallers exec_dictsnewfuncs__doc__s__dict__scopys __module__shasattrs__composition__sappend( sfuncscallers signaturesargssdefaultss parametersskwargssargnamessnewfuncsdefvalsvarargssfunc_strs exec_dict((sargnamessdefvals-build\bdist.win32\egg\turbogears\decorator.pysdecorate s,       cs d}t|dSdS(sRDecorate function with entangler. Use signature as signature or preserve original signature if signature is None. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. cst||SdS(N(sdecoratesvs entanglers signature(sframesksvs old_locals(s entanglers signature(s-build\bdist.win32\egg\turbogears\decorator.pyscallback9siN(scallbacksdecorate_assignment(s entanglers signaturescallback((s entanglers signatures-build\bdist.win32\egg\turbogears\decorator.pys decorator+s csd}t|dSdS(s;Decorate function with entangler and change signature to accept arbitrary additional arguments. Enables alternative decorator syntax for Python 2.3 as seen in PEAK: [my_decorator(foo)] def baz(): pass Mind, the decorator needs to be a closure for this syntax to work. cs t||t|SdS(N(sdecoratesvs entanglersmake_weak_signature(sframesksvs old_locals(s entangler(s-build\bdist.win32\egg\turbogears\decorator.pyscallbackIsiN(scallbacksdecorate_assignment(s entanglerscallback((s entanglers-build\bdist.win32\egg\turbogears\decorator.pysweak_signature_decorator=s  csd}|SdS(sDecorate function with caller.cst|SdS(N(sdecoratesfuncscallers signature(sfunc(scallers signature(s-build\bdist.win32\egg\turbogears\decorator.pysentangleOsN(sentangle(scallers signaturesentangle((scallers signatures-build\bdist.win32\egg\turbogears\decorator.pyssimple_decoratorMscsd}|SdS(s`Decorate function with caller and change signature to accept arbitrary additional arguments.cst|t|SdS(N(sdecoratesfuncscallersmake_weak_signature(sfunc(scaller(s-build\bdist.win32\egg\turbogears\decorator.pysentangleVsN(sentangle(scallersentangle((scallers-build\bdist.win32\egg\turbogears\decorator.pyssimple_weak_signature_decoratorSs cCsZt|\}}}}|tjo d}n|tjo d}n||||fSdS(s:Change signature to accept arbitrary additional arguments.s_decorator__kwargss_decorator__varargsN(s getargspecsfuncsargnamessvarargsskwargssdefaultssNone(sfuncsvarargssargnamessdefaultsskwargs((s-build\bdist.win32\egg\turbogears\decorator.pysmake_weak_signatureZs    csdSdS(sCompose decorators.cstd|S(NcCs ||S(N(sgsf(sfsg((s-build\bdist.win32\egg\turbogears\decorator.pyses(sreduces decoratorssfunc(sfunc(s decorators(s-build\bdist.win32\egg\turbogears\decorator.pysesN((s decorators((s decoratorss-build\bdist.win32\egg\turbogears\decorator.pyscomposecscCst|d|gSdS(s0Return composition (decorator wise) of function.s__composition__N(sgetattrsfunc(sfunc((s-build\bdist.win32\egg\turbogears\decorator.pysfunc_compositiongscCst|dSdS(s'Return original (undecorated) function.iN(sfunc_compositionsfunc(sfunc((s-build\bdist.win32\egg\turbogears\decorator.pys func_originalkscCstt|SdS(sReturn identity of function. Identity is invariant under decorator application (if decorator is created with decorator() or weak_signature_decorator()). N(sids func_originalsfunc(sfunc((s-build\bdist.win32\egg\turbogears\decorator.pysfunc_idoscCst|t|jSdS(s!Check if functions are identical.N(sfunc_idsfsg(sfsg((s-build\bdist.win32\egg\turbogears\decorator.pysfunc_eqwss decoratorscomposesfunc_idsfunc_eqs func_originalsfunc_compositionsweak_signature_decoratorsdecoratesmake_weak_signaturessimple_decoratorssimple_weak_signature_decorator(s itertoolsscopysinspects getargspecs formatargspecspeak.util.decoratorssdecorate_assignmentsNonesdecorates decoratorsweak_signature_decoratorssimple_decoratorssimple_weak_signature_decoratorsmake_weak_signaturescomposesfunc_compositions func_originalsfunc_idsfunc_eqs__all__(ssimple_decoratorsweak_signature_decoratorscopys__all__smake_weak_signaturesfunc_compositions formatargspecssimple_weak_signature_decorators itertoolsscomposesdecoratesfunc_eqsdecorate_assignments getargspecs func_originals decoratorsfunc_id((s-build\bdist.win32\egg\turbogears\decorator.pys?s            PK P6't++turbogears/docgen.pyimport os import sys import shutil import time from glob import glob from setuptools import Command import pkg_resources pkg_resources.require("Kid >= 0.6.4") import kid import re from distutils import log class GenSite(Command): "setuptools command to generate the TurboGears website" user_options = [ ("srcdirs=", "s", "directories containing the source files (default: docs)"), ("destdir=", "d", "destination output directory (default: dist/site)"), ("encoding=", "e", "encoding for output (default: utf8)"), ("force", "f", "regenerate all files"), ("ignoredirs=", "i", "directories to ignore (default: ['.svn', '.cvs'])"), ("ignorefiles=", "x", "files to ignore (default: ['.*\\.pyc', '.DS_Store'])"), ("nodelete=", "l", "directories to leave alone rather than delete"), ("templates=", "t", "mapping of templates to load (format: name=templatefile,name=templatefile)"), ("copydirs=", "c", "copy files from these directories without template proc. (destdir=srcdir,...)"), ("noprintable", "N", "don't make printable version of tutorials"), ("eggdir=", "g", "which directory has the eggs in it (default: '../thirdparty/eggs')") ] boolean_options=["force"] srcdirs = None destdir = "dist/site" encoding = "utf8" force = False ignoredirs = None ignorefiles = None nodelete = None templates = None copydirs = None eggdir = "../thirdparty/eggs" noprintable = False def initialize_options(self): pass def finalize_options(self): if self.srcdirs is None: self.srcdirs = ["docs"] if self.srcdirs == "": self.srcdirs = [] self.ensure_string_list("srcdirs") self.ensure_string("destdir", "dist/site") self.ensure_string("encoding", "utf8") if self.ignoredirs is None: self.ignoredirs = [".svn", ".cvs"] self.ensure_string_list("ignoredirs") if self.ignorefiles is None: self.ignorefiles = ['.*\\.pyc', '.DS_Store'] if self.nodelete is None: self.nodelete = ["dist/site/preview"] self.ensure_string_list("nodelete") self.ensure_string_list("ignorefiles") regexes = [] for pat in self.ignorefiles: regexes.append(re.compile(pat)) self.ignorepatterns = regexes self.templates, self.templates_order = self._split_mapping(self.templates, True) self.copydirs = self._split_mapping(self.copydirs) def _split_mapping(self, valToSplit, preserve_order=False): mapping = {} order = [] if valToSplit and isinstance(valToSplit, basestring): pairs = re.split(",\s*", valToSplit) for pair in pairs: name, filename = re.split("\s*=\s*", pair) mapping[name] = os.path.abspath(filename) order.append(name) if preserve_order: return mapping, order return mapping def check_if_newer(self, src, dest): srcmtime = os.path.getmtime(src) if os.path.exists(dest): destmtime = os.path.getmtime(dest) else: destmtime = 0 return srcmtime > destmtime def copy_if_newer(self, src, dest): if self.force or self.check_if_newer(src, dest): d = os.path.dirname(dest) if not os.path.exists(d): os.makedirs(d) self.copy_file(src, dest) def render_template(self, src, dest, depth): if not self.force and not self.check_if_newer(src, dest): return if not self.dry_run: log.info("rendering %s" % dest) else: log.info("skipping rendering %s" % dest) return template = kid.load_template(src, cache=False) template.Template.serializer = self.serializer toroot = "../" * depth destfile = dest[len(self.destdir)+1:] updated = time.strftime("%b %d, %Y", time.localtime(os.path.getmtime(src))) output = template.serialize(encoding=self.encoding, root=toroot, updated=updated, destfile=destfile, eggs=self.eggs) output = output.replace("$$", "$") destfile = open(dest, "w") destfile.write(output) destfile.close() def update_site_files(self, srcdir, processTemplates = True, destroot=None): if not destroot: destroot = self.destdir for root, dirs, files in os.walk(srcdir): if root != srcdir: fromroot = root[len(srcdir)+1:] segments = fromroot.split(os.sep) if set(segments).intersection(self.ignoredirs): continue depth = len(segments) else: fromroot = "" depth = 0 destdir = os.path.join(destroot, fromroot) if not os.path.exists(destdir): if not self.dry_run: log.info("creating directory %s" % (destdir)) os.makedirs(destdir) else: log.info("skipping creating directory %s" % (destdir)) for file in files: ignore = False abs = os.path.abspath(file) for pat in self.ignorepatterns: if pat.match(file): ignore = True break if ignore: continue for tempfile in self.templates.values(): if tempfile == abs: ignore = True break if ignore: continue ext = os.path.splitext(file)[1] dest = os.path.join(destdir, file) self.currentfiles.add(dest) if not processTemplates or ext != ".html": self.copy_if_newer(os.path.join(root, file), dest) else: self.render_template(os.path.join(root, file), dest, depth) def delete_excess_files(self): for root, dirs, files in os.walk(self.destdir): leavealone = False for dirname in self.nodelete: if root.startswith(dirname): leavealone = True break if leavealone: continue for file in files: dest = os.path.join(root, file) if dest not in self.currentfiles: if not self.dry_run: log.info("deleting %s" % dest) os.unlink(dest) else: log.info("skipping deleting %s" % dest) def run(self): destdir = self.destdir log.info("generating website to %s" % destdir) if not os.path.exists(destdir): log.info("creating %s" % destdir) os.makedirs(destdir) for name in self.templates_order: filename = self.templates[name] log.info("template %s loaded as %s" % (filename, name)) kid.load_template(filename, name=name) if self.eggdir: if not self.eggdir.endswith("/"): self.eggdir += "/" choplen = len(self.eggdir) self.eggs = [fn[choplen:] for fn in glob(self.eggdir + "*")] self.eggs.sort() self.currentfiles = set() self.serializer = kid.HTMLSerializer(encoding=self.encoding) for d in self.srcdirs: self.update_site_files(d) for dest, src in self.copydirs.items(): if os.path.isdir(src): self.update_site_files(src, processTemplates=False, destroot=os.path.join(self.destdir, dest)) else: destfile = os.path.join(self.destdir, os.path.normpath(dest)) self.copy_if_newer(src, destfile) self.currentfiles.add(destfile) self.printable_tutorial() self.delete_excess_files() def printable_tutorial(self): if self.noprintable: return self._make_printable(os.path.join("docs", "tutorials", "wiki20"), 3) self._make_printable(os.path.join("docs", "wiki20")) def _make_printable(self, tutdir, up_to_root=2): endpath = tutdir tutdir = os.path.join(self.srcdirs[0], tutdir) import cElementTree as elementtree masterdoc = """ TurboGears: 20 Minute Wiki Tutorial """ docs = os.listdir(tutdir) docs.sort() for doc in docs: if not doc.endswith(".html"): continue log.info("combining %s" % doc) tree = elementtree.parse(os.path.join(tutdir, doc)) body = tree.find("{http://www.w3.org/1999/xhtml}body") map(body.remove, body.findall("{http://www.w3.org/1999/xhtml}script")) bodytext = elementtree.tostring(body) bodytext = bodytext.replace("", "") bodytext = bodytext.replace('', "") masterdoc += bodytext masterdoc += """ """ masterdoc = masterdoc.replace("html:", "") template = kid.Template(source=masterdoc, root="../" * up_to_root) template.serializer = self.serializer destend = os.path.join(self.destdir, endpath) if not os.path.exists(destend): os.makedirs(destend) outfn = os.path.join(destend, "printable.html") print "combined output: %s" % outfn outfile = open(outfn, "w") masterdoc = template.serialize(encoding=self.encoding) masterdoc = masterdoc.replace("$${", "${") outfile.write(masterdoc) outfile.close() self.currentfiles.add(outfn) PKf6lK3K3turbogears/docgen.pyc; LEc@sdkZdkZdkZdkZdklZdklZdkZeiddk Z dk Z dk l Z defdYZ dS(N(sglob(sCommands Kid >= 0.6.4(slogsGenSitec BsRtZdZdddfdddfddd fd d d fd ddfdddfdddfdddfdddfdddfdd d!fg Zd gZeZd"Zd#Ze Z eZ eZ eZ eZeZd$Ze Zd%Zd&Ze d'Zd(Zd)Zd*Zeed+Zd,Zd-Zd.Zd/d0ZRS(1s5setuptools command to generate the TurboGears websitessrcdirs=sss7directories containing the source files (default: docs)sdestdir=sds1destination output directory (default: dist/site)s encoding=ses#encoding for output (default: utf8)sforcesfsregenerate all filess ignoredirs=sis1directories to ignore (default: ['.svn', '.cvs'])s ignorefiles=sxs3files to ignore (default: ['.*\.pyc', '.DS_Store'])s nodelete=sls-directories to leave alone rather than deletes templates=stsJmapping of templates to load (format: name=templatefile,name=templatefile)s copydirs=scsMcopy files from these directories without template proc. (destdir=srcdir,...)s noprintablesNs)don't make printable version of tutorialsseggdir=sgsBwhich directory has the eggs in it (default: '../thirdparty/eggs')s dist/sitesutf8s../thirdparty/eggscCsdS(N((sself((s*build\bdist.win32\egg\turbogears\docgen.pysinitialize_options,scCsj|itjodg|_n|idjo g|_n|id|idd|idd|itjodd g|_n|id |itjod d g|_n|itjod g|_n|id|idg}x'|iD]}|i t i |qW||_ |i|it\|_|_|i|i|_dS(Nsdocssssrcdirssdestdirs dist/sitesencodingsutf8s.svns.cvss ignoredirss.*\.pycs .DS_Storesdist/site/previewsnodeletes ignorefiles(sselfssrcdirssNonesensure_string_lists ensure_strings ignoredirss ignorefilessnodeletesregexesspatsappendsrescompilesignorepatternss_split_mappings templatessTruestemplates_orderscopydirs(sselfspatsregexes((s*build\bdist.win32\egg\turbogears\docgen.pysfinalize_options/s.       !c Csh}g}|o t|tobtid|}xM|D]A}tid|\}}t i i |||<|i|q<Wn|o||fSn|SdS(Ns,\s*s\s*=\s*(smappingsorders valToSplits isinstances basestringsressplitspairsspairsnamesfilenamesosspathsabspathsappendspreserve_order( sselfs valToSplitspreserve_ordersnamesmappingsfilenamespairspairssorder((s*build\bdist.win32\egg\turbogears\docgen.pys_split_mappingIscCsOtii|}tii|otii|}nd}||jSdS(Ni(sosspathsgetmtimessrcssrcmtimesexistssdests destmtime(sselfssrcsdestssrcmtimes destmtime((s*build\bdist.win32\egg\turbogears\docgen.pyscheck_if_newerVs cCsl|ip|i||oKtii|}tii | oti |n|i ||ndS(N( sselfsforcescheck_if_newerssrcsdestsosspathsdirnamesdsexistssmakedirss copy_file(sselfssrcsdestsd((s*build\bdist.win32\egg\turbogears\docgen.pys copy_if_newer^s c Cs4|i o|i|| odSn|i otid|ntid|dSti |dt }|i |i _ d|}|t|id}tidtitii|}|id|id|d |d |d |i}|id d }t|d}|i ||i!dS(Ns rendering %ssskipping rendering %sscaches../is %b %d, %Ysencodingsrootsupdatedsdestfileseggss$$s$sw("sselfsforcescheck_if_newerssrcsdestsdry_runslogsinfoskids load_templatesFalsestemplates serializersTemplatesdepthstorootslensdestdirsdestfilestimesstrftimes localtimesosspathsgetmtimesupdateds serializesencodingseggssoutputsreplacesopenswritesclose( sselfssrcsdestsdepthsupdatedsdestfilestemplatesoutputstoroot((s*build\bdist.win32\egg\turbogears\docgen.pysrender_templatees"  ' cCsQ| o |i}nx5ti|D]$\}} }||joV|t |d}|i ti }t|i|ioq%nt |}n d}d}tii||}tii| oB|i o"tid|ti|qtid|nx8|D]0}t}tii|} x,|iD]!}|i |o t!}Pq=q=W|oqnx/|i"i#D]} | | jo t!}PqqW|oqntii%|d} tii||} |i(i)| | p | djo#|i+tii||| q|i,tii||| |qWq%WdS(Nisiscreating directory %ssskipping creating directory %ss.html(-sdestrootsselfsdestdirsosswalkssrcdirsrootsdirssfilesslensfromrootssplitssepssegmentsssets intersections ignoredirssdepthspathsjoinsexistssdry_runslogsinfosmakedirssfilesFalsesignoresabspathsabssignorepatternsspatsmatchsTrues templatessvaluesstempfilessplitextsextsdests currentfilessaddsprocessTemplatess copy_if_newersrender_template(sselfssrcdirsprocessTemplatessdestrootsfilessdestdirsfromrootsfilespatstempfilesextsabssdirssdestsrootsignoresdepthssegments((s*build\bdist.win32\egg\turbogears\docgen.pysupdate_site_fileszsX        cCsxti|iD]\}}}t}x,|i D]!}|i |o t }Pq2q2W|oqnxu|D]m}tii||}||ijoB|i o"tid|ti|qtid|qlqlWqWdS(Ns deleting %ssskipping deleting %s(sosswalksselfsdestdirsrootsdirssfilessFalses leavealonesnodeletesdirnames startswithsTruesfilespathsjoinsdests currentfilessdry_runslogsinfosunlink(sselfsdirssfilessdests leavealonesfilesdirnamesroot((s*build\bdist.win32\egg\turbogears\docgen.pysdelete_excess_filess$   c Cs*|i}tid|tii| o"tid|ti|nxH|iD]=} |i | }tid|| ft i |d| qZW|io|iid o|id7_nt|i}gi}t|idD]} || |q~|_|iint|_t id|i|_x|iD]}|i|qUWx|i i!D]\}}tii$|o/|i|dt%d tii&|i|q|tii&|itii'|}|i)|||ii*|q|W|i+|i,dS( Nsgenerating website to %ss creating %sstemplate %s loaded as %ssnames/s*sencodingsprocessTemplatessdestroot(-sselfsdestdirslogsinfososspathsexistssmakedirsstemplates_ordersnames templatessfilenameskids load_templateseggdirsendswithslenschoplensappends_[1]sglobsfnseggsssortssets currentfilessHTMLSerializersencodings serializerssrcdirssdsupdate_site_filesscopydirssitemssdestssrcsisdirsFalsesjoinsnormpathsdestfiles copy_if_newersaddsprintable_tutorialsdelete_excess_files( sselfssrcsdestsdestdirsfilenames_[1]sdsdestfileschoplensfnsname((s*build\bdist.win32\egg\turbogears\docgen.pysruns>    ;    $ cCsT|iodSn|itiidddd|itiidddS(Nsdocss tutorialsswiki20i(sselfs noprintables_make_printablesosspathsjoin(sself((s*build\bdist.win32\egg\turbogears\docgen.pysprintable_tutorials "icCs|} tii|id|}dk} d}ti |}|i x|D]} | id oqQntid| | itii|| }|id}t|i|id| i|} | idd} | id d} || 7}qQW|d 7}|id d}tid |d d|} |i| _tii|i | }tii"| oti#|ntii|d}d|GHt%|d}| i'd|i(}|idd}|i)||i*|i+i,|dS(Nis{ TurboGears: 20 Minute Wiki Tutorial s.htmls combining %ss"{http://www.w3.org/1999/xhtml}bodys${http://www.w3.org/1999/xhtml}scripts ss5s shtml:ssourcesroots../sprintable.htmlscombined output: %sswsencodings$${s${(-stutdirsendpathsosspathsjoinsselfssrcdirss cElementTrees elementtrees masterdocslistdirsdocsssortsdocsendswithslogsinfosparsestreesfindsbodysmapsremovesfindallstostringsbodytextsreplaceskidsTemplates up_to_rootstemplates serializersdestdirsdestendsexistssmakedirssoutfnsopensoutfiles serializesencodingswritescloses currentfilessadd(sselfstutdirs up_to_rootsbodys masterdocsdestendsdocsstreesoutfilesbodytextsendpathstemplatesdocs elementtreesoutfn((s*build\bdist.win32\egg\turbogears\docgen.pys_make_printablesB        (s__name__s __module__s__doc__s user_optionssboolean_optionssNonessrcdirssdestdirsencodingsFalsesforces ignoredirss ignorefilessnodeletes templatesscopydirsseggdirs noprintablesinitialize_optionssfinalize_optionss_split_mappingscheck_if_newers copy_if_newersrender_templatesTruesupdate_site_filessdelete_excess_filessrunsprintable_tutorials_make_printable(((s*build\bdist.win32\egg\turbogears\docgen.pysGenSite s2       0  % (sosssyssshutilstimesglobs setuptoolssCommands pkg_resourcessrequireskidsres distutilsslogsGenSite( sGenSiteslogsglobs pkg_resourcesssyssresCommandstimesshutilsosskid((s*build\bdist.win32\egg\turbogears\docgen.pys?s           PK 6bHHturbogears/errorhandling.pyimport sys from itertools import izip, repeat, islice from inspect import getargspec import cherrypy from dispatch import generic, NoApplicableMethods, strategy from turbogears.util import inject_args, adapt_call, call_on_stack, has_arg, \ remove_keys, Enum, combine_contexts from turbogears.decorator import func_eq from turbogears.genericfunctions import MultiorderGenericFunction default = strategy.default def dispatch_error(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): """Dispatch error. Error handler is a function registered via register_handler or if no such decorator was applied, the method triggering the error. """ dispatch_error = generic(MultiorderGenericFunction)(dispatch_error) def _register_implicit_errh(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): """Register implicitly declared error handler and re-dispatch. Any method declaring tg_errors parameter is considered an implicitly declared error handler. """ error_handler(tg_source)(tg_source) return dispatch_error(controller, tg_source, tg_errors, tg_exceptions, *args, **kw) _register_implicit_errh = dispatch_error.when( "(tg_errors and has_arg(tg_source, 'tg_errors'))", order=3)( _register_implicit_errh) def _register_implicit_exch(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): """Register implicitly declared exception handler and re-dispatch. Any method declaring tg_exceptions parameter is considered an implicitly declared exception handler. """ exception_handler(tg_source)(tg_source) return dispatch_error(controller, tg_source, tg_errors, tg_exceptions, *args, **kw) _register_implicit_exch = dispatch_error.when( "(tg_exceptions and has_arg(tg_source, 'tg_exceptions'))", order=3)( _register_implicit_exch) def dispatch_error_adaptor(func): """Construct a signature isomorphic to dispatch_error. The actual handler will receive only arguments explicitly declared. """ def adaptor(controller, tg_source, tg_errors, tg_exceptions, *args, **kw): args, kw = inject_args(func, {"tg_source":tg_source, "tg_errors":tg_errors, "tg_exceptions":tg_exceptions}, args, kw, 1) args, kw = adapt_call(func, args, kw, 1) return func(controller, *args, **kw) return adaptor def try_call(func, self, *args, **kw): """Call function, catch and dispatch any resulting exception.""" # turbogears.database import here to avoid circular imports from turbogears.database import _use_sa try: return func(self, *args, **kw) except Exception, e: if isinstance(e, cherrypy.HTTPRedirect) or \ call_on_stack("dispatch_error", {"tg_source":func, "tg_exception":e}, 4): raise else: exc_type, exc_value, exc_trace = sys.exc_info() remove_keys(kw, ("tg_source", "tg_errors", "tg_exceptions")) try: output = dispatch_error(self, func, None, e, *args, **kw) except NoApplicableMethods: raise exc_type, exc_value, exc_trace else: del exc_trace if _use_sa() and getattr(cherrypy.request, "in_transaction", None): # using SA ? # Caught pants down in the middle of a transaction :) ? # rollback the transaction for this whole request cherrypy.request.sa_transaction.rollback() return output def run_with_errors(errors, func, self, *args, **kw): """Branch execution depending on presence of errors.""" if errors: if hasattr(self, "validation_error"): import warnings warnings.warn( "Use decorator error_handler() on per-method base " "rather than defining a validation_error() method.", DeprecationWarning, 2) return self.validation_error(func.__name__, kw, errors) else: remove_keys(kw, ("tg_source", "tg_errors", "tg_exceptions")) try: return dispatch_error(self, func, errors, None, *args, **kw) except NoApplicableMethods: raise NotImplementedError("Method %s.%s() has no applicable " "error handler." % (self.__class__.__name__, func.__name__)) else: return func(self, *args, **kw) def register_handler(handler=None, rules=None): """Register handler as an error handler for decorated method. If handler is not given, method is considered it's own error handler. rules can be a string containing an arbitrary logical Python expression to be used as dispatch rule allowing multiple error handlers for a single method. register_handler decorator is an invariant. """ def register(func): when = "func_eq(tg_source, func)" if rules: when += " and (%s)" % rules dispatch_error.when(dispatch_error.parse(when, *combine_contexts( depth=[0, 1])), order=1)(dispatch_error_adaptor(handler or func)) return func return register def bind_rules(pre_rules): """Prepend rules to error handler specialisation.""" def registrant(handler=None, rules=None): when = pre_rules if rules: when += " and (%s)" % rules return register_handler(handler, when) return registrant error_handler = bind_rules("tg_errors") exception_handler = bind_rules("tg_exceptions") FailsafeSchema = Enum("none", "values", "map_errors", "defaults") def dispatch_failsafe(schema, values, errors, source, kw): """Dispatch fail-safe mechanism for failed inputs.""" dispatch_failsafe = generic()(dispatch_failsafe) def _failsafe_none(schema, values, errors, source, kw): """No fail-safe values.""" return kw _failsafe_none = dispatch_failsafe.when(strategy.default)(_failsafe_none) def _failsafe_values_dict(schema, values, errors, source, kw): """Map erroneous inputs to values.""" for key in errors: if key in values: kw[key] = values[key] return kw _failsafe_values_dict = dispatch_failsafe.when( "schema is FailsafeSchema.values and isinstance(values, dict) and " "isinstance(errors, dict)")(_failsafe_values_dict) def _failsafe_values_atom(schema, values, errors, source, kw): """Map all erroneous inputs to a single value.""" for key in errors: kw[key] = values return kw _failsafe_values_atom = dispatch_failsafe.when( "schema is FailsafeSchema.values and isinstance(errors, dict)")( _failsafe_values_atom) def _failsafe_map_errors(schema, values, errors, source, kw): """Map erroneous inputs to coresponding exceptions.""" kw.update(errors) return kw _failsafe_map_errors = dispatch_failsafe.when( "schema is FailsafeSchema.map_errors and isinstance(errors, dict)")( _failsafe_map_errors) def _failsafe_defaults(schema, values, errors, source, kw): """Map erroneous inputs to method defaults.""" argnames, defaultvals = getargspec(source)[::3] defaults = dict(izip(islice(argnames, len(argnames) - len(defaultvals), None), defaultvals)) for key in errors: if key in defaults: kw[key] = defaults[key] return kw _failsafe_defaults = dispatch_failsafe.when( "schema is FailsafeSchema.defaults and isinstance(errors, dict)")( _failsafe_defaults) __all__ = ["dispatch_error", "dispatch_error_adaptor", "try_call", "run_with_errors", "default", "register_handler", "FailsafeSchema", "dispatch_failsafe", "error_handler", "exception_handler", ] PKf6c++turbogears/errorhandling.pyc; NFc @sAdkZdklZlZlZdklZdkZdkl Z l Z l Z dk l Z lZlZlZlZlZlZdklZdklZe iZdZe eeZdZeid d d eZd Zeid d d eZdZdZdZe e dZ!dZ"e"dZ#e"dZ$eddddZ%dZ&e e&Z&dZ'e&ie ie'Z'dZ(e&ide(Z(dZ)e&ide)Z)dZ*e&id e*Z*d!Z+e&id"e+Z+d#d$d%d&d'd(d)d*d+d,g Z,dS(-N(sizipsrepeatsislice(s getargspec(sgenericsNoApplicableMethodssstrategy(s inject_argss adapt_calls call_on_stackshas_args remove_keyssEnumscombine_contexts(sfunc_eq(sMultiorderGenericFunctioncOsdS(sDispatch error. Error handler is a function registered via register_handler or if no such decorator was applied, the method triggering the error. N((s controllers tg_sources tg_errorss tg_exceptionssargsskw((s1build\bdist.win32\egg\turbogears\errorhandling.pysdispatch_errorscOs-t||t||||||SdS(sRegister implicitly declared error handler and re-dispatch. Any method declaring tg_errors parameter is considered an implicitly declared error handler. N(s error_handlers tg_sourcesdispatch_errors controllers tg_errorss tg_exceptionssargsskw(s controllers tg_sources tg_errorss tg_exceptionssargsskw((s1build\bdist.win32\egg\turbogears\errorhandling.pys_register_implicit_errhss/(tg_errors and has_arg(tg_source, 'tg_errors'))sordericOs-t||t||||||SdS(sRegister implicitly declared exception handler and re-dispatch. Any method declaring tg_exceptions parameter is considered an implicitly declared exception handler. N(sexception_handlers tg_sourcesdispatch_errors controllers tg_errorss tg_exceptionssargsskw(s controllers tg_sources tg_errorss tg_exceptionssargsskw((s1build\bdist.win32\egg\turbogears\errorhandling.pys_register_implicit_exch&ss7(tg_exceptions and has_arg(tg_source, 'tg_exceptions'))csd}|SdS(sConstruct a signature isomorphic to dispatch_error. The actual handler will receive only arguments explicitly declared. cshthd|<d|<d|<||d\}}t||d\}}|||SdS(Ns tg_sources tg_errorss tg_exceptionsi( s inject_argssfuncs tg_sources tg_errorss tg_exceptionssargsskws adapt_calls controller(s controllers tg_sources tg_errorss tg_exceptionssargsskw(sfunc(s1build\bdist.win32\egg\turbogears\errorhandling.pysadaptor:s$N(sadaptor(sfuncsadaptor((sfuncs1build\bdist.win32\egg\turbogears\errorhandling.pysdispatch_error_adaptor4s c Os#dkl}y||||SWntj o}t|t i p"t dhd|<d|schema is FailsafeSchema.defaults and isinstance(errors, dict)sdispatch_errorsdispatch_error_adaptorstry_callsrun_with_errorssdefaultsregister_handlersFailsafeSchemasdispatch_failsafes error_handlersexception_handler(-ssyss itertoolssizipsrepeatsislicesinspects getargspecscherrypysdispatchsgenericsNoApplicableMethodssstrategysturbogears.utils inject_argss adapt_calls call_on_stackshas_args remove_keyssEnumscombine_contextssturbogears.decoratorsfunc_eqsturbogears.genericfunctionssMultiorderGenericFunctionsdefaultsdispatch_errors_register_implicit_errhswhens_register_implicit_exchsdispatch_error_adaptorstry_callsrun_with_errorssNonesregister_handlers bind_ruless error_handlersexception_handlersFailsafeSchemasdispatch_failsafes_failsafe_nones_failsafe_values_dicts_failsafe_values_atoms_failsafe_map_errorss_failsafe_defaultss__all__(%s_register_implicit_exchs adapt_callsdispatch_failsafescherrypysdispatch_error_adaptorsizips bind_ruless_register_implicit_errhs error_handlersNoApplicableMethodsscombine_contextss_failsafe_values_dictsFailsafeSchemas__all__sgenericsEnumsstrategysrun_with_errorssregister_handlers getargspecstry_calls_failsafe_defaultssrepeats_failsafe_nones inject_argsssyssdispatch_errorsisliceshas_argsdefaultsexception_handlersfunc_eqs call_on_stacks remove_keyssMultiorderGenericFunctions_failsafe_map_errorss_failsafe_values_atom((s1build\bdist.win32\egg\turbogears\errorhandling.pys?sF   1                 PKs6,,turbogears/finddata.py# Note: you may want to copy this into your setup.py file verbatim, as # you can't import this from another package, when you don't know if # that package is installed yet. import os import sys from fnmatch import fnmatchcase from distutils.util import convert_path # Provided as an attribute, so you can append to these instead # of replicating them: standard_exclude = ('*.py', '*.pyc', '*~', '.*', '*.bak', '*.swp*') standard_exclude_directories = ('.*', 'CVS', '_darcs', './build', './dist', 'EGG-INFO', '*.egg-info') def find_package_data( where='.', package='', exclude=standard_exclude, exclude_directories=standard_exclude_directories, only_in_packages=True, show_ignored=False): """ Return a dictionary suitable for use in ``package_data`` in a distutils ``setup.py`` file. The dictionary looks like:: {'package': [files]} Where ``files`` is a list of all the files in that package that don't match anything in ``exclude``. If ``only_in_packages`` is true, then top-level directories that are not packages won't be included (but directories under packages will). Directories matching any pattern in ``exclude_directories`` will be ignored; by default directories with leading ``.``, ``CVS``, and ``_darcs`` will be ignored. If ``show_ignored`` is true, then all the files that aren't included in package data are shown on stderr (for debugging purposes). Note patterns use wildcards, or can be exact paths (including leading ``./``), and all searching is case-insensitive. """ out = {} stack = [(convert_path(where), '', package, only_in_packages)] while stack: where, prefix, package, only_in_packages = stack.pop(0) for name in os.listdir(where): fn = os.path.join(where, name) if os.path.isdir(fn): bad_name = False for pattern in exclude_directories: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print >> sys.stderr, ( "Directory %s ignored by pattern %s" % (fn, pattern)) break if bad_name: continue if os.path.isfile(os.path.join(fn, '__init__.py')): if not package: new_package = name else: new_package = package + '.' + name stack.append((fn, '', new_package, False)) else: stack.append((fn, prefix + name + '/', package, only_in_packages)) elif package or not only_in_packages: # is a file bad_name = False for pattern in exclude: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print >> sys.stderr, ( "File %s ignored by pattern %s" % (fn, pattern)) break if bad_name: continue out.setdefault(package, []).append(prefix+name) return out if __name__ == '__main__': import pprint pprint.pprint( find_package_data(show_ignored=True)) PKf6"ŃY Y turbogears/finddata.pyc; *Fc@sdkZdkZdklZdklZddddddfZdd d d d d dfZddeeee dZ e djo#dk Z e i e dendS(N(s fnmatchcase(s convert_paths*.pys*.pycs*~s.*s*.baks*.swp*sCVSs_darcss./builds./distsEGG-INFOs *.egg-infos.sc Cs?h} t|d||fg} x| o | id\}} }}xti |D]}ti i ||} ti i| ot}xd|D]\} t|| p| i| ijo-t}|otid| | fIJnPqqW|oqVnti iti i | do=| o |}n|d|}| i| d|tfq.| i| | |d||fqV|p| ot}xd|D]\} t|| p| i| ijo-t}|otid| | fIJnPqqW|oqVn| i|gi| |qVqVWq$W| SdS( sj Return a dictionary suitable for use in ``package_data`` in a distutils ``setup.py`` file. The dictionary looks like:: {'package': [files]} Where ``files`` is a list of all the files in that package that don't match anything in ``exclude``. If ``only_in_packages`` is true, then top-level directories that are not packages won't be included (but directories under packages will). Directories matching any pattern in ``exclude_directories`` will be ignored; by default directories with leading ``.``, ``CVS``, and ``_darcs`` will be ignored. If ``show_ignored`` is true, then all the files that aren't included in package data are shown on stderr (for debugging purposes). Note patterns use wildcards, or can be exact paths (including leading ``./``), and all searching is case-insensitive. sis"Directory %s ignored by pattern %ss __init__.pys.s/sFile %s ignored by pattern %sN(souts convert_pathswherespackagesonly_in_packagessstackspopsprefixsosslistdirsnamespathsjoinsfnsisdirsFalsesbad_namesexclude_directoriesspatterns fnmatchcaseslowersTrues show_ignoredssyssstderrsisfiles new_packagesappendsexcludes setdefault(swherespackagesexcludesexclude_directoriessonly_in_packagess show_ignoredsnames new_packagesbad_namesprefixspatternsstacksfnsout((s,build\bdist.win32\egg\turbogears\finddata.pysfind_package_datasN) " %) *s__main__s show_ignored( sosssyssfnmatchs fnmatchcasesdistutils.utils convert_pathsstandard_excludesstandard_exclude_directoriessTruesFalsesfind_package_datas__name__spprint(s convert_paths fnmatchcasespprintssyssstandard_exclude_directoriessstandard_excludesfind_package_datasos((s,build\bdist.win32\egg\turbogears\finddata.pys?s    M  PK P6}D turbogears/genericfunctions.pyimport sys from itertools import izip, repeat, chain as ichain from dispatch import strategy, functions class MultiorderGenericFunction(functions.GenericFunction): """Generic function allowing a priori method ordering.""" def __init__(self, func): functions.GenericFunction.__init__(self, func) self.order_when = [] self.order_around = [] def when(self, cond, order=0): if order not in self.order_when: self.order_when.append(order) self.order_when.sort() return self._decorate(cond, "primary%d" % order) def around(self, cond, order=0): if order not in self.order_around: self.order_around.append(order) self.order_around.sort() return self._decorate(cond, "around%d" % order) # Based on dispatch.functions.GenericFunction.combine def combine(self, cases): strict = [strategy.ordered_signatures,strategy.safe_methods] loose = [strategy.ordered_signatures,strategy.all_methods] primary_names = ['primary%d' % order for order in self.order_when] around_names = ['around%d' % order for order in self.order_around] cases = strategy.separate_qualifiers( cases, before = loose, after =loose, **dict(izip(ichain(primary_names, around_names), repeat(strict))) ) primary = strategy.method_chain(ichain( *[cases.get(primary, []) for primary in primary_names])) if cases.get('after') or cases.get('before'): befores = strategy.method_list(cases.get('before',[])) afters = strategy.method_list(list(cases.get('after',[]))[::-1]) def chain(*args,**kw): for tmp in befores(*args,**kw): pass # toss return values result = primary(*args,**kw) for tmp in afters(*args,**kw): pass # toss return values return result else: chain = primary if (self.order_around): chain = strategy.method_chain(ichain(*([cases.get(around, []) for around in around_names] + [[chain]]))) return chain def getter(var): """Create an accessor for given variable.""" frame = sys._getframe(1) return lambda: var in frame.f_locals and frame.f_locals[var] or \ frame.f_globals[var] __all__ = ["MultiorderGenericFunction", "getter", ] PKf6><.turbogears/genericfunctions.pyc; LEc@sgdkZdklZlZlZdklZlZdei fdYZ dZ ddgZ dS(N(sizipsrepeatschain(sstrategys functionssMultiorderGenericFunctioncBs8tZdZdZddZddZdZRS(s3Generic function allowing a priori method ordering.cCs)tii||g|_g|_dS(N(s functionssGenericFunctions__init__sselfsfuncs order_whens order_around(sselfsfunc((s4build\bdist.win32\egg\turbogears\genericfunctions.pys__init__ s icCsI||ijo!|ii||iin|i|d|SdS(Ns primary%d(sordersselfs order_whensappendssorts _decoratescond(sselfscondsorder((s4build\bdist.win32\egg\turbogears\genericfunctions.pyswhenscCsI||ijo!|ii||iin|i|d|SdS(Nsaround%d(sordersselfs order_aroundsappendssorts _decoratescond(sselfscondsorder((s4build\bdist.win32\egg\turbogears\genericfunctions.pysaroundsc stitig}titig}gi}|i D]} |d| q5~} gi}|i D]} |d| qc~}ti|d|d|ttt| |t|}titgi}| D]||igq~|idp |ido_ti|idgtit|idgdddd}n}|i oPtitgi}|D]}||i|gq~|gg}n|SdS(Ns primary%dsaround%dsbeforesaftericsKx||D]}qW||}x||D]}q9W|SdS(N(sbeforessargsskwstmpsprimarysresultsafters(sargsskwstmpsresult(sprimarysafterssbefores(s4build\bdist.win32\egg\turbogears\genericfunctions.pyschain2s(sstrategysordered_signaturess safe_methodssstricts all_methodssloosesappends_[1]sselfs order_whensorders primary_namess order_arounds around_namessseparate_qualifiersscasessdictsizipsichainsrepeats method_chainsprimarysgets method_listsbeforesslistsaftersschainsaround( sselfscasess around_namesschainsloosesprimarysarounds_[1]sstricts primary_namessafterssordersbefores((sprimarysafterssbeforess4build\bdist.win32\egg\turbogears\genericfunctions.pyscombines.. 3B . P(s__name__s __module__s__doc__s__init__swhensaroundscombine(((s4build\bdist.win32\egg\turbogears\genericfunctions.pysMultiorderGenericFunctions    cs tiddSdS(s&Create an accessor for given variable.ics)ijo ip iS(N(svarsframesf_localss f_globals((svarsframe(s4build\bdist.win32\egg\turbogears\genericfunctions.pysEsN(ssyss _getframesframe(svarsframe((svarsframes4build\bdist.win32\egg\turbogears\genericfunctions.pysgetterBssgetter( ssyss itertoolssizipsrepeatschainsichainsdispatchsstrategys functionssGenericFunctionsMultiorderGenericFunctionsgetters__all__( s functionssrepeats__all__sizipsstrategyssyssgettersichainsMultiorderGenericFunction((s4build\bdist.win32\egg\turbogears\genericfunctions.pys?s ; PK6?ݰ9898turbogears/paginate.pyimport re import types from math import ceil import logging import cherrypy try: import sqlobject from sqlobject.main import SelectResults except ImportError: SelectResults = None sqlobject = None try: # Can't depend on sqlalchemy being available. import sqlalchemy from sqlalchemy.ext.selectresults import SelectResults as SASelectResults from sqlalchemy.orm.query import Query except ImportError: SASelectResults = None sqlalchemy = None Query = None import turbogears from turbogears.decorator import weak_signature_decorator from turbogears.view import variable_providers from formencode.variabledecode import variable_encode, variable_decode log = logging.getLogger("turbogears.paginate") def paginate(var_name, default_order='', default_reversed=False, limit=10, allow_limit_override=False, max_pages=5, dynamic_limit=None): ''' @param var_name: the variable name that the paginate decorator will try to control. This key must be present in the dictionnary returned from your controller in order for the paginate decorator to be able to handle it. @type var_name: string @param default_order: Needs work! XXX @type default_order: string @param default_reversed: Needs work! XXX @type default_reversed: Boolean @param limit: the hard coded limit that the paginate decorator will impose on the number of "var_name" to display at the same time. This value can be overridden by the use of the dynamic_limit keyword argument @type limit: integer @param allow_limit_override: A boolean that indicates if the parameters passed in the calling URL can modify the imposed limit. By default it is set to False. If you want to be able to control the limit by using an URL parameter then you need to set this to True. @type allow_limit_override: Boolean @param max_pages: Needs work! XXX @type max_pages: integer @param dynamic_limit: If specified, this parameter must be the name of a key present in the dictionnary returned by your decorated controller. The value found for this key will be used as the limit for our pagination and will override the other settings, the hard-coded one declared in the decorator itself AND the URL parameter one. This enables the programmer to store a limit settings inside the application preferences and then let the user manage it. @type dynamic_limit: string ''' def entangle(func): def decorated(func, *args, **kw): page = int(kw.pop('tg_paginate_no', 1)) limit_ = int(kw.pop('tg_paginate_limit', limit)) order = kw.pop('tg_paginate_order', None) ordering = kw.pop('tg_paginate_ordering', {}) # Convert ordering str to a dict. if ordering: ordering = convert_ordering(ordering) if not allow_limit_override: limit_ = limit log.debug("Pagination params: page=%s, limit=%s, order=%s " "", page, limit_, order) # get the output from the decorated function output = func(*args, **kw) if not isinstance(output, dict): return output try: var_data = output[var_name] except KeyError: raise StandardError("Didn't get expected variable") if dynamic_limit: try: dyn_limit = output[dynamic_limit] except KeyError: msg = "dynamic_limit: %s not found in output dict" % ( dynamic_limit) raise StandardError(msg) limit_ = dyn_limit if order and not default_order: msg = "If you want to enable ordering you need " msg += "to provide a default_order" raise StandardError(msg) elif default_order and not ordering: ordering = {default_order:[0, not default_reversed]} elif ordering and order: sort_ordering(ordering, order) log.debug('ordering %s' % ordering) row_count = 0 if (SelectResults and isinstance(var_data, SelectResults)) or \ (SASelectResults and isinstance(var_data, SASelectResults)) or \ (Query and isinstance(var_data, Query)): row_count = var_data.count() if ordering: # Build order_by list. order_cols = range(len(ordering)) for (colname, order_opts) in ordering.items(): col = sql_get_column(colname, var_data) if not col: msg = "The order column (%s) doesn't exist" % colname raise StandardError(msg) order_by_expr = sql_order_col(col, order_opts[1]) order_cols[order_opts[0]] = order_by_expr # May need to address potential of ordering already # existing in var_data. # SO and SA differ on this method name. if hasattr(var_data, 'orderBy'): var_data = var_data.orderBy(order_cols) else: var_data = var_data.order_by(order_cols) elif isinstance(var_data, list) or (sqlalchemy and isinstance( var_data, sqlalchemy.orm.attributes.InstrumentedList)): row_count = len(var_data) else: raise StandardError( 'Variable is not a list or SelectResults or Query (%s)' % type( var_data)) offset = (page-1) * limit_ page_count = int(ceil(float(row_count)/limit_)) # if it's possible display every page if page_count <= max_pages: pages_to_show = range(1,page_count+1) else: pages_to_show = _select_pages_to_show(page_count=page_count, current_page=page, max_pages=max_pages) # which one should we use? cherrypy.request.input_values or kw? #input_values = cherrypy.request.input_values.copy() ##input_values = kw.copy() input_values = variable_encode(cherrypy.request.params.copy()) input_values.pop('self', None) for input_key in input_values.keys(): if input_key.startswith('tg_paginate'): del input_values[input_key] cherrypy.request.paginate = Paginate(current_page=page, limit=limit_, pages=pages_to_show, page_count=page_count, input_values=input_values, order=order, ordering=ordering, row_count=row_count) # we replace the var with the sliced one endpoint = offset + limit_ log.debug("slicing data between %d and %d", offset, endpoint) output[var_name] = var_data[offset:endpoint] return output return decorated return weak_signature_decorator(entangle) def _paginate_var_provider(d): # replaced cherrypy.thread_data for cherrypy.request # thanks alberto! paginate = getattr(cherrypy.request, 'paginate', None) if paginate: d.update(dict(paginate=paginate)) variable_providers.append(_paginate_var_provider) class Paginate: """class for variable provider""" def __init__(self, current_page, pages, page_count, input_values, limit, order, ordering, row_count): self.pages = pages self.limit = limit self.page_count = page_count self.current_page = current_page self.input_values = input_values self.order = order self.ordering = ordering self.row_count = row_count self.first_item = (current_page - 1) * limit + 1 self.last_item = min(current_page * limit, row_count) self.reversed = False # Should reversed be true? for (field_name, ordering_values) in ordering.items(): if ordering_values[0] == 0 and not ordering_values[1]: self.reversed = True # If ordering is empty, don't add it. input_values = dict(tg_paginate_limit=limit) if ordering: input_values['tg_paginate_ordering'] = ordering self.input_values.update(input_values) if current_page < page_count: self.input_values.update(dict( tg_paginate_no=current_page+1, tg_paginate_limit=limit)) self.href_next = turbogears.url(cherrypy.request.path, self.input_values) self.input_values.update(dict( tg_paginate_no=page_count, tg_paginate_limit=limit)) self.href_last = turbogears.url(cherrypy.request.path, self.input_values) else: self.href_next = None self.href_last = None if current_page > 1: self.input_values.update(dict( tg_paginate_no=current_page-1, tg_paginate_limit=limit)) self.href_prev = turbogears.url(cherrypy.request.path, self.input_values) self.input_values.update(dict( tg_paginate_no=1, tg_paginate_limit=limit)) self.href_first = turbogears.url(cherrypy.request.path, self.input_values) else: self.href_prev = None self.href_first = None def get_href(self, page, order=None, reverse_order=None): # Note that reverse_order is not used. It should be cleaned up here # and in the template. I'm not removing it now because I don't want # to break the API. order = order or None self.input_values['tg_paginate_no'] = page if order: self.input_values['tg_paginate_order'] = order return turbogears.url('', self.input_values) def _select_pages_to_show(current_page, page_count, max_pages): pages_to_show = [] if max_pages < 3: msg = "The minimun value for max_pages on this algorithm is 3" raise StandardError(msg) if page_count <= max_pages: pages_to_show = range(1,page_count+1) pad = 0 if not max_pages % 2: pad = 1 start = current_page - (max_pages / 2) + pad end = current_page + (max_pages / 2) if start < 1: end = end + (start * -1) + 1 start = 1 if end > page_count: start = start - (end - page_count) end = page_count return range(start, end+1) def sort_ordering(ordering, sort_name): """Rearrange ordering based on sort_name.""" log.debug('sort called with %s and %s' % (ordering, sort_name)) if sort_name not in ordering: ordering[sort_name] = [-1, True] if ordering[sort_name][0] == 0: # Flip ordering[sort_name][1] = not ordering[sort_name][1] else: ordering[sort_name][0] = 0 for key in ordering.keys(): if key != sort_name and ordering[key][0] < len(ordering) - 1: ordering[key][0] += 1 log.debug('sort results is %s and %s' % (ordering, sort_name)) def sql_get_column(colname, var_data): """Return a column from var_data based on colname.""" if isinstance(var_data, SelectResults): col = getattr(var_data.sourceClass.q, colname, None) elif isinstance(var_data, SASelectResults) or isinstance(var_data, Query): col = getattr( var_data._query.mapper.c, colname[len(var_data._query.mapper.column_prefix or ''):], None) else: raise StandardError, 'expected SelectResults' return col def sql_order_col(col, ascending=True): """Return an ordered col for col.""" if sqlalchemy and isinstance(col, sqlalchemy.sql.ColumnElement): if ascending: order_col = sqlalchemy.sql.asc(col) else: order_col = sqlalchemy.sql.desc(col) elif sqlobject and isinstance(col, types.InstanceType): # I don't like using InstanceType, but that's what sqlobject col type # is. if ascending: order_col = col else: order_col = sqlobject.DESC(col) else: raise StandardError, 'expected Column, but got %s' % str(type(col)) return order_col # Ordering re: ordering_expr = re.compile(r"('\w+'): ?\[(\d+), ?(True|False)\]") def convert_ordering(ordering): """Covert ordering unicode string to dict.""" log.debug('ordering received %s' % str(ordering)) # eval would be simple, but insecure. if not isinstance(ordering, (str, unicode)): raise ValueError, "ordering should be string or unicode." new_ordering = {} if ordering == u"{}": pass else: try: ordering_info_find = ordering_expr.findall(ordering) emsg = "Didn't match ordering for %s." % str(ordering) assert len(ordering_info_find) > 0, emsg for ordering_info in ordering_info_find: ordering_key = str(ordering_info[0]).strip("'") ordering_order = int(ordering_info[1]) ordering_reverse = bool(ordering_info[2] == 'True') new_ordering[ordering_key] = [ordering_order, ordering_reverse] except StandardError, e: log.debug('FAILED to convert ordering.') new_ordering = {} log.debug('ordering converted to %s' % str(new_ordering)) return new_ordering PKh6v55turbogears/paginate.pyc; Fc@sdkZdkZdklZdkZdkZydkZdklZWne j oe Ze ZnXy'dk Z dk lZ dklZWn%e j oe Z e Z e ZnXdkZdklZdklZdklZlZeidZded ed e d Zd Zeied fdYZdZdZ dZ!e"dZ#ei$dZ%dZ&dS(N(sceil(s SelectResults(sQuery(sweak_signature_decorator(svariable_providers(svariable_encodesvariable_decodesturbogears.paginatesi ic s,d}t|SdS(s. @param var_name: the variable name that the paginate decorator will try to control. This key must be present in the dictionnary returned from your controller in order for the paginate decorator to be able to handle it. @type var_name: string @param default_order: Needs work! XXX @type default_order: string @param default_reversed: Needs work! XXX @type default_reversed: Boolean @param limit: the hard coded limit that the paginate decorator will impose on the number of "var_name" to display at the same time. This value can be overridden by the use of the dynamic_limit keyword argument @type limit: integer @param allow_limit_override: A boolean that indicates if the parameters passed in the calling URL can modify the imposed limit. By default it is set to False. If you want to be able to control the limit by using an URL parameter then you need to set this to True. @type allow_limit_override: Boolean @param max_pages: Needs work! XXX @type max_pages: integer @param dynamic_limit: If specified, this parameter must be the name of a key present in the dictionnary returned by your decorated controller. The value found for this key will be used as the limit for our pagination and will override the other settings, the hard-coded one declared in the decorator itself AND the URL parameter one. This enables the programmer to store a limit settings inside the application preferences and then let the user manage it. @type dynamic_limit: string cs&d}|SdS(Ncset|idd}t|id}|idt}|idh}|ot |}n o }nt i d||||||}t|t o|Sny|} Wntj otdnXoDy|}Wn)tj od} t| nX|}n|o o d } | d 7} t| nIo| ohd g<}n |o|ot||nt i d |d } to t| tp+to t| tpto t| to| i } |ot!t"|}xl|i$D]^\}} t'|| }| od |} t| nt)|| d}||| d i?} | idtx/| iAD]!}|iCdo | |=qqWtDd|d|d|d|d| d|d|d| t<i=_E||}t i d||| ||!|<|SdS(Nstg_paginate_noistg_paginate_limitstg_paginate_orderstg_paginate_orderings/Pagination params: page=%s, limit=%s, order=%s sDidn't get expected variables*dynamic_limit: %s not found in output dicts(If you want to enable ordering you need sto provide a default_orderis ordering %ss#The order column (%s) doesn't existsorderBys5Variable is not a list or SelectResults or Query (%s)s page_counts current_pages max_pagessselfs tg_paginateslimitspagess input_valuessordersorderings row_countsslicing data between %d and %d(Gsintskwspopspageslimitslimit_sNonesordersorderingsconvert_orderingsallow_limit_overrideslogsdebugsfuncsargssoutputs isinstancesdictsvar_namesvar_datasKeyErrors StandardErrors dynamic_limits dyn_limitsmsgs default_ordersdefault_reverseds sort_orderings row_counts SelectResultssSASelectResultssQueryscountsrangeslens order_colssitemsscolnames order_optsssql_get_columnscols sql_order_cols order_by_exprshasattrsorderBysorder_byslists sqlalchemysorms attributessInstrumentedListstypesoffsetsceilsfloats page_counts max_pagess pages_to_shows_select_pages_to_showsvariable_encodescherrypysrequestsparamsscopys input_valuesskeyss input_keys startswithsPaginatespaginatesendpoint(sfuncsargsskws page_countsoffsets pages_to_shows input_keys dyn_limitsorderings row_countsvar_datasmsgs order_optss input_valuesslimit_scolnamescolsendpoints order_by_exprspages order_colssoutputsorder(sdefault_reverseds max_pagess default_ordersvar_nameslimits dynamic_limitsallow_limit_override(s,build\bdist.win32\egg\turbogears\paginate.pys decoratedGs      E   0      (s decorated(sfuncs decorated(sdefault_reverseds max_pagess default_ordersvar_names dynamic_limitsallow_limit_overrideslimit(s,build\bdist.win32\egg\turbogears\paginate.pysentangleFsrN(sentanglesweak_signature_decorator(svar_names default_ordersdefault_reversedslimitsallow_limit_overrides max_pagess dynamic_limitsentangle((svar_names default_ordersdefault_reversedslimitsallow_limit_overrides max_pagess dynamic_limits,build\bdist.win32\egg\turbogears\paginate.pyspaginates&tcCs:ttidt}|o|itd|ndS(Nspaginate(sgetattrscherrypysrequestsNonespaginatesdsupdatesdict(sdspaginate((s,build\bdist.win32\egg\turbogears\paginate.pys_paginate_var_providerssPaginatecBs&tZdZdZeedZRS(sclass for variable providerc Cs=||_||_||_||_||_||_||_||_|d|d|_ t ||||_ t |_ xD|iD]6\} } | ddjo | d o t|_ qqWtd|}|o||dturbogears/release.pyc; FFc@s"dZdZdZdZdZdS(s1.0.3s Kevin Dangoorsdangoor+turbogears@gmail.coms3Copyright 2005, 2006 Kevin Dangoor and contributorssMITN(sversionsauthorsemails copyrightslicense(slicensesversionsemails copyrightsauthor((s+build\bdist.win32\egg\turbogears\release.pys?sPK P6BFBFturbogears/scheduler.py"""Module that provides a cron-like task scheduler. This task scheduler is designed to be used from inside your own program. You can schedule Python functions to be called at specific intervals or days. It uses the standard 'sched' module for the actual task scheduling, but provides much more: - repeated tasks (at intervals, or on specific days) - error handling (exceptions in tasks don't kill the scheduler) - optional to run scheduler in its own thread or separate process - optional to run a task in its own thread or separate process If the threading module is available, you can use the various Threaded variants of the scheduler and associated tasks. If threading is not available, you could still use the forked variants. If fork is also not available, all processing is done in a single process, sequentially. There are three Scheduler classes: Scheduler ThreadedScheduler ForkedScheduler You usually add new tasks to a scheduler using the add_interval_task or add_daytime_task methods, with the appropriate processmethod argument to select sequential, threaded or forked processing. NOTE: it is impossible to add new tasks to a ForkedScheduler, after the scheduler has been started! For more control you could use one of the following Task classes and use schedule_task or schedule_task_abs: IntervalTask ThreadedIntervalTask ForkedIntervalTask WeekdayTask ThreadedWeekdayTask ForkedWeekdayTask MonthdayTask ThreadedMonthdayTask ForkedMonthdayTask Kronos is the Greek God of Time. This module is based on Kronos by Irmen de Jong, but has been modified to better fit within TurboGears. Additionally, this module appeared to no longer be supported/in development. """ # # $Id: kronos.py,v 1.5 2004/10/06 22:43:49 irmen Exp $ # # (c) Irmen de Jong. # This is open-source software, released under the MIT Software License: # http://www.opensource.org/licenses/mit-license.php # import os, sys import sched, time import traceback import weakref from turbogears.util import Enum method = Enum("sequential", "forked", "threaded") class Scheduler: """The Scheduler itself.""" def __init__(self): self.running=True self.sched = sched.scheduler(time.time, self.__delayfunc) def __delayfunc(self, delay): # This delay function is basically a time.sleep() that is # divided up, so that we can check the self.running flag while delaying. # there is an additional check in here to ensure that the top item of # the queue hasn't changed if delay<10: time.sleep(delay) else: toptime = self.sched.queue[0][0] endtime = time.time() + delay period=5 stoptime = endtime - period while self.running and stoptime > time.time() and \ self.sched.queue[0][0] == toptime: time.sleep(period) if not self.running or self.sched.queue[0][0] != toptime: return now = time.time() if endtime > now: time.sleep(endtime - now) def _acquire_lock(self): pass def _release_lock(self): pass def add_interval_task(self, action, taskname, initialdelay, interval, processmethod, args, kw): """Add a new Interval Task to the schedule. A very short initialdelay or one of zero cannot be honored, you will see a slight delay before the task is first executed. This is because the scheduler needs to pick it up in its loop.""" if initialdelay<0 or interval<1: raise ValueError("delay or interval must be >0") # Select the correct IntervalTask class. Not all types may be available! if processmethod==method.sequential: TaskClass=IntervalTask elif processmethod==method.threaded: TaskClass = ThreadedIntervalTask elif processmethod==method.forked: TaskClass = ForkedIntervalTask else: raise ValueError("invalid processmethod") if not args: args=[] if not kw: kw={} task = TaskClass(taskname, interval, action, args, kw) self.schedule_task(task, initialdelay) return task def add_daytime_task(self, action, taskname, weekdays, monthdays, timeonday, processmethod, args, kw): """Add a new Day Task (Weekday or Monthday) to the schedule.""" if weekdays and monthdays: raise ValueError("you can only specify weekdays or monthdays, not both") if not args: args=[] if not kw: kw={} if weekdays: # Select the correct WeekdayTask class. Not all types may be available! if processmethod==method.sequential: TaskClass=WeekdayTask elif processmethod==method.threaded: TaskClass = ThreadedWeekdayTask elif processmethod==method.forked: TaskClass = ForkedWeekdayTask else: raise ValueError("invalid processmethod") task=TaskClass(taskname, weekdays, timeonday, action, args, kw) if monthdays: # Select the correct MonthdayTask class. Not all types may be available! if processmethod==method.sequential: TaskClass=MonthdayTask elif processmethod==method.threaded: TaskClass = ThreadedMonthdayTask elif processmethod==method.forked: TaskClass = ForkedMonthdayTask else: raise ValueError("invalid processmethod") task=TaskClass(taskname, monthdays, timeonday, action, args, kw) firsttime=task.get_schedule_time(True) self.schedule_task_abs(task, firsttime) return task def schedule_task(self, task, delay): """Low-level method to add a new task to the scheduler with the given delay (seconds).""" if self.running: self._acquire_lock() # lock the sched queue, if needed try: task.event = self.sched.enter(delay, 0, task, (weakref.ref(self),) ) finally: self._release_lock() else: task.event = self.sched.enter(delay, 0, task, (weakref.ref(self),) ) def schedule_task_abs(self, task, abstime): """Low-level method to add a new task to the scheduler for the given absolute time value.""" if self.running: self._acquire_lock() # lock the sched queue, if needed try: task.event = self.sched.enterabs(abstime, 0, task, (weakref.ref(self),) ) finally: self._release_lock() else: task.event = self.sched.enterabs(abstime, 0, task, (weakref.ref(self),) ) def start(self): """Start the scheduler.""" self._run() def stop(self): """Remove all pending tasks and stop the Scheduler.""" self.running=False self.sched.queue[:]=[] def cancel(self, task): self.sched.cancel(task.event) def _run(self): # Low-level run method to do the actual scheduling loop. while self.running: try: self.sched.run() except Exception,x: print >>sys.stderr, "ERROR DURING SCHEDULER EXECUTION",x print >>sys.stderr, "".join(traceback.format_exception(*sys.exc_info())) print >>sys.stderr, "-"*20 # queue is empty; sleep a short while before checking again if self.running: time.sleep(5) class Task: """Abstract base class of all scheduler tasks""" def __init__(self, name, action, args, kw): """This is an abstract class!""" self.name=name self.action=action self.args=args self.kw=kw def __call__(self, schedulerref): """Execute the task action in the scheduler's thread.""" try: self.execute() except Exception,x: self.handle_exception(x) self.reschedule(schedulerref()) def reschedule(self, scheduler): """This is an abstract class, this method is defined in one of the sub classes!""" raise NotImplementedError("you're using the abstract base class 'Task', use a concrete class instead") def execute(self): """Execute the actual task.""" self.action(*self.args, **self.kw) def handle_exception(self, exc): """Handle any exception that occured during task execution.""" print >>sys.stderr, "ERROR DURING TASK EXECUTION",exc print >>sys.stderr,"".join(traceback.format_exception(*sys.exc_info())) print >>sys.stderr,"-"*20 class IntervalTask(Task): """A repeated task that occurs at certain intervals (in seconds).""" def __init__(self, name, interval, action, args=None, kw=None): Task.__init__(self, name, action, args, kw) self.interval=interval def reschedule(self, scheduler): # reschedule this task according to its interval (in seconds). scheduler.schedule_task(self, self.interval) class DayTaskRescheduler: """A mixin class that contains the reschedule logic for the DayTasks.""" def __init__(self, timeonday): self.timeonday=timeonday def get_schedule_time(self, today): """Calculate the time value at which this task is to be scheduled.""" now=list(time.localtime()) if today: # schedule for today. let's see if that is still possible if (now[3], now[4]) >= self.timeonday: now[2]+=1 # too bad, it will be tomorrow else: now[2]+=1 # tomorrow now[3], now[4] = self.timeonday # set new time on day (hour,minute) now[5]=0 # seconds return time.mktime(now) def reschedule(self, scheduler): # Reschedule this task according to the daytime for the task. # The task is scheduled for tomorrow, for the given daytime. # (The execute method in the concrete Task classes will check # if the current day is a day on which the task must run). abstime = self.get_schedule_time(False) scheduler.schedule_task_abs(self, abstime) class WeekdayTask(DayTaskRescheduler, Task): """A task that is called at specific days in a week (1-7), at a fixed time on the day.""" def __init__(self, name, weekdays, timeonday, action, args=None, kw=None): if type(timeonday) not in (list,tuple) or len(timeonday) != 2: raise TypeError("timeonday must be a 2-tuple (hour,minute)") if type(weekdays) not in (list,tuple): raise TypeError("weekdays must be a sequence of weekday numbers 1-7 (1 is Monday)") DayTaskRescheduler.__init__(self, timeonday) Task.__init__(self, name, action, args, kw) self.days=weekdays def execute(self): # This is called every day, at the correct time. We only need to # check if we should run this task today (this day of the week). weekday=time.localtime().tm_wday+1 if weekday in self.days: self.action(*self.args, **self.kw) class MonthdayTask(DayTaskRescheduler, Task): """A task that is called at specific days in a month (1-31), at a fixed time on the day.""" def __init__(self, name, monthdays, timeonday, action, args=None, kw=None): if type(timeonday) not in (list,tuple) or len(timeonday) != 2: raise TypeError("timeonday must be a 2-tuple (hour,minute)") if type(monthdays) not in (list,tuple): raise TypeError("monthdays must be a sequence of monthdays numbers 1-31") DayTaskRescheduler.__init__(self, timeonday) Task.__init__(self, name, action, args, kw) self.days=monthdays def execute(self): # This is called every day, at the correct time. We only need to # check if we should run this task today (this day of the month). if time.localtime().tm_mday in self.days: self.action(*self.args, **self.kw) try: import threading class ThreadedScheduler(Scheduler): """A Scheduler that runs in its own thread.""" def __init__(self): Scheduler.__init__(self) self._lock=threading.Lock() # we require a lock around the task queue def start(self): # Start method that splices of a thread in which the scheduler will run. self.thread=threading.Thread(target=self._run) self.thread.setDaemon(True) self.thread.start() def stop(self): # Stop method that stops the scheduler and waits for the thread to finish. Scheduler.stop(self) try: self.thread.join() except AttributeError: pass def _acquire_lock(self): self._lock.acquire() # lock the thread's task queue def _release_lock(self): self._lock.release() # release the thread's task queue class ThreadedTaskMixin: """A mixin class to make a Task execute in a separate thread.""" def __call__(self, schedulerref): # execute the task action in its own thread. threading.Thread(target=self.threadedcall).start() self.reschedule(schedulerref()) def threadedcall(self): # This method is run within its own thread, so we have to # do the execute() call and exception handling here. try: self.execute() except Exception,x: self.handle_exception(x) class ThreadedIntervalTask(ThreadedTaskMixin, IntervalTask): """Interval Task that executes in its own thread.""" pass class ThreadedWeekdayTask(ThreadedTaskMixin, WeekdayTask): """Weekday Task that executes in its own thread.""" pass class ThreadedMonthdayTask(ThreadedTaskMixin, MonthdayTask): """Monthday Task that executes in its own thread.""" pass except ImportError: # threading is not available pass if hasattr(os,"fork"): import signal class ForkedScheduler(Scheduler): """A Scheduler that runs in its own forked process.""" def __del__(self): if hasattr(self, "childpid"): os.kill(self.childpid, signal.SIGKILL) def start(self): # Start method that forks of a new process in which the scheduler will run. pid = os.fork() if pid==0: # we are the child signal.signal(signal.SIGUSR1, self.signalhandler) self._run() os._exit(0) else: # we are the parent self.childpid=pid del self.sched # can no longer insert in the scheduler queue def stop(self): # Stop method that stops the scheduler and waits for the process to finish. os.kill(self.childpid, signal.SIGUSR1) os.waitpid(self.childpid,0) def signalhandler(self, sig, stack): Scheduler.stop(self) class ForkedTaskMixin: """A mixin class to make a Task execute in a separate process.""" def __call__(self, schedulerref): # execute the task action in its own process. pid=os.fork() if pid==0: # we are the child try: self.execute() except Exception,x: self.handle_exception(x) os._exit(0) else: # we are the parent self.reschedule(schedulerref()) class ForkedIntervalTask(ForkedTaskMixin, IntervalTask): """Interval Task that executes in its own process.""" pass class ForkedWeekdayTask(ForkedTaskMixin, WeekdayTask): """Weekday Task that executes in its own process.""" pass class ForkedMonthdayTask(ForkedTaskMixin, MonthdayTask): """Monthday Task that executes in its own process.""" pass _scheduler_instance = None def _get_scheduler(): global _scheduler_instance si = _scheduler_instance if not si: si = ThreadedScheduler() _scheduler_instance = si return si def _start_scheduler(): si = _get_scheduler() si.start() def _stop_scheduler(): if not _scheduler_instance: return si = _get_scheduler() si.stop() def add_interval_task(action, interval, args=None, kw=None, initialdelay=0, processmethod=method.threaded, taskname=None): si = _get_scheduler() return si.add_interval_task(action=action, interval=interval, args=args, kw=kw, initialdelay=initialdelay, processmethod=processmethod, taskname=taskname) def add_weekday_task(action, weekdays, timeonday, args=None, kw=None, processmethod=method.threaded, taskname=None): si = _get_scheduler() return si.add_daytime_task(action=action, taskname=taskname, weekdays=weekdays, monthdays=None, timeonday=timeonday, processmethod=processmethod, args=args, kw=kw) def add_monthday_task(action, monthdays, timeonday, args=None, kw=None, processmethod=method.threaded, taskname=None): si = _get_scheduler() return si.add_daytime_task(action=action, taskname=taskname, weekdays=None, monthdays=monthdays, timeonday=timeonday, processmethod=processmethod, args=args, kw=kw) def cancel(task): si = _get_scheduler() si.cancel(task) PKh6hkccturbogears/scheduler.pyc; LEc@s}dZdkZdkZdkZdkZdkZdkZdklZedddZ dfdYZ dfd YZ d e fd YZ d fd YZ de e fdYZde e fdYZydkZde fdYZdfdYZdee fdYZdeefdYZdeefdYZWnej onXeedodkZde fdYZdfd YZd!ee fd"YZd#eefd$YZd%eefd&YZnead'Z d(Z!d)Z"eed*e i#ed+Z$eee i#ed,Z%eee i#ed-Z&d.Z'dS(/sModule that provides a cron-like task scheduler. This task scheduler is designed to be used from inside your own program. You can schedule Python functions to be called at specific intervals or days. It uses the standard 'sched' module for the actual task scheduling, but provides much more: - repeated tasks (at intervals, or on specific days) - error handling (exceptions in tasks don't kill the scheduler) - optional to run scheduler in its own thread or separate process - optional to run a task in its own thread or separate process If the threading module is available, you can use the various Threaded variants of the scheduler and associated tasks. If threading is not available, you could still use the forked variants. If fork is also not available, all processing is done in a single process, sequentially. There are three Scheduler classes: Scheduler ThreadedScheduler ForkedScheduler You usually add new tasks to a scheduler using the add_interval_task or add_daytime_task methods, with the appropriate processmethod argument to select sequential, threaded or forked processing. NOTE: it is impossible to add new tasks to a ForkedScheduler, after the scheduler has been started! For more control you could use one of the following Task classes and use schedule_task or schedule_task_abs: IntervalTask ThreadedIntervalTask ForkedIntervalTask WeekdayTask ThreadedWeekdayTask ForkedWeekdayTask MonthdayTask ThreadedMonthdayTask ForkedMonthdayTask Kronos is the Greek God of Time. This module is based on Kronos by Irmen de Jong, but has been modified to better fit within TurboGears. Additionally, this module appeared to no longer be supported/in development. N(sEnums sequentialsforkedsthreadeds SchedulercBsztZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d ZRS( sThe Scheduler itself.cCs(t|_titi|i|_dS(N(sTruesselfsrunningsscheds schedulerstimes_Scheduler__delayfunc(sself((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__9s cCs|djoti|n|iidd}ti|}d}||}xJ|i o+|tijo|iidd|joti|qUW|i p|iidd|jodSnti}||joti||ndS(Ni ii( sdelaystimessleepsselfsschedsqueuestoptimesendtimesperiodsstoptimesrunningsnow(sselfsdelaystoptimesnowsperiodsstoptimesendtime((s-build\bdist.win32\egg\turbogears\scheduler.pys __delayfunc=s  8&  cCsdS(N((sself((s-build\bdist.win32\egg\turbogears\scheduler.pys _acquire_lockRscCsdS(N((sself((s-build\bdist.win32\egg\turbogears\scheduler.pys _release_lockSsc Cs|djp |djotdn|tijo t}nA|tijo t }n'|ti jo t }n td| o g}n| o h}n||||||} |i| || SdS(sAdd a new Interval Task to the schedule. A very short initialdelay or one of zero cannot be honored, you will see a slight delay before the task is first executed. This is because the scheduler needs to pick it up in its loop.iisdelay or interval must be >0sinvalid processmethodN(s initialdelaysintervals ValueErrors processmethodsmethods sequentials IntervalTasks TaskClasssthreadedsThreadedIntervalTasksforkedsForkedIntervalTasksargsskwstasknamesactionstasksselfs schedule_task( sselfsactionstasknames initialdelaysintervals processmethodsargsskws TaskClassstask((s-build\bdist.win32\egg\turbogears\scheduler.pysadd_interval_taskUs"      c Csi|o|otdn| o g}n| o h}n|oy|tijo t} nA|ti jo t } n'|ti jo t } n td| ||||||} n|oy|tijo t} nA|ti jo t} n'|ti jo t} n td| ||||||} n| it} |i| | | SdS(s9Add a new Day Task (Weekday or Monthday) to the schedule.s4you can only specify weekdays or monthdays, not bothsinvalid processmethodN(sweekdayss monthdayss ValueErrorsargsskws processmethodsmethods sequentials WeekdayTasks TaskClasssthreadedsThreadedWeekdayTasksforkedsForkedWeekdayTaskstasknames timeondaysactionstasks MonthdayTasksThreadedMonthdayTasksForkedMonthdayTasksget_schedule_timesTrues firsttimesselfsschedule_task_abs( sselfsactionstasknamesweekdayss monthdayss timeondays processmethodsargsskwstasks TaskClasss firsttime((s-build\bdist.win32\egg\turbogears\scheduler.pysadd_daytime_taskls8          cCs|ioJ|iz.|ii|d|ti|f|_ Wd|i Xn+|ii|d|ti|f|_ dS(sSLow-level method to add a new task to the scheduler with the given delay (seconds).iN( sselfsrunnings _acquire_locksschedsentersdelaystasksweakrefsrefsevents _release_lock(sselfstasksdelay((s-build\bdist.win32\egg\turbogears\scheduler.pys schedule_tasks  cCs|ioJ|iz.|ii|d|ti|f|_ Wd|i Xn+|ii|d|ti|f|_ dS(sVLow-level method to add a new task to the scheduler for the given absolute time value.iN( sselfsrunnings _acquire_locksschedsenterabssabstimestasksweakrefsrefsevents _release_lock(sselfstasksabstime((s-build\bdist.win32\egg\turbogears\scheduler.pysschedule_task_abss  cCs|idS(sStart the scheduler.N(sselfs_run(sself((s-build\bdist.win32\egg\turbogears\scheduler.pysstartscCst|_g|ii(dS(s0Remove all pending tasks and stop the Scheduler.N(sFalsesselfsrunningsschedsqueue(sself((s-build\bdist.win32\egg\turbogears\scheduler.pysstops cCs|ii|idS(N(sselfsschedscancelstasksevent(sselfstask((s-build\bdist.win32\egg\turbogears\scheduler.pyscancelscCsx|ioy|iiWn^tj oR}tidI|IJtidit i ti IJtiddIJnX|iot i dqqWdS(Ns ERROR DURING SCHEDULER EXECUTIONss-ii(sselfsrunningsschedsruns Exceptionsxssyssstderrsjoins tracebacksformat_exceptionsexc_infostimessleep(sselfsx((s-build\bdist.win32\egg\turbogears\scheduler.pys_runs % (s__name__s __module__s__doc__s__init__s_Scheduler__delayfuncs _acquire_locks _release_locksadd_interval_tasksadd_daytime_tasks schedule_tasksschedule_task_abssstartsstopscancels_run(((s-build\bdist.win32\egg\turbogears\scheduler.pys Scheduler6s       "    sTaskcBs;tZdZdZdZdZdZdZRS(s*Abstract base class of all scheduler taskscCs(||_||_||_||_dS(sThis is an abstract class!N(snamesselfsactionsargsskw(sselfsnamesactionsargsskw((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__s    cCsGy|iWn"tj o}|i|nX|i|dS(s2Execute the task action in the scheduler's thread.N(sselfsexecutes Exceptionsxshandle_exceptions reschedules schedulerref(sselfs schedulerrefsx((s-build\bdist.win32\egg\turbogears\scheduler.pys__call__s cCstddS(sLThis is an abstract class, this method is defined in one of the sub classes!sIyou're using the abstract base class 'Task', use a concrete class insteadN(sNotImplementedError(sselfs scheduler((s-build\bdist.win32\egg\turbogears\scheduler.pys reschedulescCs|i|i|idS(sExecute the actual task.N(sselfsactionsargsskw(sself((s-build\bdist.win32\egg\turbogears\scheduler.pysexecutescCsMtidI|IJtidititiIJtiddIJdS(s8Handle any exception that occured during task execution.sERROR DURING TASK EXECUTIONss-iN(ssyssstderrsexcsjoins tracebacksformat_exceptionsexc_info(sselfsexc((s-build\bdist.win32\egg\turbogears\scheduler.pyshandle_exceptions%(s__name__s __module__s__doc__s__init__s__call__s reschedulesexecuteshandle_exception(((s-build\bdist.win32\egg\turbogears\scheduler.pysTasks     s IntervalTaskcBs&tZdZeedZdZRS(s>A repeated task that occurs at certain intervals (in seconds).cCs&ti|||||||_dS(N(sTasks__init__sselfsnamesactionsargsskwsinterval(sselfsnamesintervalsactionsargsskw((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__scCs|i||idS(N(s schedulers schedule_tasksselfsinterval(sselfs scheduler((s-build\bdist.win32\egg\turbogears\scheduler.pys reschedules(s__name__s __module__s__doc__sNones__init__s reschedule(((s-build\bdist.win32\egg\turbogears\scheduler.pys IntervalTasks sDayTaskReschedulercBs)tZdZdZdZdZRS(sBA mixin class that contains the reschedule logic for the DayTasks.cCs ||_dS(N(s timeondaysself(sselfs timeonday((s-build\bdist.win32\egg\turbogears\scheduler.pys__init__scCstti}|o6|d|df|ijo|dcd7": continue orig_filename = filename if filename.endswith(".pyc"): filename = filename[:-1] try: mtime = os.stat(filename).st_mtime except OSError, e: if orig_filename.endswith('.pyc') and e[0] == errno.ENOENT: # This prevents us from endlessly restarting # if there is an old .pyc lying around # after a .py file has been deleted try: os.unlink(orig_filename) except: pass sys.exit(3) # force reload if filename not in mtimes: mtimes[filename] = mtime continue if mtime > mtimes[filename]: sys.exit(3) # force reload time.sleep(freq) cherrypy.lib.autoreload.reloader_thread = reloader_thread webpath = "" DNS_SD_PID = None def start_bonjour(package=None): global DNS_SD_PID if DNS_SD_PID: return if (not hasattr(cherrypy, "root")) or (not cherrypy.root): return if not package: package = cherrypy.root.__module__ package = package[:package.find(".")] host = config.get('server.socket_host', '') port = str(config.get('server.socket_port')) env = config.get('server.environment') name = package + ": " + env type = "_http._tcp" cmds = [['/usr/bin/avahi-publish-service', ["-H", host, name, type, port]], ['/usr/bin/dns-sd', ['-R', name, type, "."+host, port, "path=/"]]] for cmd, args in cmds: # TODO:. This check is flawed. If one has both services installed and # avahi isn't the one running, then this won't work. We should either # try registering with both or checking what service is running and use # that. Program availability on the filesystem was never enough... if os.path.exists(cmd): DNS_SD_PID = os.spawnv(os.P_NOWAIT, cmd, [cmd]+args) atexit.register(stop_bonjour) break def stop_bonjour(): if not DNS_SD_PID: return try: os.kill(DNS_SD_PID, signal.SIGTERM) except OSError: pass class VirtualPathFilter(object): """Filter that makes CherryPy ignorant of a URL root path. That is, you can mount your app so the URI "/users/~rdel/myapp/" maps to the root object "/". """ def on_start_resource(self): prefix = config.get('server.webpath', False) if prefix: path = cherrypy.request.object_path if path == prefix: cherrypy.request.object_path = '/' elif path.startswith(prefix): cherrypy.request.object_path = path[len(prefix):] else: raise cherrypy.NotFound(path) class NestedVariablesFilter(object): def before_main(self): if hasattr(cherrypy.request, "params"): cherrypy.request.params = \ NestedVariables.to_python(cherrypy.request.params or {}) def startTurboGears(): """Handles TurboGears tasks when the CherryPy server starts. This adds the "tg_js" configuration to make MochiKit accessible. It also turns on stdlib logging when in development mode. """ config.update({"/tg_static": { "static_filter.on": True, "static_filter.dir": os.path.abspath(pkg_resources.resource_filename(__name__, "static")), 'log_debug_info_filter.on' : False, } }) config.update({"/tg_js" : { "static_filter.on" : True, "static_filter.dir" : os.path.abspath(pkg_resources.resource_filename(__name__, "static/js")), 'log_debug_info_filter.on' : False, } }) cherrypy.config.environments['development']['log_debug_info_filter.on'] = False if config.get("decoding_filter.on", path="/") is None: config.update({"/": { "decoding_filter.on" : True, "decoding_filter.encoding" : config.get( "kid.encoding", "utf8") }}) view.load_engines() view.loadBaseTemplates() global webpath webpath = config.get("server.webpath", "") if hasattr(cherrypy, "root") and cherrypy.root: if not hasattr(cherrypy.root, "_cp_filters"): cherrypy.root._cp_filters= [] morefilters = [EndTransactionsFilter(), NestedVariablesFilter()] if webpath: morefilters.insert(0, VirtualPathFilter()) cherrypy.root._cp_filters.extend(morefilters) if webpath.startswith("/"): webpath = webpath[1:] if webpath and not webpath.endswith("/"): webpath = webpath + "/" isdev = config.get('server.environment') == 'development' if not config.get("tg.new_style_logging"): if config.get('server.log_to_screen'): setuplog = logging.getLogger() setuplog.setLevel(logging.DEBUG) fmt = logging.Formatter("%(asctime)s %(name)s " "%(levelname)s %(message)s") handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.DEBUG) handler.setFormatter(fmt) setuplog.addHandler(handler) logfile = config.get("server.log_file") if logfile: setuplog = logging.getLogger("turbogears.access") setuplog.propagate = 0 fmt = logging.Formatter("%(message)s") handler = logging.FileHandler(logfile) handler.setLevel(logging.INFO) handler.setFormatter(fmt) setuplog.addHandler(handler) bonjoursetting = config.get("tg.bonjour", None) if bonjoursetting or isdev: start_bonjour(bonjoursetting) if config.get("sqlalchemy.dburi"): database.bind_meta_data() # Start all TurboGears extensions extensions = pkg_resources.iter_entry_points("turbogears.extensions") for entrypoint in extensions: ext = entrypoint.load() if hasattr(ext, "start_extension"): ext.start_extension() for item in call_on_startup: item() if config.get("tg.scheduler", False): scheduler._start_scheduler() log.info("Scheduler started") def stopTurboGears(): # end all transactions and clear out the hubs to # help ensure proper reloading in autoreload situations for hub in hub_registry: hub.end() hub_registry.clear() stop_bonjour() # Shut down all TurboGears extensions extensions= pkg_resources.iter_entry_points( "turbogears.extensions" ) for entrypoint in extensions: ext= entrypoint.load() if hasattr(ext, "shutdown_extension"): ext.shutdown_extension() for item in call_on_shutdown: item() if config.get("tg.scheduler", False): scheduler._stop_scheduler() log.info("Scheduler stopped") old_object_trail = _cputil.get_object_trail # hang on to object trail to use it to find an app root if need be def get_object_trail(object_path=None): trail = old_object_trail(object_path) try: cherrypy.request.object_trail = trail except AttributeError: pass return trail _cputil.get_object_trail = get_object_trail class SimpleWSGIServer(CherryPyWSGIServer): """A WSGI server that accepts a WSGI application as a parameter.""" RequestHandlerClass = CPHTTPRequest def __init__(self): conf = cherrypy.config.get wsgi_app = wsgiApp if conf('server.environment') == 'development': try: from paste.evalexception.middleware import EvalException except ImportError: pass else: wsgi_app = EvalException(wsgi_app, global_conf={}) cherrypy.config.update({'server.throw_errors':True}) bind_addr = (conf("server.socket_host"), conf("server.socket_port")) CherryPyWSGIServer.__init__(self, bind_addr, wsgi_app, conf("server.thread_pool"), conf("server.socket_host"), request_queue_size = conf( "server.socket_queue_size"), ) def start_server(root): cherrypy.root = root if config.get("tg.fancy_exception", False): cherrypy.server.start(server=SimpleWSGIServer()) else: cherrypy.server.start() if startTurboGears not in cherrypy.server.on_start_server_list: cherrypy.server.on_start_server_list.append(startTurboGears) if stopTurboGears not in cherrypy.server.on_stop_server_list: cherrypy.server.on_stop_server_list.append(stopTurboGears) call_on_startup = [] call_on_shutdown = [] PKh6v`44turbogears/startup.pyc; 8Fc@sdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk l Z dk l Z dk lZlZdklZdklZlZlZdklZdklZlZeid Zeid d Zee ii_d a e!a"e!d Z#dZ$de%fdYZ&de%fdYZ'dZ(dZ)e i*Z+e!dZ*e*e _*defdYZ,dZ-e(e i.i/joe i.i/i0e(ne)e i.i1joe i.i1i0e)ngZ2gZ3dS(s)Things to do when TurboGears is imported.N(s_cputil(sNestedVariables(swsgiApps CPHTTPRequest(sCherryPyWSGIServer(sconfigs schedulersdatabase(sview(s hub_registrysEndTransactionsFiltersturbogears.startups TurboGearsc sd} h}tidttjo dGHdSnxtiii ooPt dt i i }gi}|D]}|t i |q~}nt| t i i}x,t dtd|D] }|idp |d joqn|}|id o|d }nyti|i}Wnetj oY} |id o| d tijoyti |WqqXnt i!d nX||jo|||WdS(sMonkeypatch for the reloader provided by CherryPy. This reloader is designed to reload a single package. This is more efficient and, more important, compatible with zipped libraries that may not provide access to the individual files.cCs=t|do%t|ido|iiSq5n|SdS(Ns __loader__sarchive(shasattrsmodules __loader__sarchive(smodule((s+build\bdist.win32\egg\turbogears\startup.pysarchive_selector"ssautoreload.packagesTurboGears requires autoreload.package to be set. It can be an empty value, which will use CherryPy's default behavior which is to check every module. Setting an actual package makes the check much faster.Ncs |iS(N(smodnames startswithspackage(smodname(spackage(s+build\bdist.win32\egg\turbogears\startup.pys2scCs|S(N(sv(sv((s+build\bdist.win32\egg\turbogears\startup.pys7scCst|dtS(Ns__file__(sgetattrsmsNone(sm((s+build\bdist.win32\egg\turbogears\startup.pys8ss.kidss.pyciii(%sarchive_selectorsmtimessconfigsgetsNonespackagescherrypyslibs autoreloads RUN_RELOADERsfilterssyssmodulesskeyssmodnamessappends_[1]smodnamesmodlistsmapsvaluessfilenamesendswiths orig_filenamesossstatsst_mtimesmtimesOSErrorseserrnosENOENTsunlinksexitstimessleepsfreq( sfreqsmodnamessmtimes_[1]sfilenames orig_filenamesmtimessmodnamesmodlistsesarchive_selectorspackage((spackages+build\bdist.win32\egg\turbogears\startup.pysreloader_threadsJ   2 $  sc CsDtodSnttd pti odSn| o#tii}||id }ntidd}t tid}tid}|d|}d}d d ||||ggd d ||d||d ggg}xX|D]P\}}tii|o1titi||g|atitPqqWdS(Nsroots.sserver.socket_hostssserver.socket_portsserver.environments: s _http._tcps/usr/bin/avahi-publish-services-Hs/usr/bin/dns-sds-Rspath=/(s DNS_SD_PIDshasattrscherrypysrootspackages __module__sfindsconfigsgetshostsstrsportsenvsnamestypescmdsscmdsargssosspathsexistssspawnvsP_NOWAITsatexitsregisters stop_bonjour( spackagesargssenvstypescmdsportshostscmdssname((s+build\bdist.win32\egg\turbogears\startup.pys start_bonjourVs( =  cCsAt odSnytittiWntj onXdS(N(s DNS_SD_PIDsosskillssignalsSIGTERMsOSError(((s+build\bdist.win32\egg\turbogears\startup.pys stop_bonjourts sVirtualPathFiltercBstZdZdZRS(sFilter that makes CherryPy ignorant of a URL root path. That is, you can mount your app so the URI "/users/~rdel/myapp/" maps to the root object "/". cCstidt}|oftii}||jodti_q|i|o|t |ti_qti |ndS(Nsserver.webpaths/( sconfigsgetsFalsesprefixscherrypysrequests object_pathspaths startswithslensNotFound(sselfsprefixspath((s+build\bdist.win32\egg\turbogears\startup.pyson_start_resources  (s__name__s __module__s__doc__son_start_resource(((s+build\bdist.win32\egg\turbogears\startup.pysVirtualPathFilter}s sNestedVariablesFiltercBstZdZRS(NcCs=ttido&titiiphti_ndS(Nsparams(shasattrscherrypysrequestsNestedVariabless to_pythonsparams(sself((s+build\bdist.win32\egg\turbogears\startup.pys before_mains(s__name__s __module__s before_main(((s+build\bdist.win32\egg\turbogears\startup.pysNestedVariablesFiltersc Cstihdhdt<dtiititd<dt <<tihdhdt<dtiititd<dt <<t t ii ddd!nd"S(#sHandles TurboGears tasks when the CherryPy server starts. This adds the "tg_js" configuration to make MochiKit accessible. It also turns on stdlib logging when in development mode. s /tg_staticsstatic_filter.onsstatic_filter.dirsstaticslog_debug_info_filter.ons/tg_jss static/jss developmentsdecoding_filter.onspaths/sdecoding_filter.encodings kid.encodingsutf8sserver.webpathssroots _cp_filtersiisserver.environmentstg.new_style_loggingsserver.log_to_screens.%(asctime)s %(name)s %(levelname)s %(message)ssserver.log_filesturbogears.accesss %(message)ss tg.bonjourssqlalchemy.dburisturbogears.extensionssstart_extensions tg.schedulersScheduler startedN(?sconfigsupdatesTruesosspathsabspaths pkg_resourcessresource_filenames__name__sFalsescherrypys environmentssgetsNonesviews load_enginessloadBaseTemplatesswebpathshasattrsroots _cp_filterssEndTransactionsFiltersNestedVariablesFilters morefilterssinsertsVirtualPathFiltersextends startswithsendswithsisdevsloggings getLoggerssetuplogssetLevelsDEBUGs Formattersfmts StreamHandlerssyssstdoutshandlers setFormatters addHandlerslogfiles propagates FileHandlersINFOsbonjoursettings start_bonjoursdatabasesbind_meta_datasiter_entry_pointss extensionss entrypointsloadsextsstart_extensionscall_on_startupsitems schedulers_start_schedulerslogsinfo( sisdevs morefilterssfmtshandlers entrypointssetuplogsbonjoursettingslogfilesitemsexts extensions((s+build\bdist.win32\egg\turbogears\startup.pysstartTurboGearssrII8         cCsxtD]}|iqWtittid}x8|D]0}|i }t |do|i qBqBWxt D] }|q}WtidtotitidndS(Nsturbogears.extensionssshutdown_extensions tg.schedulersScheduler stopped(s hub_registryshubsendsclears stop_bonjours pkg_resourcessiter_entry_pointss extensionss entrypointsloadsextshasattrsshutdown_extensionscall_on_shutdownsitemsconfigsgetsFalses schedulers_stop_schedulerslogsinfo(shubsitemsexts entrypoints extensions((s+build\bdist.win32\egg\turbogears\startup.pysstopTurboGearss"    cCs:t|}y|ti_Wntj onX|SdS(N(sold_object_trails object_pathstrailscherrypysrequests object_trailsAttributeError(s object_pathstrail((s+build\bdist.win32\egg\turbogears\startup.pysget_object_trails  sSimpleWSGIServercBstZdZeZdZRS(s=A WSGI server that accepts a WSGI application as a parameter.c Cstii}t}|ddjoVydkl}Wntj oq{X||dh}tii hdt <n|d|df}t i ||||d|dd |d dS( Nsserver.environments development(s EvalExceptions global_confsserver.throw_errorssserver.socket_hostsserver.socket_portsserver.thread_poolsrequest_queue_sizesserver.socket_queue_size(scherrypysconfigsgetsconfswsgiAppswsgi_appspaste.evalexception.middlewares EvalExceptions ImportErrorsupdatesTrues bind_addrsCherryPyWSGIServers__init__sself(sselfs EvalExceptions bind_addrsconfswsgi_app((s+build\bdist.win32\egg\turbogears\startup.pys__init__s   (s__name__s __module__s__doc__s CPHTTPRequestsRequestHandlerClasss__init__(((s+build\bdist.win32\egg\turbogears\startup.pysSimpleWSGIServers cCsG|t_tidtotiidtntiidS(Nstg.fancy_exceptionsserver(srootscherrypysconfigsgetsFalsesserversstartsSimpleWSGIServer(sroot((s+build\bdist.win32\egg\turbogears\startup.pys start_server/s (4s__doc__sosserrnosloggingssysstimesatexitssignals pkg_resourcesscherrypys_cputilsformencode.variabledecodesNestedVariablesscherrypy._cpwsgiswsgiApps CPHTTPRequestscherrypy._cpwsgiserversCherryPyWSGIServers turbogearssconfigs schedulersdatabasesviewsturbogears.databases hub_registrysEndTransactionsFilters getLoggerslogsrequiresreloader_threadslibs autoreloadswebpathsNones DNS_SD_PIDs start_bonjours stop_bonjoursobjectsVirtualPathFiltersNestedVariablesFiltersstartTurboGearssstopTurboGearssget_object_trailsold_object_trailsSimpleWSGIServers start_serversserverson_start_server_listsappendson_stop_server_listscall_on_startupscall_on_shutdown("sSimpleWSGIServerscherrypysreloader_threadsatexitsEndTransactionsFilters stop_bonjourslogserrnosNestedVariablessstartTurboGearss start_bonjoursconfigs hub_registryscall_on_startups_cputilsstopTurboGearsssyss schedulersget_object_trails CPHTTPRequestsCherryPyWSGIServersloggings start_serversold_object_trailsdatabasescall_on_shutdownssignalsVirtualPathFilterswsgiApps pkg_resourcesstimesNestedVariablesFiltersossview((s+build\bdist.win32\egg\turbogears\startup.pys?sN               4   ]     PKs6Z33turbogears/testutil.pyimport types import inspect import logging import unittest import cStringIO as StringIO import Cookie import cherrypy try: import sqlobject from sqlobject.inheritance import InheritableSQLObject except ImportError: sqlobject = None try: import sqlalchemy except ImportError: sqlalchemy = None from cherrypy import _cphttptools from turbogears import database, controllers, startup, validators, config, \ update_config from turbogears.util import get_model import os from os.path import * cwd = os.getcwd() # For clean tests, remove all compiled Kid templates for w in os.walk(cwd): if w[0] != '.svn': for f in w[2]: if f.endswith('.kid'): f = join(w[0], f[:-3] + 'pyc') if exists(f): os.remove(f) # Override config of all applications with test.cfg if exists(join(cwd, "test.cfg")): modulename = None for w in os.walk(cwd): if w[0].endswith("config"): config_dir = w[0].replace(cwd, "")[1:] modulename = "%s.app" % config_dir.replace(os.sep, ".") break update_config(configfile=join(cwd, "test.cfg"), modulename=modulename) else: database.set_db_uri("sqlite:///:memory:") config.update({"global" : {"tg.new_style_logging" : True}}) config.update({"global" : {"autoreload.on" : False}}) def start_cp(): if not config.get("cherrypy_started", False): cherrypy.server.start(serverClass=None, initOnly=True) config.update({"cherrypy_started" : True}) test_user = None def set_identity_user(user): "Setup a user which will be used to configure request's identity." global test_user test_user = user def attach_identity(req): from turbogears.identity import current_provider if config.get("identity.on", False): if test_user: id = current_provider.authenticated_identity(test_user) else: id = current_provider.anonymous_identity() req.identity = id def create_request(request, method="GET", protocol="HTTP/1.1", headers={}, rfile=None, clientAddress="127.0.0.1", remoteHost="localhost", scheme="http"): start_cp() if not rfile: rfile = StringIO.StringIO("") if type(headers) != dict: headerList = headers else: headerList = [(key, value) for key, value in headers.items()] headerList.append(("Host", "localhost")) if not hasattr(cherrypy.root, "started"): startup.startTurboGears() cherrypy.root.started = True req = _cphttptools.Request(clientAddress, 80, remoteHost, scheme) cherrypy.serving.request = req attach_identity(req) cherrypy.serving.response = _cphttptools.Response() req.run(" ".join((method, request, protocol)), headerList, rfile) createRequest = create_request class BrowsingSession(object): def __init__(self): self.visit = None self.response, self.status = None, None self.cookie = Cookie.SimpleCookie() def goto(self, *args, **kwargs): if self.cookie: headers = kwargs.setdefault('headers', {}) headers['Cookie'] = self.cookie.output() create_request(*args, **kwargs) self.response = cherrypy.response.body[0] self.status = cherrypy.response.status if cherrypy.response.simple_cookie: self.cookie.update(cherrypy.response.simple_cookie) def _return_directly(output, *args): return output class DummySession: session_storage = dict to_be_loaded = None class DummyRequest: "A very simple dummy request." remote_host = "127.0.0.1" def __init__(self, method='GET', path='/', headers=None): self.headers = headers or {} self.method = method self.path = path self.base = '' self._session = DummySession() def purge__(self): pass def call(method, *args, **kw): start_cp() output, response = call_with_request(method, DummyRequest(), *args, **kw) return output def call_with_request(method, request, *args, **kw): "More fine-grained version of call method, allowing to use request/response." orig_proc_output = controllers._process_output controllers._process_output = _return_directly cherrypy.serving.response = _cphttptools.Response() cherrypy.serving.request = request if not hasattr(request, "identity"): attach_identity(request) output = None try: output = method(*args, **kw) finally: del cherrypy.serving.request controllers._process_output = orig_proc_output response = cherrypy.serving.response return output, response class DBTest(unittest.TestCase): model = None def setUp(self): if not self.model: self.model = get_model() if not self.model: raise "Unable to run database tests without a model" for item in self.model.__dict__.values(): if isinstance(item, types.TypeType) and issubclass(item, sqlobject.SQLObject) and item != sqlobject.SQLObject \ and item != InheritableSQLObject: item.createTable(ifNotExists=True) def tearDown(self): database.rollback_all() for item in self.model.__dict__.values(): if isinstance(item, types.TypeType) and issubclass(item, sqlobject.SQLObject) and item != sqlobject.SQLObject \ and item != InheritableSQLObject: item.dropTable(ifExists=True) def reset_cp(): cherrypy.root = None def catch_validation_errors(widget, value): """ Catches and unpacks validation errors. For testing purposes. """ errors = {} try: value = widget.validate(value) except validators.Invalid, e: if hasattr(e, 'unpack_errors'): errors = e.unpack_errors() else: errors = e return value, errors class MemoryListHandler(logging.Handler): def __init__(self): logging.Handler.__init__(self, level=logging.DEBUG) self.log = [] def emit(self, record): print "Got record: %s" % record print "formatted as: %s" % self.format(record) self.log.append(self.format(record)) def print_log(self): print "\n".join(self.log) self.log = [] def get_log(self): log = self.log self.log = [] return log _memhandler = MemoryListHandler() _currentcat = None def capture_log(category): """Category can either be a single category (a string like 'foo.bar') or a list of them. You must call print_log() to reset when you're done.""" global _currentcat assert not _currentcat if not isinstance(category, list) and not isinstance(category, tuple): category = [category] _currentcat = category for cat in category: log = logging.getLogger(cat) log.setLevel(logging.DEBUG) log.addHandler(_memhandler) def _reset_logging(): """Manages the resetting of the loggers""" global _currentcat if not _currentcat: return for cat in _currentcat: log = logging.getLogger(cat) log.removeHandler(_memhandler) _currentcat = None def print_log(): """Prints the log captured by capture_log to stdout, resets that log and resets the temporarily added handlers.""" _reset_logging() _memhandler.print_log() def get_log(): """Returns the list of log messages captured by capture_log, resets that log and resets the temporarily added handlers.""" _reset_logging() return _memhandler.get_log() def sqlalchemy_cleanup(): database._engine = None sqlalchemy.clear_mappers() database.metadata.clear() database.metadata.dispose() __all__ = ["create_request", "call", "DBTest", "createRequest", "attach_identity", "set_identity_user", "capture_log", "print_log", "get_log", "sqlalchemy_cleanup"] PKh6.dˎ66turbogears/testutil.pyc; *Fc @sdkZdkZdkZdkZdkZdkZdkZydkZdk l Z Wne j o e ZnXy dk Z Wne j o e Z nXdklZdklZlZlZlZlZlZdklZdkZdkTeiZxeieD]}ZeddjofxcedD]SZeid o=e eded d Ze!eoei"eqq1q1WqqWe!e ed oe Z#xceieD]RZedid o8edi$eddZ%de%i$ei&dZ#PqqWede ed de#nei'dei(hdhde)<<ei(hdhde*<<dZ+e a,dZ-dZ.ddhe dddd Z/e/Z0d!e1fd"YZ2d#Z3d$fd%YZ4d&fd'YZ5d(Z6d)Z7d*ei8fd+YZ9d,Z:d-Z;d.ei<fd/YZ=e=Z>e a?d0Z@d1ZAd2ZBd3ZCd4ZDd5d6d*d7d8d9d:d;d<d=g ZEdS(>N(sInheritableSQLObject(s _cphttptools(sdatabases controllerssstartups validatorssconfigs update_config(s get_model(s*is.svnis.kidispycstest.cfgsconfigsis%s.apps.s configfiles modulenamessqlite:///:memory:sglobalstg.new_style_loggings autoreload.oncCsKtidt o3tiidtdttihdt<ndS(Nscherrypy_starteds serverClasssinitOnly( sconfigsgetsFalsescherrypysserversstartsNonesTruesupdate(((s,build\bdist.win32\egg\turbogears\testutil.pysstart_cp7scCs |adS(s@Setup a user which will be used to configure request's identity.N(susers test_user(suser((s,build\bdist.win32\egg\turbogears\testutil.pysset_identity_user>scCsWdkl}tidto3to|it}n |i}||_ ndS(N(scurrent_providers identity.on( sturbogears.identityscurrent_providersconfigsgetsFalses test_usersauthenticated_identitysidsanonymous_identitysreqsidentity(sreqscurrent_providersid((s,build\bdist.win32\egg\turbogears\testutil.pysattach_identityCs   sGETsHTTP/1.1s 127.0.0.1s localhostshttpc Cs"t| otid}nt|tjo |} n:gi} |i D]\} } | | | fqS~ } | iddft t id otitt i_nti|d||}|t i_t|tit i_|idi|||f| |dS(NssHosts localhostsstartediPs ("sstart_cpsrfilesStringIOstypesheaderssdicts headerListsappends_[1]sitemsskeysvalueshasattrscherrypysrootsstartupsstartTurboGearssTruesstarteds _cphttptoolssRequests clientAddresss remoteHostsschemesreqsservingsrequestsattach_identitysResponsesresponsesrunsjoinsmethodsprotocol( srequestsmethodsprotocolsheaderssrfiles clientAddresss remoteHostsschemesreqs headerListskeysvalues_[1]((s,build\bdist.win32\egg\turbogears\testutil.pyscreate_requestLs 9   sBrowsingSessioncBstZdZdZRS(NcCs4t|_ttf\|_|_ti|_dS(N(sNonesselfsvisitsresponsesstatussCookies SimpleCookiescookie(sself((s,build\bdist.win32\egg\turbogears\testutil.pys__init__ds cOs|io)|idh}|ii|dtij o/}t|do|i}qZ|}nX||fSdS(s> Catches and unpacks validation errors. For testing purposes. s unpack_errorsN( serrorsswidgetsvalidatesvalues validatorssInvalidseshasattrs unpack_errors(swidgetsvalueserrorsse((s,build\bdist.win32\egg\turbogears\testutil.pyscatch_validation_errorss sMemoryListHandlercBs,tZdZdZdZdZRS(NcCs&tii|dtig|_dS(Nslevel(sloggingsHandlers__init__sselfsDEBUGslog(sself((s,build\bdist.win32\egg\turbogears\testutil.pys__init__scCs8d|GHd|i|GH|ii|i|dS(NsGot record: %ssformatted as: %s(srecordsselfsformatslogsappend(sselfsrecord((s,build\bdist.win32\egg\turbogears\testutil.pysemits cCsdi|iGHg|_dS(Ns (sjoinsselfslog(sself((s,build\bdist.win32\egg\turbogears\testutil.pys print_logscCs|i}g|_|SdS(N(sselfslog(sselfslog((s,build\bdist.win32\egg\turbogears\testutil.pysget_logs  (s__name__s __module__s__init__semits print_logsget_log(((s,build\bdist.win32\egg\turbogears\testutil.pysMemoryListHandlers   cCst ptt|t ot|t o |g}n|ax:|D]2}ti|}|i ti |i t qKWdS(sCategory can either be a single category (a string like 'foo.bar') or a list of them. You must call print_log() to reset when you're done.N(s _currentcatsAssertionErrors isinstancescategorysliststuplescatsloggings getLoggerslogssetLevelsDEBUGs addHandlers _memhandler(scategoryslogscat((s,build\bdist.win32\egg\turbogears\testutil.pys capture_logs" cCsGt odSnx*tD]"}ti|}|itqWtadS(s$Manages the resetting of the loggersN(s _currentcatscatsloggings getLoggerslogs removeHandlers _memhandlersNone(slogscat((s,build\bdist.win32\egg\turbogears\testutil.pys_reset_loggingscCsttidS(spPrints the log captured by capture_log to stdout, resets that log and resets the temporarily added handlers.N(s_reset_loggings _memhandlers print_log(((s,build\bdist.win32\egg\turbogears\testutil.pys print_logscCsttiSdS(sxReturns the list of log messages captured by capture_log, resets that log and resets the temporarily added handlers.N(s_reset_loggings _memhandlersget_log(((s,build\bdist.win32\egg\turbogears\testutil.pysget_logscCs1tt_titiitiidS(N(sNonesdatabases_engines sqlalchemys clear_mapperssmetadatasclearsdispose(((s,build\bdist.win32\egg\turbogears\testutil.pyssqlalchemy_cleanups   screate_requestscalls createRequestsattach_identitysset_identity_users capture_logs print_logsget_logssqlalchemy_cleanup(Fstypessinspectsloggingsunittests cStringIOsStringIOsCookiescherrypys sqlobjectssqlobject.inheritancesInheritableSQLObjects ImportErrorsNones sqlalchemys _cphttptoolss turbogearssdatabases controllerssstartups validatorssconfigs update_configsturbogears.utils get_modelsossos.pathsgetcwdscwdswalkswsfsendswithsjoinsexistssremoves modulenamesreplaces config_dirsseps set_db_urisupdatesTruesFalsesstart_cps test_usersset_identity_usersattach_identityscreate_requests createRequestsobjectsBrowsingSessions_return_directlys DummySessions DummyRequestscallscall_with_requestsTestCasesDBTestsreset_cpscatch_validation_errorssHandlersMemoryListHandlers _memhandlers _currentcats capture_logs_reset_loggings print_logsget_logssqlalchemy_cleanups__all__(.s modulenamescherrypysunittests print_logsstartupscatch_validation_errorss validatorss config_dirsMemoryListHandlers DummySessions__all__sBrowsingSessionscreate_requests update_configsCookiestypess _memhandlersDBTestscallsconfigscwdsattach_identitys sqlalchemys_reset_loggingsstart_cpscall_with_requestsinspectsset_identity_users _cphttptoolssget_logssqlalchemy_cleanups_return_directlys DummyRequestsInheritableSQLObjects sqlobjectsreset_cpsfsloggings capture_logsStringIOsdatabases controllerss createRequests get_modelswsos((s,build\bdist.win32\egg\turbogears\testutil.pys?s            +     !                PKV6AD88turbogears/util.pyimport os import sys import re import htmlentitydefs from inspect import getargspec, getargvalues from itertools import izip, islice, chain, imap from operator import isSequenceType import pkg_resources import setuptools from cherrypy import request from turbogears.decorator import decorator from turbogears import config # This Enum implementation is from the Python Cookbook and is # written by Zoran Isailovski: # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/413486 def Enum(*names): ##assert names, "Empty enums are not supported" # <- Don't like empty enums? Uncomment! class EnumClass(object): __slots__ = names def __iter__(self): return iter(constants) def __len__(self): return len(constants) def __getitem__(self, i): return constants[i] def __repr__(self): return 'Enum' + str(names) def __str__(self): return 'enum ' + str(constants) enumType = EnumClass() class EnumValue(object): __slots__ = ('__value') def __init__(self, value): self.__value = value Value = property(lambda self: self.__value) EnumType = property(lambda self: enumType) def __hash__(self): return hash(self.__value) def __cmp__(self, other): # C fans might want to remove the following assertion # to make all enums comparable by ordinal value {;)) assert self.EnumType is other.EnumType, "Only values from the same enum are comparable" return cmp(self.__value, other.__value) def __invert__(self): return constants[maximum - self.__value] def __nonzero__(self): return bool(self.__value) def __repr__(self): return str(names[self.__value]) maximum = len(names) - 1 constants = [None] * len(names) for i, each in enumerate(names): val = EnumValue(i) setattr(EnumClass, each, val) constants[i] = val constants = tuple(constants) return enumType class setlike(list): """Set preserving item order.""" def add(self, item): if item not in self: self.append(item) def add_all(self, iterable): for item in iterable: self.add(item) def get_project_meta(name): for dirname in os.listdir("./"): if dirname.lower().endswith("egg-info"): fname = os.path.join(dirname, name) return fname def get_project_config(): """Tries to select appropriate project configuration file.""" config = None if os.path.exists("setup.py"): config = "dev.cfg" else: config = "prod.cfg" return config def load_project_config(configfile=None): """Tries to update the config, loading project settings from the config file specified. If config is C{None} uses L{get_project_config} to locate one. """ if configfile is None: configfile = get_project_config() if not os.path.isfile(configfile): print 'config file %s not found or is not a file.' % os.path.abspath(configfile) sys.exit() package = get_package_name() config.update_config(configfile=configfile, modulename = package + ".config") def get_package_name(): """Try to find out the package name of the current directory.""" package = config.get("package") if package: return package if "--egg" in sys.argv: projectname = sys.argv[sys.argv.index("--egg")+1] egg = pkg_resources.get_distribution(projectname) top_level = egg._get_metadata("top_level.txt") else: fname = get_project_meta('top_level.txt') top_level = fname and open(fname) or [] for package in top_level: package = package.rstrip() if package and package != 'locales': return package def get_project_name(): pkg_info = get_project_meta('PKG-INFO') if pkg_info: name = list(open(pkg_info))[1][6:-1] return name.strip() def get_model(): package_name = get_package_name() if not package_name: return None package = __import__(package_name, {}, {}, ["model"]) if hasattr(package, "model"): return package.model def ensure_sequence(obj): """Construct a sequence from object.""" if obj is None: return [] elif isSequenceType(obj): return obj else: return [obj] def to_kw(func, args, kw, start=0): """Convert all applicable arguments to keyword arguments.""" argnames, defaults = getargspec(func)[::3] defaults = ensure_sequence(defaults) kv_pairs = izip( islice(argnames, start, len(argnames) - len(defaults)), args) for k, v in kv_pairs: kw[k] = v return args[len(argnames)-len(defaults)-start:], kw def from_kw(func, args, kw, start=0): """Extract named positional arguments from keyword arguments.""" argnames, defaults = getargspec(func)[::3] defaults = ensure_sequence(defaults) newargs = [kw.pop(name) for name in islice(argnames, start, len(argnames) - len(defaults)) if name in kw] newargs.extend(args) return newargs, kw def adapt_call(func, args, kw, start=0): """Remove excess arguments.""" argnames, varargs, kwargs, defaults = getargspec(func) defaults = ensure_sequence(defaults) del argnames[:start] if kwargs in (None, "_decorator__kwargs"): remove_keys(kw, [key for key in kw.iterkeys() if key not in argnames]) if varargs in (None, "_decorator__varargs"): args = args[:len(argnames) - len(defaults)] else: pivot = len(argnames) - len(defaults) args = tuple(chain(islice(args, pivot), imap(kw.pop, islice( argnames, pivot, None)), islice(args, pivot, None))) return args, kw def call_on_stack(func_name, kw, start=0): """Check if a call to function matching pattern is on stack.""" try: frame = sys._getframe(start+1) except ValueError: return False while frame.f_back: frame = frame.f_back if frame.f_code.co_name == func_name: args = getargvalues(frame)[3] for key in kw.iterkeys(): try: if kw[key] != args[key]: continue except KeyError, TypeError: continue if key or not args: return True return False def arg_index(func, argname): """Find index of argument as declared for given function.""" argnames = getargspec(func)[0] if has_arg(func, argname): return argnames.index(argname) else: return None def has_arg(func, argname): """Check whether function has argument.""" return argname in getargspec(func)[0] def inject_arg(func, argname, argval, args, kw, start=0): """Insert argument into call.""" argnames, defaults = getargspec(func)[::3] defaults = ensure_sequence(defaults) pos = arg_index(func, argname) if pos is None or pos > len(argnames) - len(defaults) - 1: kw[argname] = argval else: pos -= start args = tuple(chain(islice(args, pos), (argval,), islice(args, pos, None))) return args, kw def inject_args(func, injections, args, kw, start=0): """Insert arguments into call.""" for argname, argval in injections.iteritems(): args, kw = inject_arg(func, argname, argval, args, kw, start) return args, kw def inject_call(func, injections, *args, **kw): """Insert arguments and call.""" args, kw = inject_args(func, injections, args, kw) return func(*args, **kw) def bind_args(**add): """Call with arguments set to a predefined value.""" def entagle(func): return lambda func, *args, **kw: inject_call(func, add, *args, **kw) def make_decorator(func): argnames, varargs, kwargs, defaults = getargspec(func) defaults = list(ensure_sequence(defaults)) defaults = [d for d in defaults if argnames[-len(defaults) + defaults.index(d)] not in add] argnames = [arg for arg in argnames if arg not in add] return decorator(entagle, (argnames, varargs, kwargs, defaults))(func) return make_decorator def remove_keys(dict_, seq): """Gracefully remove keys from dict.""" for key in seq: dict_.pop(key, None) return dict_ def recursive_update(to_dict, from_dict): """Recursively update all dicts in to_dict with values from from_dict.""" # probably slow as hell :( should be optimized somehow... for k, v in from_dict.iteritems(): if isinstance(v, dict) and isinstance(to_dict[k], dict): recursive_update(to_dict[k], v) else: to_dict[k] = v return to_dict def combine_contexts(frames=None, depth=None): """Combine contexts (globals, locals) of frames.""" locals_ = {} globals_ = {} if frames is None: frames = [] if depth is not None: frames.extend([sys._getframe(d+1) for d in depth]) for frame in frames: locals_.update(frame.f_locals) globals_.update(frame.f_globals) return locals_, globals_ def request_available(): """Check if cherrypy.request is available.""" try: setattr(request, "tg_dumb_attribute", True) return True except AttributeError: return False def flatten_sequence(seq): """Flatten sequence.""" for item in seq: if isSequenceType(item) and not isinstance(item, basestring): for item in flatten_sequence(item): yield item else: yield item def load_class(dottedpath): ''' Loads a class from a module in dotted-path notation. Eg: load_class("package.module.class"). Based on recipe 16.3 from "Python Cookbook, 2ed., by Alex Martelli, Anna Martelli Ravenscroft, and David Ascher (O'Reilly Media, 2005) 0-596-00797-3" ''' assert dottedpath is not None, "dottedpath must not be None" splitted_path = dottedpath.split('.') modulename = '.'.join(splitted_path[:-1]) classname = splitted_path[-1] try: module = __import__(modulename, globals(), locals(), [classname]) except ImportError: return None return getattr(module, classname) class Bunch(dict): __setattr__ = dict.__setitem__ def __delattr__(self, name): try: del self[name] except KeyError: raise AttributeError(name) def __getattr__(self, name): try: return self[name] except KeyError: raise AttributeError(name) #XXX: Should issue Deprecation warning? DictObj = Bunch DictWrapper = Bunch def parse_http_accept_header(accept): items = [] if accept is None: return items for item in accept.split(","): pos = item.find(";q=") order = 1 if pos > -1: order = float(item[pos+3:].strip()) item = item[:pos].strip() items.append((item, order)) items.sort(lambda i1, i2: cmp(i2[1], i1[1])) return [i[0] for i in items] def to_unicode(value): """ Converts encoded string to unicode string. Uses get_template_encoding_default() to guess source string encoding. Handles turbogears.i18n.lazystring correctly. """ if isinstance(value, str): # try to make sure we won't get UnicodeDecodeError from the template # by converting all encoded strings to Unicode strings try: value = unicode(value) except UnicodeDecodeError: try: value = unicode(value, get_template_encoding_default()) except UnicodeDecodeError: # fail early raise ValueError("Non-unicode string: %r" % value) return value def to_utf8(value): """Converts a unicode string to utf-8 encoded plain string. Handles turbogears.i18n.lazystring correctly. Does nothing to already encoded string. """ if isinstance(value, str): pass elif hasattr(value, '__unicode__'): value = unicode(value) if isinstance(value, unicode): value = value.encode('utf-8') return value def get_template_encoding_default(engine_name=None): """Returns default encoding for template files (Kid, Genshi, etc.).""" if engine_name is None: engine_name = config.get('tg.defaultview', 'kid') return config.get('%s.encoding' % engine_name, 'utf-8') def find_precision(value): """ Find precision of some arbitrary value. The main intention for this function is to use it together with turbogears.i18n.format.format_decimal() where one has to inform the precision wanted. So, use it like this: format_decimal(some_number, find_precision(some_number)) """ decimals = '' try: stub, decimals = str(value).split('.') except ValueError: pass return len(decimals) def copy_if_mutable(value, feedback=False): if isinstance(value, dict): mutable = True value = value.copy() elif isinstance(value, list): mutable = True value = value[:] else: mutable = False if feedback: return (value, mutable) else: return value def fixentities(htmltext): # replace HTML character entities with numerical references # note: this won't handle CDATA sections properly def repl(m): entity = htmlentitydefs.entitydefs.get(m.group(1).lower()) if not entity: return m.group(0) elif len(entity) == 1: if entity in "&<>'\"": return m.group(0) return "&#%d;" % ord(entity) else: return entity return re.sub("&(\w+);?", repl, htmltext) __all__ = ["Enum", "setlike", "get_package_name", "get_model", "load_project_config", "url", "ensure_sequence", "has_arg", "DictWrapper", "DictObj", "to_kw", "from_kw", "adapt_call", "call_on_stack", "remove_keys", "arg_index", "inject_arg", "inject_args", "bind_args", "recursive_update", "combine_contexts", "request_available", "flatten_sequence", "load_class", "Bunch", "parse_http_accept_header", "to_unicode", "to_utf8", "get_template_encoding_default", "find_precision", "copy_if_mutable"] PKh6?T__turbogears/util.pyc; _Fc@ssdkZdkZdkZdkZdklZlZdklZl Z l Z l Z dk l Z dkZdkZdklZdklZdklZdZdefd YZd Zd Zed Zd ZdZdZdZ ddZ!ddZ"ddZ#ddZ$dZ%dZ&ddZ'ddZ(dZ)dZ*dZ+dZ,eedZ-dZ.d Z/d!Z0d"e1fd#YZ2e2Z3e2Z4d$Z5d%Z6d&Z7ed'Z8d(Z9e:d)Z;d*Z<d+dd,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAd"dBdCdDdEdFdGgZ=dS(HN(s getargspecs getargvalues(sizipsisliceschainsimap(sisSequenceType(srequest(s decorator(sconfigc sdtfdY}|dtfdY}tdtgtx@t D]2\}}||}t |||||%scsS(N(senumType(sself(senumType(s(build\bdist.win32\egg\turbogears\util.pys&scCst|iSdS(N(shashsselfs_EnumValue__value(sself((s(build\bdist.win32\egg\turbogears\util.pys__hash__'scCs4|i|ijp tdt|i|iSdS(Ns-Only values from the same enum are comparable(sselfsEnumTypesothersAssertionErrorscmps_EnumValue__value(sselfsother((s(build\bdist.win32\egg\turbogears\util.pys__cmp__(scs|iSdS(N(s constantssmaximumsselfs_EnumValue__value(sself(smaximums constants(s(build\bdist.win32\egg\turbogears\util.pys __invert__-scCst|iSdS(N(sboolsselfs_EnumValue__value(sself((s(build\bdist.win32\egg\turbogears\util.pys __nonzero__.scst|iSdS(N(sstrsnamessselfs_EnumValue__value(sself(snames(s(build\bdist.win32\egg\turbogears\util.pys__repr__/s( s__name__s __module__s __slots__s__init__spropertysValuesEnumTypes__hash__s__cmp__s __invert__s __nonzero__s__repr__((snamessenumTypesmaximums constants(s(build\bdist.win32\egg\turbogears\util.pys EnumValue"s    i(sobjects EnumClasssenumTypes EnumValueslensnamessmaximumsNones constantss enumeratesiseachsvalssetattrstuple( snamess EnumClasssvalsismaximums EnumValueseachs constantssenumType((snamessenumTypesmaximums constantss(build\bdist.win32\egg\turbogears\util.pysEnums "   ssetlikecBs tZdZdZdZRS(sSet preserving item order.cCs"||jo|i|ndS(N(sitemsselfsappend(sselfsitem((s(build\bdist.win32\egg\turbogears\util.pysadd=s cCs"x|D]}|i|qWdS(N(siterablesitemsselfsadd(sselfsiterablesitem((s(build\bdist.win32\egg\turbogears\util.pysadd_allAs(s__name__s __module__s__doc__saddsadd_all(((s(build\bdist.win32\egg\turbogears\util.pyssetlike:s  cCsQxJtidD]9}|iidotii||}|SqqWdS(Ns./segg-info( sosslistdirsdirnameslowersendswithspathsjoinsnamesfname(snamesdirnamesfname((s(build\bdist.win32\egg\turbogears\util.pysget_project_metaEs cCs1t}tiido d}nd}|SdS(s7Tries to select appropriate project configuration file.ssetup.pysdev.cfgsprod.cfgN(sNonesconfigsosspathsexists(sconfig((s(build\bdist.win32\egg\turbogears\util.pysget_project_configKs  cCsx|tjo t}ntii| o#dtii|GHtint }t i d|d|ddS(sTries to update the config, loading project settings from the config file specified. If config is C{None} uses L{get_project_config} to locate one. s*config file %s not found or is not a file.s configfiles modulenames.configN( s configfilesNonesget_project_configsosspathsisfilesabspathssyssexitsget_package_namespackagesconfigs update_config(s configfilespackage((s(build\bdist.win32\egg\turbogears\util.pysload_project_configUs    cCstid}|o|Sndtijo?titiidd}ti|}|i d}n't d}|o t|pg}x6|D].}|i}|o |djo|SqqWdS(s:Try to find out the package name of the current directory.spackages--eggis top_level.txtslocalesN(sconfigsgetspackagessyssargvsindexs projectnames pkg_resourcessget_distributionseggs _get_metadatas top_levelsget_project_metasfnamesopensrstrip(spackages projectnames top_levelsfnamesegg((s(build\bdist.win32\egg\turbogears\util.pysget_package_namecs  cCsBtd}|o+tt|ddd!}|iSndS(NsPKG-INFOiii(sget_project_metaspkg_infoslistsopensnamesstrip(spkg_infosname((s(build\bdist.win32\egg\turbogears\util.pysget_project_namews cCsPt}| otSnt|hhdg}t|do |iSndS(Nsmodel(sget_package_names package_namesNones __import__spackageshasattrsmodel(s package_namespackage((s(build\bdist.win32\egg\turbogears\util.pys get_model}s  cCs5|tjogSnt|o|Sn|gSdS(s!Construct a sequence from object.N(sobjsNonesisSequenceType(sobj((s(build\bdist.win32\egg\turbogears\util.pysensure_sequences   ic Cst|ddd\}}t|}tt||t|t||}x|D]\}}|||s((sfunc(sadd(s(build\bdist.win32\egg\turbogears\util.pysentaglescst|\}}}}tt|}gi}|D]9}|t | |i |jo||q8q8~}gi}|D]!}|jo||qq~}t||||f|SdS(N(s getargspecsfuncsargnamessvarargsskwargssdefaultsslistsensure_sequencesappends_[1]sdslensindexsaddsargs decoratorsentagle(sfuncsvarargssargnamess_[1]sdefaultsskwargssargsd(sentaglesadd(s(build\bdist.win32\egg\turbogears\util.pysmake_decorators P8N(sentaglesmake_decorator(saddsentaglesmake_decorator((saddsentagles(build\bdist.win32\egg\turbogears\util.pys bind_argss cCs)x|D]}|i|tqW|SdS(s!Gracefully remove keys from dict.N(sseqskeysdict_spopsNone(sdict_sseqskey((s(build\bdist.win32\egg\turbogears\util.pys remove_keyss cCshx]|iD]O\}}t|tot||tot|||q |||]si(sitemssacceptsNonessplitsitemsfindspossordersfloatsstripsappendssorts_[1]si(sacceptsisitemssposs_[1]sitemsorder((s(build\bdist.win32\egg\turbogears\util.pysparse_http_accept_headerRs  cCs~t|tofyt|}Wqvtj oCyt|t}Wqrtj otd|qrXqvXn|SdS(s Converts encoded string to unicode string. Uses get_template_encoding_default() to guess source string encoding. Handles turbogears.i18n.lazystring correctly. sNon-unicode string: %rN(s isinstancesvaluesstrsunicodesUnicodeDecodeErrorsget_template_encoding_defaults ValueError(svalue((s(build\bdist.win32\egg\turbogears\util.pys to_unicode`scCs_t|ton!t|dot|}nt|to|id}n|SdS(sConverts a unicode string to utf-8 encoded plain string. Handles turbogears.i18n.lazystring correctly. Does nothing to already encoded string. s __unicode__sutf-8N(s isinstancesvaluesstrshasattrsunicodesencode(svalue((s(build\bdist.win32\egg\turbogears\util.pysto_utf8tscCs;|tjotidd}ntid|dSdS(s@Returns default encoding for template files (Kid, Genshi, etc.).stg.defaultviewskids %s.encodingsutf-8N(s engine_namesNonesconfigsget(s engine_name((s(build\bdist.win32\egg\turbogears\util.pysget_template_encoding_defaults cCsId}yt|id\}}Wntj onXt|SdS(s% Find precision of some arbitrary value. The main intention for this function is to use it together with turbogears.i18n.format.format_decimal() where one has to inform the precision wanted. So, use it like this: format_decimal(some_number, find_precision(some_number)) ss.N(sdecimalssstrsvaluessplitsstubs ValueErrorslen(svaluesstubsdecimals((s(build\bdist.win32\egg\turbogears\util.pysfind_precisionscCsjt|tot}|i}n(t|tot}|}nt}|o||fSn|SdS(N( s isinstancesvaluesdictsTruesmutablescopyslistsFalsesfeedback(svaluesfeedbacksmutable((s(build\bdist.win32\egg\turbogears\util.pyscopy_if_mutables cCs d}tid||SdS(NcCstii|idi}| o|idSnHt|djo0|djo|idSndt|Sn|SdS(Niis&<>'"s&#%d;( shtmlentitydefss entitydefssgetsmsgroupslowersentityslensord(smsentity((s(build\bdist.win32\egg\turbogears\util.pysrepls! s&(\w+);?(sreplsressubshtmltext(shtmltextsrepl((s(build\bdist.win32\egg\turbogears\util.pys fixentitiess sEnumsget_package_names get_modelsload_project_configsurlsensure_sequenceshas_args DictWrappersDictObjsto_kwsfrom_kws adapt_calls call_on_stacks remove_keyss arg_indexs inject_args inject_argss bind_argssrecursive_updatescombine_contextssrequest_availablesflatten_sequences load_classsparse_http_accept_headers to_unicodesto_utf8sget_template_encoding_defaultsfind_precisionscopy_if_mutable(>sosssyssreshtmlentitydefssinspects getargspecs getargvaluess itertoolssizipsisliceschainsimapsoperatorsisSequenceTypes pkg_resourcess setuptoolsscherrypysrequeststurbogears.decorators decorators turbogearssconfigsEnumslistssetlikesget_project_metasget_project_configsNonesload_project_configsget_package_namesget_project_names get_modelsensure_sequencesto_kwsfrom_kws adapt_calls call_on_stacks arg_indexshas_args inject_args inject_argss inject_calls bind_argss remove_keyssrecursive_updatescombine_contextssrequest_availablesflatten_sequences load_classsdictsBunchsDictObjs DictWrappersparse_http_accept_headers to_unicodesto_utf8sget_template_encoding_defaultsfind_precisionsFalsescopy_if_mutables fixentitiess__all__(4srecursive_updates adapt_calls to_unicodeschainsizipsto_utf8sget_template_encoding_defaultsfind_precisionsto_kwscombine_contextssensure_sequencescopy_if_mutables__all__sres call_on_stacks inject_argsEnumsget_project_metasDictObjsisSequenceTypesfrom_kwsget_project_configs getargvaluess inject_callsparse_http_accept_headers remove_keyss getargspecsconfigs fixentitiessget_project_names inject_argss load_classshtmlentitydefss bind_argsssyss DictWrappersislicesget_package_nameshas_argsimaps decoratorsrequest_availablessetlikes arg_indexsrequests pkg_resourcess get_modelsload_project_configs setuptoolssflatten_sequencesossBunch((s(build\bdist.win32\egg\turbogears\util.pys?s^           %                     PKak6l w"w"turbogears/validators.py"""Convenient validators and converters for data coming in from the web. This module also imports everything from formencode.validators, so all common validation routines are available here.""" import pkg_resources #XXX Remove in 1.0.3 when everyone has already upgraded FE # so we don't need to keep this in sync with setup.py pkg_resources.require("FormEncode >= 0.7.1") import time import re from datetime import datetime import cgi # FieldStorageUploadConverter import warnings import simplejson from formencode.validators import * from formencode.compound import * from formencode.api import Invalid, NoDefault from formencode.schema import Schema from formencode import ForEach from turbogears.i18n import format from turbogears import util from turbojson import jsonify from formencode import validators # Needed to disambiguate the Number validator... import __builtin__ def _(s): return s # dummy Validator.gettextargs['domain'] = 'FormEncode' # FormEncode should call Tg's gettext \ # function with domain = "FormEncode" class TgFancyValidator(FancyValidator): gettextargs = {'domain':'TurboGears'} class Money(TgFancyValidator): messages = { 'badFormat': _('Invalid number format'), 'empty': _('Empty values not allowed'), } def __init__(self, allow_empty=None, *args, **kw): if allow_empty is not None: warnings.warn("Use not_empty instead of allow_empty", DeprecationWarning, 2) not_empty = not allow_empty kw["not_empty"] = not_empty super(Money, self).__init__(*args, **kw) def _to_python(self, value, state): """ parse a string and returns a float or integer """ try: return format.parse_decimal(value) except ValueError: raise Invalid(self.message('badFormat', state), value, state) def _from_python(self, value, state): """ returns a string using the correct grouping """ return format.format_currency(value) class Number(TgFancyValidator): def _to_python(self, value, state): """ parse a string and returns a float or integer """ if isinstance(value, basestring): try: value = format.parse_decimal(value) except ValueError: pass return validators.Number.to_python(value, state) def _from_python(self, value, state): """ returns a string using the correct grouping """ dec_places = util.find_precision(value) if dec_places > 0: return format.format_decimal(value, dec_places) else: return format.format_number(value) class DateTimeConverter(TgFancyValidator): """ Converts Python date and datetime objects into string representation and back. """ messages = { 'badFormat': _('Invalid datetime format'), 'empty': _('Empty values not allowed'), } def __init__(self, format = "%Y/%m/%d %H:%M", allow_empty = None, *args, **kwargs): if allow_empty is not None: warnings.warn("Use not_empty instead of allow_empty", DeprecationWarning, 2) not_empty = not allow_empty kwargs["not_empty"] = not_empty super(TgFancyValidator, self).__init__(*args, **kwargs) self.format = format def _to_python(self, value, state): """ parse a string and return a datetime object. """ if value and isinstance(value, datetime): return value else: try: tpl = time.strptime(value, self.format) except ValueError: raise Invalid(self.message('badFormat', state), value, state) # shoudn't use time.mktime() because it can give OverflowError, # depending on the date (e.g. pre 1970) and underlying C library return datetime(year=tpl.tm_year, month=tpl.tm_mon, day=tpl.tm_mday, hour=tpl.tm_hour, minute=tpl.tm_min, second=tpl.tm_sec) def _from_python(self, value, state): if not value: return None elif isinstance(value, datetime): # Python stdlib can only handle dates with year greater than 1900 if value.year <= 1900: return strftime_before1900(value, self.format) else: return value.strftime(self.format) else: return value # formencode trunk contains UnicodeString implementation # but it is different from ours and was broken at the time. # remove this impl. when formencode.validators.UnicodeString will be identical to ours. class UnicodeString(String): encoding = 'utf-8' messages = { 'badEncoding' : _("Invalid data or incorrect encoding"), } def __init__(self, inputEncoding=None, outputEncoding=None, **kw): String.__init__(self, **kw) self.inputEncoding = inputEncoding or self.encoding self.outputEncoding = outputEncoding or self.encoding def _to_python(self, value, state): if value: if isinstance(value, unicode): return value if hasattr(value, '__unicode__'): return unicode(value) try: return unicode(value, self.inputEncoding) except UnicodeDecodeError: raise Invalid(self.message('badEncoding', state), value, state) return u'' def _from_python(self, value, state): if hasattr(value, '__unicode__'): value = unicode(value) if isinstance(value, unicode): return value.encode(self.outputEncoding) return str(value) # another formencode workaround, # see #1464357 on FE bugtracker (http://tinyurl.com/lm9ae). # Custom version of FieldStorage validator that does not break FE schema validator. class FieldStorageUploadConverter(TgFancyValidator): def to_python(self, value, state=None): if isinstance(value, cgi.FieldStorage): if value.filename: return value raise Invalid('invalid', value, state) else: return value # For translated messages that are not wrapped in a Validator.messages # dictionary, we need to reinstate the Turbogears gettext function under # the name "_", with the "TurboGears" domain, so that the TurboGears.mo # file is selected. import turbogears.i18n _ = lambda s: turbogears.i18n.gettext(s, domain='TurboGears') class MultipleSelection(ForEach): if_missing = NoDefault if_empty = [] def to_python(self, value, state=None): try: return super(MultipleSelection, self).to_python(value, state) except Invalid: raise Invalid(_("Please select at least a value"), value, state) class Schema(Schema): """ A Schema validator """ filter_extra_fields = True allow_extra_fields = True if_key_missing = None def from_python(self,value,state=None): # The Schema shouldn't do any from_python conversion because # adjust_value already takes care of that for all childs. return value class JSONValidator(TgFancyValidator): def _from_python(self, value, state): return jsonify.encode(value) def _to_python(self, value, state): return simplejson.loads(value) _illegal_s = re.compile(r"((^|[^%])(%%)*%s)") def _findall(text, substr): # Also finds overlaps sites = [] i = 0 while 1: j = text.find(substr, i) if j == -1: break sites.append(j) i = j+1 return sites def strftime_before1900(dt, fmt): """ A strftime implementation that supports proleptic Gregorian dates before 1900. @see: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/306860 """ import datetime if _illegal_s.search(fmt): raise TypeError("This strftime implementation does not handle %s") if dt.year > 1900: return dt.strftime(fmt) year = dt.year # For every non-leap year century, advance by # 6 years to get into the 28-year repeat cycle delta = 2000 - year off = 6*(delta // 100 + delta // 400) year = year + off # Move to around the year 2000 year = year + ((2000 - year)//28)*28 timetuple = dt.timetuple() s1 = time.strftime(fmt, (year,) + timetuple[1:]) sites1 = _findall(s1, str(year)) s2 = time.strftime(fmt, (year+28,) + timetuple[1:]) sites2 = _findall(s2, str(year+28)) sites = [] for site in sites1: if site in sites2: sites.append(site) s = s1 syear = "%4d" % (dt.year,) for site in sites: s = s[:site] + syear + s[site+4:] return s PKh6T,g22turbogears/validators.pyc; FFc@sdZdkZeiddkZdkZdklZdkZdkZdkZdk Tdk Tdk l Z l Z dklZdklZdklZd klZd klZd klZdkZd Zd eid= 0.7.1(sdatetime(s*(sInvalids NoDefault(sSchema(sForEach(sformat(sutil(sjsonify(s validatorscCs|SdS(N(ss(ss((s.build\bdist.win32\egg\turbogears\validators.pys_ ss FormEncodesdomainsTgFancyValidatorcBstZhdds(s__name__s __module__s_smessagessNones__init__s _to_pythons _from_python(((s.build\bdist.win32\egg\turbogears\validators.pysMoney(s$  sNumbercBstZdZdZRS(NcCsTt|to-yti|}Wq=tj oq=Xntii||SdS(s/ parse a string and returns a float or integer N( s isinstancesvalues basestringsformats parse_decimals ValueErrors validatorssNumbers to_pythonsstate(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys _to_pythonEs cCsAti|}|djoti||Snti|SdS(s- returns a string using the correct grouping iN(sutilsfind_precisionsvalues dec_placessformatsformat_decimals format_number(sselfsvaluesstates dec_places((s.build\bdist.win32\egg\turbogears\validators.pys _from_pythonNs  (s__name__s __module__s _to_pythons _from_python(((s.build\bdist.win32\egg\turbogears\validators.pysNumberCs sDateTimeConvertercBsStZdZhded<dedssMultipleSelectioncBs tZeZgZedZRS(NcCsOytt|i||SWn+tj ottd||nXdS(NsPlease select at least a value(ssupersMultipleSelectionsselfs to_pythonsvaluesstatesInvalids_(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys to_pythons(s__name__s __module__s NoDefaults if_missingsif_emptysNones to_python(((s.build\bdist.win32\egg\turbogears\validators.pysMultipleSelectionssSchemacBs,tZdZeZeZeZedZRS(s A Schema validator cCs|SdS(N(svalue(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys from_pythons( s__name__s __module__s__doc__sTruesfilter_extra_fieldssallow_extra_fieldssNonesif_key_missings from_python(((s.build\bdist.win32\egg\turbogears\validators.pysSchemas s JSONValidatorcBstZdZdZRS(NcCsti|SdS(N(sjsonifysencodesvalue(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys _from_pythonscCsti|SdS(N(s simplejsonsloadssvalue(sselfsvaluesstate((s.build\bdist.win32\egg\turbogears\validators.pys _to_pythons(s__name__s __module__s _from_pythons _to_python(((s.build\bdist.win32\egg\turbogears\validators.pys JSONValidators s((^|[^%])(%%)*%s)cCs^g}d}xGno?|i||}|djoPn|i||d}qW|SdS(Niii(ssitessistextsfindssubstrsjsappend(stextssubstrsisjssites((s.build\bdist.win32\egg\turbogears\validators.pys_findalls  cCsdk}ti|otdn|idjo|i|Sn|i} d| }d|d|d}| |} | d| dd} |i } t i|| f| d }t |t| } t i|| df| d }t |t| d}g}x,| D]$} | |jo|i| qqW|} d |if}x(|D] } | | || | d } q]W| SdS( s A strftime implementation that supports proleptic Gregorian dates before 1900. @see: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/306860 Ns/This strftime implementation does not handle %siliiidiiis%4di(sdatetimes _illegal_sssearchsfmts TypeErrorsdtsyearsstrftimesdeltasoffs timetuplestimess1s_findallsstrssites1ss2ssites2ssitesssitesappendssssyear(sdtsfmtssyearsoffss2sdeltassitessdatetimessites2sss timetuplesyearssitessites1ss1((s.build\bdist.win32\egg\turbogears\validators.pysstrftime_before1900s6     ! (+s__doc__s pkg_resourcessrequirestimesresdatetimescgiswarningss simplejsonsformencode.validatorssformencode.compoundsformencode.apisInvalids NoDefaultsformencode.schemasSchemas formencodesForEachsturbogears.i18nsformats turbogearssutils turbojsonsjsonifys validatorss __builtin__s_s Validators gettextargssFancyValidatorsTgFancyValidatorsMoneysNumbersDateTimeConvertersStrings UnicodeStringsFieldStorageUploadConvertersMultipleSelections JSONValidatorscompiles _illegal_ss_findallsstrftime_before1900(s_findalls turbogearss __builtin__sdatetimes validatorssTgFancyValidatorsSchemasFieldStorageUploadConvertersformatsres _illegal_ssDateTimeConvertersNumberscgis NoDefaults simplejsonswarningssstrftime_before1900sMultipleSelectionsutilsInvalids_s JSONValidatorsMoneysjsonifys pkg_resourcessForEachstimes UnicodeString((s.build\bdist.win32\egg\turbogears\validators.pys?sD                 1     PK P6v?1,turbogears/__init__.py"TurboGears Front-to-Back Web Framework" import pkg_resources from turbogears import config from turbogears.controllers import expose, flash, validate, redirect, \ error_handler, exception_handler, url from turbogears import controllers, view, database, validators, command, \ i18n, widgets, startup, scheduler from turbogears.release import version as __version__, author as __author__, \ email as __email__, license as __license__, \ copyright as __copyright__ from turbogears.widgets import mochikit from turbogears.config import update_config from turbogears.paginate import paginate from turbogears.startup import start_server extensions = pkg_resources.iter_entry_points("turbogears.extensions") for entrypoint in extensions: ext = entrypoint.load() if hasattr(ext, "tgsymbols"): globals().update(ext.tgsymbols()) i18n.install() # adds _ (gettext) to builtins namespace __all__ = ["url", "expose", "redirect", "validate", "flash", "error_handler", "exception_handler", "view", "controllers", "update_config", "database", "command", "validators", "mochikit", "widgets", "config", "start_server", "scheduler"] PKh6ۊQs s turbogears/__init__.pyc; LEc@sdZdkZdklZdklZlZlZlZl Z l Z l Z dkl Z l Z lZlZlZlZlZlZlZdklZlZlZlZlZdk l!Z!dk"l#Z#dk$l%Z%d k&l'Z'ei(d Z)xDe)D]<Z*e*i+Z,e-e,d oe.i/e,i0qqWei1d d ddddddddddddddddgZ2dS(s&TurboGears Front-to-Back Web FrameworkN(sconfig(sexposesflashsvalidatesredirects error_handlersexception_handlersurl( s controllerssviewsdatabases validatorsscommandsi18nswidgetssstartups scheduler(sversionsauthorsemailslicenses copyright(smochikit(s update_config(spaginate(s start_serversturbogears.extensionss tgsymbolssurlsexposesredirectsvalidatesflashs error_handlersexception_handlersviews controllerss update_configsdatabasescommands validatorssmochikitswidgetssconfigs start_servers scheduler(3s__doc__s pkg_resourcess turbogearssconfigsturbogears.controllerssexposesflashsvalidatesredirects error_handlersexception_handlersurls controllerssviewsdatabases validatorsscommandsi18nswidgetssstartups schedulersturbogears.releasesversions __version__sauthors __author__semails __email__slicenses __license__s copyrights __copyright__sturbogears.widgetssmochikitsturbogears.configs update_configsturbogears.paginatespaginatesturbogears.startups start_serversiter_entry_pointss extensionss entrypointsloadsextshasattrsglobalssupdates tgsymbolssinstalls__all__(sexception_handlerspaginatesstartups __email__s error_handlers validatorssredirects__all__sflashs update_configs entrypointsmochikitswidgetss extensionss __version__sconfigs __license__sexposes __author__s schedulersi18nsvalidates __copyright__s start_serversdatabasesurls pkg_resourcess controllerssextscommandsview((s,build\bdist.win32\egg\turbogears\__init__.pys?s"  1=%      PKz644turbogears/command/base.py"Commands for the TurboGears command line tool." import optparse import sys import os import os.path import glob import pkg_resources import dispatch import configobj import turbogears from turbogears.util import get_model, load_project_config, \ get_project_config, get_package_name from turbogears.identity import SecureObject,from_any_host from turbogears import config, database sys.path.insert(0, os.getcwd()) no_connection_param = ["help", "list"] no_model_param = ["help"] def silent_os_remove(fname): """ Tries to remove file FNAME but mutes any error that may happen. Returns True if file was actually removed and false otherwise """ try: os.remove(fname) return True except os.error: pass return False class CommandWithDB(object): "Base class for commands that need to use the database" config = None def __init__(self, version): pass def find_config(self): """Chooses the config file, trying to guess whether this is a development or installed project.""" load_project_config(self.config) self.dburi = turbogears.config.get("sqlobject.dburi", None) if self.dburi and self.dburi.startswith("notrans_"): self.dburi = self.dburi[8:] [dispatch.generic()] def sacommand(command, args): pass [sacommand.when("command == 'help'")] def sahelp(command, args): print """TurboGears SQLAlchemy Helper help this display create create the database tables """ [sacommand.when("command == 'create'")] def sacreate(command, args): print "Creating tables at %s" % (config.get("sqlalchemy.dburi")) from turbogears.database import bind_meta_data, metadata bind_meta_data() get_model() metadata.create_all() class SQL(CommandWithDB): """ Wrapper command for sqlobject-admin, and provide some sqlalchemy support. This automatically supplies sqlobject-admin with the database that is found in the config file. Will also supply the model module as appropriate.""" desc = "Run the database provider manager" need_project = True def __init__(self, version): if len(sys.argv) == 1 or sys.argv[1][0] == "-": parser = optparse.OptionParser( usage="%prog sql [command]\n\n" \ "hint: '%prog sql help' will list the sqlobject " \ "commands", version="%prog " + version) parser.add_option("-c", "--config", help="config file", dest="config") (options, args) = parser.parse_args(sys.argv[1:3]) if not options.config: parser.error("Please provide a valid option or command.") self.config = options.config # get rid of our config option if not args: del sys.argv[1:3] else: del sys.argv[1] self.find_config() def run(self): "Executes the sqlobject-admin code." if not "--egg" in sys.argv and not turbogears.util.get_project_name(): print "this don't look like a turbogears project" return else: command = sys.argv[1] if config.get("sqlalchemy.dburi"): try: sacommand(command, sys.argv) except dispatch.interfaces.NoApplicableMethods: sacommand("help", []) return sqlobjcommand = command if sqlobjcommand not in no_connection_param: if not self.dburi: print """Database URI not specified in the config file (%s). Please be sure it's on the command line.""" % self.config else: print "Using database URI %s" % self.dburi sys.argv.insert(2, self.dburi) sys.argv.insert(2, "-c") if sqlobjcommand not in no_model_param: if not "--egg" in sys.argv: eggname = glob.glob("*.egg-info") if not eggname or not \ os.path.exists(os.path.join(eggname[0], "sqlobject.txt")): eggname = self.fix_egginfo(eggname) eggname = eggname[0].replace(".egg-info", "") if not "." in sys.path: sys.path.append(".") pkg_resources.working_set.add_entry(".") sys.argv.insert(2, eggname) sys.argv.insert(2, "--egg") from sqlobject.manager import command command.the_runner.run(sys.argv) def fix_egginfo(self, eggname): print """ This project seems incomplete. In order to use the sqlobject commands without manually specifying a model, there needs to be an egg-info directory with an appropriate sqlobject.txt file. I can fix this automatically. Would you like me to? """ dofix = raw_input("Enter [y] or n: ") if not dofix or dofix.lower()[0] == 'y': oldargs = sys.argv sys.argv = ["setup.py", "egg_info"] import imp imp.load_module("setup", *imp.find_module("setup", ["."])) sys.argv = oldargs import setuptools package = setuptools.find_packages()[0] eggname = glob.glob("*.egg-info") sqlobjectmeta = open(os.path.join(eggname[0], "sqlobject.txt"), "w") sqlobjectmeta.write("""db_module=%(package)s.model history_dir=$base/%(package)s/sqlobject-history """ % dict(package=package)) else: sys.exit(0) return eggname class Shell(CommandWithDB): """Convenient version of the Python interactive shell. This shell attempts to locate your configuration file and model module so that it can import everything from your model and make it available in the Python shell namespace.""" desc = "Start a Python prompt with your database available" need_project = True def run(self): "Run the shell" self.find_config() mod = get_model() if mod: locals = mod.__dict__ else: locals = dict(__name__="tg-admin") if config.get("sqlalchemy.dburi"): using_sqlalchemy = True database.bind_meta_data() locals.update(session=database.session, metadata=database.metadata) else: using_sqlalchemy = False try: # try to use IPython if possible import IPython class CustomIPShell(IPython.iplib.InteractiveShell): def raw_input(self, *args, **kw): try: return \ IPython.iplib.InteractiveShell.raw_input(self, *args, **kw) except EOFError: b = raw_input("Do you wish to commit your " "database changes? [yes]") if not b.startswith("n"): if using_sqlalchemy: self.push("session.flush()") else: self.push("hub.commit()") raise EOFError shell = IPython.Shell.IPShell(user_ns=locals, shell_class=CustomIPShell) shell.mainloop() except ImportError: import code class CustomShell(code.InteractiveConsole): def raw_input(self, *args, **kw): try: import readline except ImportError: pass try: return code.InteractiveConsole.raw_input(self, *args, **kw) except EOFError: b = raw_input("Do you wish to commit your " "database changes? [yes]") if not b.startswith("n"): if using_sqlalchemy: self.push("session.flush()") else: self.push("hub.commit()") raise EOFError shell = CustomShell(locals=locals) shell.interact() class ToolboxCommand(CommandWithDB): desc = "Launch the TurboGears Toolbox" def __init__(self, version): self.hostlist = ['127.0.0.1','::1'] parser = optparse.OptionParser( usage="%prog toolbox [options]", version="%prog " + version) parser.add_option("-n", "--no-open", help="don't open browser automatically", dest="noopen", action="store_true", default=False) parser.add_option("-c", "--add-client", help="allow the client ip address specified to connect to toolbox (Can be specified more than once)", dest="host", action="append", default=None) parser.add_option("-p", "--port", help="port to run the Toolbox on", dest="port", default=7654) parser.add_option("--conf", help="config file to use", dest="config", default=get_project_config()) (options, args) = parser.parse_args(sys.argv[1:]) self.port = int(options.port) self.noopen = options.noopen self.config = options.config if options.host: self.hostlist = self.hostlist + options.host turbogears.widgets.load_widgets() def openbrowser(self): import webbrowser webbrowser.open("http://localhost:%d" % self.port) def run(self): from turbogears.toolbox.catwalk import CatWalk import cherrypy from turbogears import toolbox # Make sure we have full configuration with every option # in it so other plugins or whatever find what they need # when starting even inside the toolblox if get_package_name(): conf = turbogears.config.config_obj( configfile=self.config, modulename="%s.config" % get_package_name()) else: conf = turbogears.config.config_obj(configfile=self.config) turbogears.config.update({'global': conf['global']}) root = SecureObject(toolbox.Toolbox(), from_any_host(self.hostlist), exclude=['noaccess']) cherrypy.tree.mount(root, "/") # amend some parameters since we are running from the command # line in order to change port, log methods... turbogears.config.update({"global" : { "server.socket_port" : self.port, "server.environment" : "development", "server.log_to_screen" : True, "autoreload.on" : False, "server.package" : "turbogears.toolbox", "log_debug_info_filter.on" : False, "identity.failure_url" : "/noaccess" }}) if not self.noopen: cherrypy.server.start_with_callback(self.openbrowser) else: cherrypy.server.start() commands = None def main(): "Main command runner. Manages the primary command line arguments." # add commands defined by entrypoints commands = {} for entrypoint in pkg_resources.iter_entry_points("turbogears.command"): command = entrypoint.load() commands[entrypoint.name] = (command.desc, entrypoint) def _help(): "Custom help text for tg-admin." print """ TurboGears %s command line interface Usage: %s [options] Options: -c CONFIG --config=CONFIG Config file to use -e EGG_SPEC --egg=EGG_SPEC Run command on given Egg Commands:""" % (turbogears.__version__, sys.argv[0]) longest = max([len(key) for key in commands.keys()]) format = "%" + str(longest) + "s %s" commandlist = commands.keys() commandlist.sort() for key in commandlist: print format % (key, commands[key][0]) parser = optparse.OptionParser() parser.allow_interspersed_args = False parser.add_option("-c", "--config", dest="config") parser.add_option("-e", "--egg", dest="egg") parser.print_help = _help (options, args) = parser.parse_args(sys.argv[1:]) # if not command is found display help if not args or not commands.has_key(args[0]): _help() sys.exit() commandname = args[0] # strip command and any global options from the sys.argv sys.argv = [sys.argv[0],] + args[1:] command = commands[commandname][1] command = command.load() if options.egg: egg = pkg_resources.get_distribution(options.egg) os.chdir(egg.location) if hasattr(command,"need_project"): if not turbogears.util.get_project_name(): print "This command needs to be run from inside a project directory" return elif not options.config and not os.path.isfile(get_project_config()): print """No default config file was found. If it has been renamed use: tg-admin --config= %s""" % commandname return command.config = options.config command = command(turbogears.__version__) command.run() __all__ = ["main"] PKf6׭YCCturbogears/command/base.pyc; "     / cCsdGHtd}| p|iddjoti}ddgt_dk}|id|iddg|t_dk }|i d}t i d }ttii|dd d }|id td |ntid|SdS(Ns This project seems incomplete. In order to use the sqlobject commands without manually specifying a model, there needs to be an egg-info directory with an appropriate sqlobject.txt file. I can fix this automatically. Would you like me to? sEnter [y] or n: isyssetup.pysegg_infossetups.s *.egg-infos sqlobject.txtswsLdb_module=%(package)s.model history_dir=$base/%(package)s/sqlobject-history spackage(s raw_inputsdofixslowerssyssargvsoldargssimps load_modules find_modules setuptoolss find_packagesspackagesglobseggnamesopensosspathsjoins sqlobjectmetaswritesdictsexit(sselfseggnamesimpspackages sqlobjectmetasdofixsoldargss setuptools((s0build\bdist.win32\egg\turbogears\command\base.pys fix_egginfos     " ( s__name__s __module__s__doc__sdescsTrues need_projects__init__sruns fix_egginfo(((s0build\bdist.win32\egg\turbogears\command\base.pysSQLHs   )sShellcBs#tZdZdZeZdZRS(sConvenient version of the Python interactive shell. This shell attempts to locate your configuration file and model module so that it can import everything from your model and make it available in the Python shell namespace.s2Start a Python prompt with your database availablec s+|it}|o |i}ntdd}tido0t t i |i dt idt intyTdkdiifdY}iid |d |}|iWnTtj oHdkd ifd Y}|d |}|inXdS(s Run the shells__name__stg-adminssqlalchemy.dburissessionsmetadataNs CustomIPShellcstZdZRS(Ncsyiii|||SWn_tj oStd}|i d o)o|i dqt|i dntnXdS(Ns2Do you wish to commit your database changes? [yes]snssession.flush()s hub.commit()( sIPythonsiplibsInteractiveShells raw_inputsselfsargsskwsEOFErrorsbs startswithsusing_sqlalchemyspush(sselfsargsskwsb(susing_sqlalchemysIPython(s0build\bdist.win32\egg\turbogears\command\base.pys raw_inputs (s__name__s __module__s raw_input((sIPythonsusing_sqlalchemy(s0build\bdist.win32\egg\turbogears\command\base.pys CustomIPShellssuser_nss shell_classs CustomShellcstZdZRS(Ncsy dk}Wntj onXyii|||SWn_tj oStd}|i d o)o|i dq|i dntnXdS(Ns2Do you wish to commit your database changes? [yes]snssession.flush()s hub.commit()( sreadlines ImportErrorscodesInteractiveConsoles raw_inputsselfsargsskwsEOFErrorsbs startswithsusing_sqlalchemyspush(sselfsargsskwsbsreadline(scodesusing_sqlalchemy(s0build\bdist.win32\egg\turbogears\command\base.pys raw_inputs  (s__name__s __module__s raw_input((scodesusing_sqlalchemy(s0build\bdist.win32\egg\turbogears\command\base.pys CustomShellsslocals(sselfs find_configs get_modelsmods__dict__slocalssdictsconfigsgetsTruesusing_sqlalchemysdatabasesbind_meta_datasupdatessessionsmetadatasFalsesIPythonsiplibsInteractiveShells CustomIPShellsShellsIPShellsshellsmainloops ImportErrorscodesInteractiveConsoles CustomShellsinteract( sselfscodes CustomIPShellsshellsusing_sqlalchemys CustomShellsIPythonslocalssmod((scodesusing_sqlalchemysIPythons0build\bdist.win32\egg\turbogears\command\base.pysruns.     "  (s__name__s __module__s__doc__sdescsTrues need_projectsrun(((s0build\bdist.win32\egg\turbogears\command\base.pysShells sToolboxCommandcBs)tZdZdZdZdZRS(NsLaunch the TurboGears Toolboxc Cs7ddg|_tidddd|}|iddd d d d d ddt|iddd dd dd ddt|iddd dd ddd|idd dd ddt |i t i d\}}t|i|_|i|_|i|_|io|i|i|_ntiidS(Ns 127.0.0.1s::1susages%prog toolbox [options]sversions%prog s-ns --no-openshelps don't open browser automaticallysdestsnoopensactions store_truesdefaults-cs --add-clients]allow the client ip address specified to connect to toolbox (Can be specified more than once)shostsappends-ps--portsport to run the Toolbox onsportis--confsconfig file to usesconfigi(sselfshostlistsoptparses OptionParsersversionsparsers add_optionsFalsesNonesget_project_configs parse_argsssyssargvsoptionssargssintsportsnoopensconfigshosts turbogearsswidgetss load_widgets(sselfsversionsargssparsersoptions((s0build\bdist.win32\egg\turbogears\command\base.pys__init__s(        cCs!dk}|id|idS(Nshttp://localhost:%d(s webbrowsersopensselfsport(sselfs webbrowser((s0build\bdist.win32\egg\turbogears\command\base.pys openbrowsers cCsSdkl}dk}dkl}to)tiid|iddt}ntiid|i}tii hd|d<t |i t |iddg}|ii|d tii hdhd |i<d d <d t<dt<dd<dt<dd<<|i o|ii|in|iidS(N(sCatWalk(stoolboxs configfiles modulenames %s.configsglobalsexcludesnoaccesss/sserver.socket_portsserver.environments developmentsserver.log_to_screens autoreload.onsserver.packagesturbogears.toolboxslog_debug_info_filter.onsidentity.failure_urls /noaccess(sturbogears.toolbox.catwalksCatWalkscherrypys turbogearsstoolboxsget_package_namesconfigs config_objsselfsconfsupdates SecureObjectsToolboxs from_any_hostshostlistsrootstreesmountsportsTruesFalsesnoopensserversstart_with_callbacks openbrowsersstart(sselfsCatWalkscherrypysconfstoolboxsroot((s0build\bdist.win32\egg\turbogears\command\base.pysruns    [ (s__name__s __module__sdescs__init__s openbrowsersrun(((s0build\bdist.win32\egg\turbogears\command\base.pysToolboxCommands  c shx9tidD](}|i}|i|f|i Options: -c CONFIG --config=CONFIG Config file to use -e EGG_SPEC --egg=EGG_SPEC Run command on given Egg Commands:is%ss %sN(s turbogearss __version__ssyssargvsmaxsappends_[1]scommandsskeysskeyslenslongestsstrsformats commandlistssort(s_[1]sformats commandlistslongestskey(scommands(s0build\bdist.win32\egg\turbogears\command\base.pys_helpNs 9  s-cs--configsdestsconfigs-es--eggseggiis need_projects<This command needs to be run from inside a project directoryNsYNo default config file was found. If it has been renamed use: tg-admin --config= %s('scommandss pkg_resourcessiter_entry_pointss entrypointsloadscommandsdescsnames_helpsoptparses OptionParsersparsersFalsesallow_interspersed_argss add_options print_helps parse_argsssyssargvsoptionssargsshas_keysexits commandnameseggsget_distributionsosschdirslocationshasattrs turbogearssutilsget_project_namesconfigspathsisfilesget_project_configs __version__srun( scommandssargssparsers commandnames_helpscommands entrypointseggsoptions((scommandss0build\bdist.win32\egg\turbogears\command\base.pysmainFsB        "   smain((s__doc__soptparsessyssossos.pathsglobs pkg_resourcessdispatchs configobjs turbogearssturbogears.utils get_modelsload_project_configsget_project_configsget_package_namesturbogears.identitys SecureObjects from_any_hostsconfigsdatabasespathsinsertsgetcwdsno_connection_paramsno_model_paramssilent_os_removesobjects CommandWithDBsgenerics sacommandswhenssahelpssacreatesSQLsShellsToolboxCommandsNonescommandssmains__all__(s configobjsToolboxCommands turbogearssdispatchsno_model_params CommandWithDBs__all__ssacreates sacommandssilent_os_removesget_project_configsmainsconfigssahelpsno_connection_paramsoptparsesglobssyssShells from_any_hostsget_package_names SecureObjectscommandssdatabases pkg_resourcess get_modelsload_project_configsSQLsos((s0build\bdist.win32\egg\turbogears\command\base.pys?s:                fLJ APKg6l٧L//turbogears/command/i18n.py# test-file: test_command_i18n.py """Command-line user interface for i18n administration.""" import re import glob import os import os.path import atexit import optparse import tempfile try: # try the python 2.5 way from xml.etree.cElementTree import ElementTree, XML except ImportError: # then try the python 2.4 way from elementtree.ElementTree import ElementTree import formencode import turbogears import turbogears.i18n from turbogears.toolbox.admi18n import pygettext, msgfmt, catalog from turbogears.toolbox.admi18n.catalog import quote, normalize from turbogears.command.base import silent_os_remove from turbogears.util import get_model, load_project_config, get_package_name from pkg_resources import resource_filename class ProgramError(StandardError): """Signals about a general application error.""" def copy_file(src, dest): if os.path.exists(dest): os.remove(dest) data = open(src, 'rb').read() open(dest, 'wb').write(data) class InternationalizationTool: "Manages i18n data via command-line interface." desc = "Manage i18n data" need_project = True config = False name = None package = None __version__ = "0.2" __author__ = "Max Ischenko, U{http://maxischenko.in.ua}" __email__ = "ischenko@gmail.com" __copyright__ = "Copyright 2005-2006 Max Ischenko" __license__ = "MIT" def __init__(self, version): parser = optparse.OptionParser(usage=""" %prog [options] Available commands: add Creates a message catalog for specified locale collect Scan source files to gather translatable strings in a .pot file merge Sync message catalog in different languages with .pot file compile Compile message catalog (.po -> .mo) clean Delete backups and compiled files """, version="%prog " + self.__version__) parser.add_option("-f", "--force", default=False, action="store_true", dest="force_ops", help="Force potentially damaging actions") parser.add_option("-a", "--ascii", default=False, action="store_true", dest="ascii_output", help="Escape non-ascii characters") parser.add_option("-K", "--no-kid-support", default=True, action="store_false", dest="kid_support", help="Do not extract messages from Kid templates") parser.add_option("", "--loose-kid-support", action="store_true", dest="loose_kid_support", help="Extract ALL messages from Kid templates" \ " (this is default)") parser.add_option("", "--strict-kid-support", action="store_false", dest="loose_kid_support", help="Extract only messages marked with lang attribute " \ "from Kid templates") parser.add_option("", "--src-dir", default=None, action="store", dest="source_dir", help="Directory that contains source files") parser.set_defaults(loose_kid_support=True) self.parser = parser def load_project_config(self): """Chooses the config file, trying to guess whether this is a development or installed project.""" # defaults self.locale_dir = 'locales' self.domain = 'messages' # check whether user specified custom settings if self.config: load_project_config() if turbogears.config.get("i18n.locale_dir"): self.locale_dir = turbogears.config.get("i18n.locale_dir") print 'Use %s as a locale directory' % self.locale_dir if turbogears.config.get('i18n.domain'): self.domain = turbogears.config.get("i18n.domain") print 'Use %s as a message domain' % self.domain if os.path.exists(self.locale_dir) and \ not os.path.isdir(self.locale_dir): raise ProgramError, \ ('%s is not a directory' % self.locale_dir) if not os.path.exists(self.locale_dir): os.makedirs(self.locale_dir) def parse_args(self): return self.parser.parse_args() def run(self): self.load_project_config() (options, args) = self.parse_args() if not args: self.parser.error("No command specified") self.options = options command, args = args[0], args[1:] if 'collect' == command: self.scan_source_files() elif 'add' == command: self.add_languages(args) elif 'compile' == command: self.compile_message_catalogs() elif 'merge' == command: self.merge_message_catalogs() elif 'clean' == command: self.clean_generated_files() else: self.parser.error("Command not recognized") def clean_generated_files(self): potfile = self.get_potfile_path() silent_os_remove(potfile.replace('.pot', '.bak')) for fname in self.list_message_catalogs(): silent_os_remove(fname.replace('.po', '.mo')) silent_os_remove(fname.replace('.po', '.back')) def merge_message_catalogs(self): potfile = self.get_potfile_path() catalogs = self.list_message_catalogs() catalog.merge(potfile, catalogs) def compile_message_catalogs(self): for fname in self.list_message_catalogs(): dest = fname.replace('.po','.mo') msgfmt.make(fname, dest) if os.path.exists(dest): print 'Compiled %s OK' % fname else: print 'Compilation of %s failed!' % fname def _copy_file_withcheck(self, sourcefile, targetfile): if not (os.path.exists(targetfile) and not self.options.force_ops): copy_file(sourcefile, targetfile) print 'Copy', sourcefile, 'to', targetfile else: print "File %s exists, use --force to override" % targetfile def _copy_moduletranslation(self, sourcefile, targetdir, language): modulefilename = os.path.basename(sourcefile) if os.path.exists(sourcefile): targetfile = os.path.join(targetdir, modulefilename) self._copy_file_withcheck(sourcefile, targetfile) else: print "%s translation for language '%s' does not exist (file searched '%s').\nPlease consider to contribute a translation." % (modulefilename, language, sourcefile) def add_languages(self, codes): potfile = self.get_potfile_path() if not os.path.isfile(potfile): print "Run 'collect' first to create", potfile return for code in codes: catalog_file = self.get_locale_catalog(code) langdir = os.path.dirname(catalog_file) if not os.path.exists(langdir): os.makedirs(langdir) sourcefile_fe = os.path.join(formencode.api.get_localedir(), code, \ "LC_MESSAGES","FormEncode.mo") self._copy_moduletranslation(sourcefile_fe, langdir, code) basedir_i18n_tg = resource_filename("turbogears.i18n", "data") sourcefile_tg = os.path.join(basedir_i18n_tg, code, \ "LC_MESSAGES", "TurboGears.mo") self._copy_moduletranslation(sourcefile_tg, langdir, code) self._copy_file_withcheck(potfile, catalog_file) def scan_source_files(self): source_files = [] kid_files = [] srcdir = self.options.source_dir or get_package_name() print 'Scanning source directory', srcdir for root, dirs, files in os.walk(srcdir): if os.path.basename(root).lower() in ('CVS', '.svn'): continue for fname in files: name,ext = os.path.splitext(fname) srcfile = os.path.join(root, fname) if ext == '.py': source_files.append(srcfile) elif ext == '.kid': kid_files.append(srcfile) #print 'add', srcfile else: pass # do nothing (tmp_handle, tmp_potfile) = tempfile.mkstemp('.pot', 'tmp', self.locale_dir) os.close(tmp_handle) potbasename = os.path.basename(tmp_potfile)[:-4] pygettext_options = ['-v', '-d', potbasename, \ '-p', os.path.dirname(tmp_potfile)] if self.options.ascii_output: pygettext_options.insert(0, '-E') pygettext.sys.argv = [''] + pygettext_options + source_files pygettext.main() if not os.path.exists(tmp_potfile): raise ProgramError, 'pygettext failed' atexit.register(silent_os_remove, tmp_potfile) if kid_files and self.options.kid_support: self.scan_kid_files(tmp_potfile, kid_files) potfile = self.get_potfile_path() if os.path.isfile(potfile): bakfile = potfile.replace('.pot', '.bak') silent_os_remove(bakfile) os.rename(potfile, bakfile) print 'Backup existing file to', bakfile os.rename(tmp_potfile, potfile) print 'Message templates written to', potfile def scan_kid_files(self, potfile, files): messages = [] tags_to_ignore = ['script', 'style'] keys = [] kid_expr_re = re.compile(r"_\(('(?P[^']*)'|\"(?P[^\"]*)\")\)") for fname in files: print 'working on', fname tree = None try: tree = ElementTree(file=fname).getroot() except Exception, e: print 'Skip %s: %s' % (fname, e) continue for el in tree.getiterator(): if self.options.loose_kid_support or el.get('lang', None): tag = re.sub('({[^}]+})?(\w+)', '\\2', el.tag) ents = [] if el.text: ents = [el.text.strip()] if el.attrib: ents.extend(el.attrib.values()) for k in ents: key = None s = kid_expr_re.search(k) if s: key = s.groupdict()['texta'] or s.groupdict()['textb'] if key and (key not in keys) and (tag not in tags_to_ignore): messages.append((tag, fname, key)) keys.append(key) fd = open(potfile, 'at+') for tag,fname,text in messages: text = normalize(text.encode('utf-8')) print >>fd, '#: %s:%s' % (fname, tag) print >>fd, 'msgid %s' % text print >>fd, 'msgstr ""' print >>fd, '' fd.close() def get_potfile_path(self): return os.path.join(self.locale_dir, '%s.pot' % self.domain) def get_locale_catalog(self, code): return os.path.join(self.locale_dir, code, 'LC_MESSAGES', '%s.po' % self.domain) def list_message_catalogs(self): files = [] for name in glob.glob(self.locale_dir + '/*'): if os.path.isdir(name): fname = os.path.join(name, 'LC_MESSAGES', '%s.po' % self.domain) if os.path.isfile(fname): files.append(fname) return files def fix_tzinfo(self, potfile): """ In certain enviroments, tz info as formatted by strftime() is not utf-8. E.g. Windows XP with russian MUL. This leads to later error when a program trying to read catalog. """ data = file(potfile, 'rb').read() def repl(m): "Remove tzinfo if it breaks encoding." tzinfo = m.group(2) try: tzinfo.decode('utf-8') except UnicodeDecodeError, e: return m.group(1) # cut tz info return m.group(0) # leave unchanged data = re.sub("(POT-Creation-Date: [\d-]+ [0-9:]+)\+([^\\\\]+)", repl, data) file(potfile, 'wb').write(data) def main(): tool = InternationalizationTool() tool.run() if __name__ == '__main__': main() PKf6Oi~>~>turbogears/command/i18n.pyc; MFc@sPdZdkZdkZdkZdkZdkZdkZdkZydkl Z l Z Wn e j odk l Z nXdk Z dkZdkZdklZlZlZdklZlZdklZdklZlZlZdklZd efd YZ d Z!d fd YZ"dZ#e$djo e#ndS(s4Command-line user interface for i18n administration.N(s ElementTreesXML(s ElementTree(s pygettextsmsgfmtscatalog(squotes normalize(ssilent_os_remove(s get_modelsload_project_configsget_package_name(sresource_filenames ProgramErrorcBstZdZRS(s*Signals about a general application error.(s__name__s __module__s__doc__(((s0build\bdist.win32\egg\turbogears\command\i18n.pys ProgramErrors cCsStii|oti|nt|di}t|di |dS(Nsrbswb( sosspathsexistssdestsremovesopenssrcsreadsdataswrite(ssrcsdestsdata((s0build\bdist.win32\egg\turbogears\command\i18n.pys copy_file ssInternationalizationToolcBstZdZdZeZeZeZ eZ dZ dZ dZ dZdZdZdZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZRS(s-Manages i18n data via command-line interface.sManage i18n datas0.2s)Max Ischenko, U{http://maxischenko.in.ua}sischenko@gmail.coms Copyright 2005-2006 Max IschenkosMITc Cs tidddd|i}|idddtdd d d d d |idddtdd d dd d|idddtddd dd d|idddd d dd d|iddddd dd d|idddtddd dd d |i dt||_dS(!Nsusagesq %prog [options] Available commands: add Creates a message catalog for specified locale collect Scan source files to gather translatable strings in a .pot file merge Sync message catalog in different languages with .pot file compile Compile message catalog (.po -> .mo) clean Delete backups and compiled files sversions%prog s-fs--forcesdefaultsactions store_truesdests force_opsshelps"Force potentially damaging actionss-as--asciis ascii_outputsEscape non-ascii characterss-Ks--no-kid-supports store_falses kid_supports*Do not extract messages from Kid templatesss--loose-kid-supportsloose_kid_supports9Extract ALL messages from Kid templates (this is default)s--strict-kid-supportsCExtract only messages marked with lang attribute from Kid templatess --src-dirsstores source_dirs$Directory that contains source files( soptparses OptionParsersselfs __version__sparsers add_optionsFalsesTruesNones set_defaults(sselfsversionsparser((s0build\bdist.win32\egg\turbogears\command\i18n.pys__init__5s,               cCsd|_d|_|io tntiido%tiid|_d|iGHntiido%tiid|_d|iGHntii |iotii |i ot d|intii |i oti |indS( sdChooses the config file, trying to guess whether this is a development or installed project.slocalessmessagessi18n.locale_dirsUse %s as a locale directorys i18n.domainsUse %s as a message domains%s is not a directoryN( sselfs locale_dirsdomainsconfigsload_project_configs turbogearssgetsosspathsexistssisdirs ProgramErrorsmakedirs(sself((s0build\bdist.win32\egg\turbogears\command\i18n.pysload_project_configWs    -cCs|iiSdS(N(sselfsparsers parse_args(sself((s0build\bdist.win32\egg\turbogears\command\i18n.pys parse_argsrscCs|i|i\}}| o|iidn||_|d|df\}}d|jo|ind|jo|i |nbd|jo|i nGd|jo|i n,d|jo|i n|iid dS( NsNo command specifiediiscollectsaddscompilesmergescleansCommand not recognized( sselfsload_project_configs parse_argssoptionssargssparserserrorscommandsscan_source_filess add_languagesscompile_message_catalogssmerge_message_catalogssclean_generated_files(sselfsargsscommandsoptions((s0build\bdist.win32\egg\turbogears\command\i18n.pysrunus"       cCsi|i}t|iddx@|iD]2}t|iddt|iddq/WdS(Ns.pots.baks.pos.mos.back(sselfsget_potfile_pathspotfilessilent_os_removesreplaceslist_message_catalogssfname(sselfspotfilesfname((s0build\bdist.win32\egg\turbogears\command\i18n.pysclean_generated_filess   cCs,|i}|i}ti||dS(N(sselfsget_potfile_pathspotfileslist_message_catalogsscatalogsscatalogsmerge(sselfspotfilescatalogs((s0build\bdist.win32\egg\turbogears\command\i18n.pysmerge_message_catalogss  cCsfx_|iD]Q}|idd}ti||tii |o d|GHq d|GHq WdS(Ns.pos.mosCompiled %s OKsCompilation of %s failed!( sselfslist_message_catalogssfnamesreplacesdestsmsgfmtsmakesosspathsexists(sselfsdestsfname((s0build\bdist.win32\egg\turbogears\command\i18n.pyscompile_message_catalogss  cCsQtii|o |ii o"t||dG|GdG|GHn d|GHdS(NsCopystos'File %s exists, use --force to override( sosspathsexistss targetfilesselfsoptionss force_opss copy_files sourcefile(sselfs sourcefiles targetfile((s0build\bdist.win32\egg\turbogears\command\i18n.pys_copy_file_withchecks" cCsdtii|}tii|o)tii||}|i ||nd|||fGHdS(Nsr%s translation for language '%s' does not exist (file searched '%s'). Please consider to contribute a translation.( sosspathsbasenames sourcefilesmodulefilenamesexistssjoins targetdirs targetfilesselfs_copy_file_withcheckslanguage(sselfs sourcefiles targetdirslanguagesmodulefilenames targetfile((s0build\bdist.win32\egg\turbogears\command\i18n.pys_copy_moduletranslations c Cs|i}tii| odG|GHdSnx|D]}|i|}tii |}tii | oti |ntiitii|dd}|i|||tdd}tii||dd}|i||||i||q8WdS(NsRun 'collect' first to creates LC_MESSAGESs FormEncode.mosturbogears.i18nsdatas TurboGears.mo(sselfsget_potfile_pathspotfilesosspathsisfilescodesscodesget_locale_catalogs catalog_filesdirnameslangdirsexistssmakedirssjoins formencodesapis get_localedirs sourcefile_fes_copy_moduletranslationsresource_filenamesbasedir_i18n_tgs sourcefile_tgs_copy_file_withcheck( sselfscodesspotfileslangdirs sourcefile_tgscodes sourcefile_fesbasedir_i18n_tgs catalog_file((s0build\bdist.win32\egg\turbogears\command\i18n.pys add_languagess$    cCsfg} g} |iipt} dG| GHxti| D]\}} }ti i |iddfjoq;nxw|D]o}ti i|\}}ti i||}|djo| i|q}|djo| i|q}q}Wq;Wtidd|i\}} ti|ti i | d }d d |d ti i| g}|iio|i d d ndg|| t!i"_#t!i$ti i%|  o t&dnt'i(t)| | o |ii*o|i+| | n|i,}ti i.|o9|i/dd}t)|ti1||dG|GHnti1| |dG|GHdS(NsScanning source directorysCVSs.svns.pys.kids.potstmpis-vs-ds-pis-Esspygettext faileds.baksBackup existing file tosMessage templates written to(2s source_filess kid_filessselfsoptionss source_dirsget_package_namessrcdirsosswalksrootsdirssfilesspathsbasenameslowersfnamessplitextsnamesextsjoinssrcfilesappendstempfilesmkstemps locale_dirs tmp_handles tmp_potfilescloses potbasenamesdirnamespygettext_optionss ascii_outputsinserts pygettextssyssargvsmainsexistss ProgramErrorsatexitsregisterssilent_os_removes kid_supportsscan_kid_filessget_potfile_pathspotfilesisfilesreplacesbakfilesrename(sselfsfilessroots tmp_handlespotfilessrcfilespygettext_optionssextsfnames source_filesssrcdirs kid_filessdirss tmp_potfilesnames potbasenamesbakfile((s0build\bdist.win32\egg\turbogears\command\i18n.pysscan_source_filessL %   !      cCsCg}ddg}g} tid} x|D]}dG|GHt}yt d|i }Wn't j o} d|| fGHq.nXx4|iD]&}|iip|idtotidd |i}g}|io|iig}n|io|i|iinx|D]}t} | i|}|o%|i d p|i d } n| o| | jo ||jo'|i!||| f| i!| q"q"WqqWq.Wt"|d } xb|D]Z\}}}t%|i&d }| d||fIJ| d|IJ| dIJ| dIJqW| i'dS(Nsscriptsstyles/_\(('(?P[^']*)'|\"(?P[^\"]*)\")\)s working onsfiles Skip %s: %sslangs({[^}]+})?(\w+)s\2stextastextbsat+sutf-8s#: %s:%ssmsgid %ss msgstr ""s((smessagesstags_to_ignoreskeyssrescompiles kid_expr_resfilessfnamesNonestrees ElementTreesgetroots Exceptionses getiteratorselsselfsoptionssloose_kid_supportsgetssubstagsentsstextsstripsattribsextendsvaluesskskeyssearchsss groupdictsappendsopenspotfilesfds normalizesencodesclose(sselfspotfilesfilesselsmessagessentsstagsfnamestextskeyssfdskeys kid_expr_reseskstreestags_to_ignoress((s0build\bdist.win32\egg\turbogears\command\i18n.pysscan_kid_filessP      %!! cCs!tii|id|iSdS(Ns%s.pot(sosspathsjoinsselfs locale_dirsdomain(sself((s0build\bdist.win32\egg\turbogears\command\i18n.pysget_potfile_pathscCs'tii|i|dd|iSdS(Ns LC_MESSAGESs%s.po(sosspathsjoinsselfs locale_dirscodesdomain(sselfscode((s0build\bdist.win32\egg\turbogears\command\i18n.pysget_locale_catalogscCsg}xxti|idD]`}tii|oGtii|dd|i }tii |o|i |q}qqW|SdS(Ns/*s LC_MESSAGESs%s.po( sfilessglobsselfs locale_dirsnamesosspathsisdirsjoinsdomainsfnamesisfilesappend(sselfsfilessnamesfname((s0build\bdist.win32\egg\turbogears\command\i18n.pyslist_message_catalogsscCsMt|di}d}tid||}t|di|dS(s In certain enviroments, tz info as formatted by strftime() is not utf-8. E.g. Windows XP with russian MUL. This leads to later error when a program trying to read catalog. srbcCsV|id}y|idWn"tj o}|idSnX|idSdS(s$Remove tzinfo if it breaks encoding.isutf-8iiN(smsgroupstzinfosdecodesUnicodeDecodeErrorse(smstzinfose((s0build\bdist.win32\egg\turbogears\command\i18n.pysrepl$ss-(POT-Creation-Date: [\d-]+ [0-9:]+)\+([^\\]+)swbN(sfilespotfilesreadsdatasreplsressubswrite(sselfspotfilesreplsdata((s0build\bdist.win32\egg\turbogears\command\i18n.pys fix_tzinfos  ( s__name__s __module__s__doc__sdescsTrues need_projectsFalsesconfigsNonesnamespackages __version__s __author__s __email__s __copyright__s __license__s__init__sload_project_configs parse_argssrunsclean_generated_filessmerge_message_catalogsscompile_message_catalogss_copy_file_withchecks_copy_moduletranslations add_languagessscan_source_filessscan_kid_filessget_potfile_pathsget_locale_catalogslist_message_catalogss fix_tzinfo(((s0build\bdist.win32\egg\turbogears\command\i18n.pysInternationalizationTool&s6  "        ( #   cCst}|idS(N(sInternationalizationToolstoolsrun(stool((s0build\bdist.win32\egg\turbogears\command\i18n.pysmain/s s__main__(%s__doc__sresglobsossos.pathsatexitsoptparsestempfilesxml.etree.cElementTrees ElementTreesXMLs ImportErrorselementtree.ElementTrees formencodes turbogearssturbogears.i18nsturbogears.toolbox.admi18ns pygettextsmsgfmtscatalogs"turbogears.toolbox.admi18n.catalogsquotes normalizesturbogears.command.basessilent_os_removesturbogears.utils get_modelsload_project_configsget_package_names pkg_resourcessresource_filenames StandardErrors ProgramErrors copy_filesInternationalizationToolsmains__name__(s turbogearssresource_filenamesatexits ElementTrees normalizes formencodestempfilesressilent_os_removes copy_filesmainsmsgfmtsXMLsoptparsesquotesglobscatalogsget_package_namesInternationalizationTools pygettexts ProgramErrors get_modelsload_project_configsos((s0build\bdist.win32\egg\turbogears\command\i18n.pys?s4               PKs6RPŜturbogears/command/info.py"Commands for listing TurboGears default and extension packages info" import pkg_resources entrypoints = {"tg-admin Commands" : "turbogears.command", "Template Engines" : "python.templating.engines", "Widget Packages" : "turbogears.widgets", "TurboGears Extensions" : "turbogears.extensions", "Identity Providers" : "turbogears.identity.provider", "Visit Managers" : "turbogears.visit.manager", "Toolbox Plugins" : "turbogears.toolboxcommand"} def retrieve_info(): """retrieve default and extension packages info""" # get default packages packages=['%s' % i for i in pkg_resources.require("Turbogears")] # get extension packages plugins = {} for name, pointname in entrypoints.items(): plugins[name] = ["%s (%s)" % (entrypoint.name, str(entrypoint.dist)) for entrypoint in pkg_resources.iter_entry_points(pointname) ] return packages, plugins class InfoCommand: """Shows version info for debuging""" desc = "Show version info" def __init__(self,*args, **kwargs): pass def run(self): print """TurboGears Complete Version Information TurboGears requires: """ packages, plugins = retrieve_info() for p in packages: print '*', p for name, pluginlist in plugins.items(): print "\n", name, "\n" for plugin in pluginlist: print '*', plugin PKf6Oɖ turbogears/command/info.pyc; *Fc@stdZdkZhdd<dd<dd<dd <d d <d d <ddTurboGears Complete Version Information TurboGears requires: s*s (s retrieve_infospackagesspluginsspsitemssnames pluginlistsplugin(sselfs pluginlistsnamespluginspspluginsspackages((s0build\bdist.win32\egg\turbogears\command\info.pysrun"s   (s__name__s __module__s__doc__sdescs__init__srun(((s0build\bdist.win32\egg\turbogears\command\info.pys InfoCommands  (s__doc__s pkg_resourcess entrypointss retrieve_infos InfoCommand(s entrypointss InfoCommands pkg_resourcess retrieve_info((s0build\bdist.win32\egg\turbogears\command\info.pys?s E PK6c\z++ turbogears/command/quickstart.py"""Quickstart command to generate a new project. Quickstart takes the files from turbogears.quickstart and processes them to produce a new, ready-to-run project.""" import pkg_resources import re import os import os.path import shutil import stat import optparse import sys import turbogears from paste.script import templates, create_distro beginning_letter = re.compile(r"^[^a-z]*") valid_only = re.compile(r"[^a-z0-9_]") class TGTemplate(templates.Template): def run(self, command, output_dirs, vars): vars.setdefault('einame', vars['project'].replace('-', '_')) vars.setdefault('turbogearsversion', pkg_resources.get_distribution('turbogears').version) vars.setdefault('sys_executable', os.path.normpath(sys.executable)) # define version-compatible decorator syntax if sys.version_info >= (2, 4): vars['b'] = '@' vars['e'] = '' else: vars['b'] = '[' vars['e'] = ']' super(TGTemplate, self).run(command, output_dirs, vars) class BaseTemplate(TGTemplate): egg_plugins = ["TurboGears"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "qsbase" ) summary = "tg base template" class TurbogearsTemplate(TGTemplate): required_templates = ["tgbase"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "quickstart") summary = "web framework" use_cheetah = True class TGBig(TGTemplate): required_templates = ["turbogears"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "quickstartbig") summary = "For more complex projects" def post(self, command, output_dir, vars): packagedir = os.path.join(output_dir, vars["package"]) controllersdir = os.path.join(packagedir, "controllers") controllersfile = os.path.join(packagedir, "controllers.py") rootfile = os.path.join(controllersdir, "root.py") if os.path.exists(controllersdir) and \ os.path.exists(controllersfile): controllerstext = open(controllersfile).read() roottext = open(rootfile).read() from paste.script.copydir import query_interactive thesame = controllerstext == roottext if not thesame: print "\nYou seem to be upgrading from a smaller quickstart." print "There is currently a controllers package and a" print "controllers module, which would get confusing." if controllerstext == roottext or \ query_interactive(controllersfile, rootfile, controllerstext, roottext, False): shutil.copyfile(controllersfile, rootfile) os.unlink(controllersfile) controllerspyc = controllersfile + "c" if os.path.exists(controllerspyc): os.unlink(controllerspyc) class TGWidgetTemplate(TGTemplate): required_templates = ["tgbase"] _template_dir = pkg_resources.resource_filename( "turbogears.qstemplates", "widget") summary = "TurboGears widget projects" class quickstart: "Implementation of quickstart." desc = "Create a new TurboGears project" name = None package = None templates = "turbogears" sqlalchemy = False elixir = False identity = False def __init__(self, version): parser = optparse.OptionParser( usage="%prog quickstart [options] [project name]", version="%prog " + version) parser.add_option("-p", "--package", help="package name for the code", dest="package") parser.add_option("--dry-run", help="dry run (don't actually do anything)", action="store_true", dest="dry_run") parser.add_option("-t", "--templates", help="user specific templates", dest="templates", default = self.templates) parser.add_option("-s", "--sqlalchemy", help="use SQLAlchemy instead of SQLObject", action="store_true", dest="sqlalchemy", default = False) parser.add_option("-e", "--elixir", help="use SQLAlchemy Elixir instead of SQLObject", action="store_true", dest="elixir", default = False) parser.add_option("-i", "--identity", help="provide Identity support", action="store_true", dest="identity", default = False) (options, args) = parser.parse_args() self.__dict__.update(options.__dict__) if args: self.name = args[0] self.turbogearsversion = version def run(self): "Quickstarts the new project." while not self.name: self.name = raw_input("Enter project name: ") while not self.package: package = self.name.lower() package = beginning_letter.sub("", package) package = valid_only.sub("", package) self.package = raw_input("Enter package name [%s]: " % package) if not self.package: self.package = package doidentity = self.identity while not doidentity: doidentity = raw_input("Do you need Identity " "(usernames/passwords) in this project? [no] ") doidentity = doidentity.lower() if not doidentity or doidentity.startswith('n'): self.identity="none" break if doidentity.startswith("y"): doidentity = True break print "Please enter y(es) or n(o)." doidentity = None if self.elixir is True: self.sqlalchemy = True if doidentity is True: if self.sqlalchemy: self.identity = "sqlalchemy" else: self.identity = "sqlobject" self.name = pkg_resources.safe_name(self.name) env = pkg_resources.Environment() if self.name.lower() in env: print "the name %s is already in use by" %self.name, for dist in env[self.name]: print dist return import imp try: if imp.find_module(self.package): print "the package name %s is already in use" % self.package return except ImportError: pass if os.path.exists(self.name): print("A directory called '%s' already exists. Exiting." % self.name) return command = create_distro.CreateDistroCommand("create") cmd_args = [] for template in self.templates.split(" "): cmd_args.append("--template=%s" % template) cmd_args.append(self.name) cmd_args.append("package=%s" % self.package) cmd_args.append("identity=%s" % self.identity) cmd_args.append("sqlalchemy=%s" % self.sqlalchemy) cmd_args.append("elixir=%s" % self.elixir) if self.dry_run: cmd_args.append("--simulate") cmd_args.append("-q") command.run(cmd_args) if not self.dry_run: os.chdir(self.name) startscript = "start-%s.py" % self.package if os.path.exists(startscript): oldmode = os.stat(startscript).st_mode os.chmod(startscript, oldmode | stat.S_IXUSR) sys.argv = ["setup.py", "egg_info"] import imp imp.load_module("setup", *imp.find_module("setup", ["."])) # dirty hack to allow "empty" dirs for base,path,files in os.walk("./"): for file in files: if file == "empty": os.remove(os.path.join(base, file)) class update: "Implementation of update" desc = "Update an existing turbogears project" need_project = True name = None templates = "turbogears" identity = False sqlalchemy = False def __init__(self, version): parser = optparse.OptionParser(usage="%prog quickstart [options]", version="%prog " + version) parser.add_option("-t", "--templates", help="user specific templates", dest="templates", default=self.templates) parser.add_option("-s", "--sqlalchemy", help="use SQLAlchemy instead of SQLObject", action="store_true", dest="sqlalchemy", default = False) parser.add_option("-i", "--identity", help="provide Identity support", action="store_true", dest="identity", default = False) (options, args) = parser.parse_args() self.__dict__.update(options.__dict__) self.turbogearsversion = version def run(self): "Updates an existing project" self.name = turbogears.util.get_project_name() self.package = turbogears.util.get_package_name() turbogears.command.base.load_project_config() if not self.sqlalchemy: if turbogears.config.get('sqlalchemy.dburi'): self.sqlalchemy = True if not self.identity: if turbogears.config.get('identity.on'): self.identity = True if self.identity: if self.sqlalchemy: self.identity = 'sqlalchemy' else: self.identity = 'sqlobject' else: self.identity = 'none' currentdir = os.path.basename(os.getcwd()) if not currentdir == self.name: print 'it looks like your project dir "%s" is named wrongly. Please rename it to "%s"' %(currentdir, self.name) return command = create_distro.CreateDistroCommand("create") cmd_args = [] cmd_args.append("-o../") for template in self.templates.split(" "): cmd_args.append("--template=%s" % template) cmd_args.append(self.name) cmd_args.append("package=%s" %self.package) cmd_args.append("identity=%s" %self.identity) cmd_args.append("sqlalchemy=%s" %self.sqlalchemy) command.run(cmd_args) startscript = "start-%s.py" % self.package if os.path.exists(startscript): oldmode = os.stat(startscript).st_mode os.chmod(startscript, oldmode | stat.S_IXUSR) sys.argv = ["setup.py", "egg_info"] import imp imp.load_module("setup", *imp.find_module("setup", ["."])) # dirty hack to allow "empty" dirs for base,path,files in os.walk("./"): for file in files: if file == "empty": os.remove(os.path.join(base, file)) PKf6{2{2!turbogears/command/quickstart.pyc; ⁉Fc@s#dZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk l Z l Z ei dZei dZde ifdYZdefdYZd efd YZd efd YZd efdYZdfdYZdfdYZdS(sQuickstart command to generate a new project. Quickstart takes the files from turbogears.quickstart and processes them to produce a new, ready-to-run project.N(s templatess create_distros^[^a-z]*s [^a-z0-9_]s TGTemplatecBstZdZRS(NcCs|id|didd|idtidi|idtiit i t i dd fjod |d tidddd|}|iddddd d |id dd d dd d|iddddd dd|i|iddddd dd ddt|iddddd dd ddt|iddddd dd d dt|i\}}|i i |i |o|d!|_ n||_dS("Nsusages)%prog quickstart [options] [project name]sversions%prog s-ps --packageshelpspackage name for the codesdestspackages --dry-runs$dry run (don't actually do anything)sactions store_truesdry_runs-ts --templatessuser specific templatess templatessdefaults-ss --sqlalchemys#use SQLAlchemy instead of SQLObjects sqlalchemys-es--elixirs*use SQLAlchemy Elixir instead of SQLObjectselixirs-is --identitysprovide Identity supportsidentityi(soptparses OptionParsersversionsparsers add_optionsselfs templatessFalses parse_argssoptionssargss__dict__supdatesnamesturbogearsversion(sselfsversionsargssparsersoptions((s6build\bdist.win32\egg\turbogears\command\quickstart.pys__init__gs2        cCsx|i otd|_qWxn|i ob|ii} tid| } tid| } td| |_|i o | |_q%q%W|i}xq| ohtd}|i}| p |i dod|_Pn|i do t }PndGHt }qW|i t jo t |_n|t jo$|io d |_q^d |_nti|i|_ti}|ii|jo0d |iGx"||iD]}|GHd SqWnd k}y+|i|iod |iGHd SnWntj onXtii|iod|iGHd Sntid} g}x+|iidD]}|i!d|qaW|i!|i|i!d|i|i!d|i|i!d|i|i!d|i |i"o|i!d|i!dn| i#||i" oti$|id|i} tii| o-ti&| i'} ti)| | t&i*Bnddgt+_,d k}|i-d|iddgxbti.dD]M\}} }x;|D]3}|djo ti2tii3||qqWqWnd S(sQuickstarts the new project.sEnter project name: ssEnter package name [%s]: sADo you need Identity (usernames/passwords) in this project? [no] snsnonesysPlease enter y(es) or n(o).s sqlalchemys sqlobjects the name %s is already in use byNs%the package name %s is already in uses0A directory called '%s' already exists. Exiting.screates s --template=%ss package=%ss identity=%ss sqlalchemy=%ss elixir=%ss --simulates-qs start-%s.pyssetup.pysegg_infossetups.s./sempty(4sselfsnames raw_inputspackageslowersbeginning_letterssubs valid_onlysidentitys doidentitys startswithsTruesNoneselixirs sqlalchemys pkg_resourcess safe_names Environmentsenvsdistsimps find_modules ImportErrorsosspathsexistss create_distrosCreateDistroCommandscommandscmd_argss templatesssplitstemplatesappendsdry_runsrunschdirs startscriptsstatsst_modesoldmodeschmodsS_IXUSRssyssargvs load_moduleswalksbasesfilessfilesremovesjoin(sselfsdistsfilescmd_argssimpsenvsfilesstemplatesbasespaths startscriptspackagesoldmodescommands doidentity((s6build\bdist.win32\egg\turbogears\command\quickstart.pysruns                            (s__name__s __module__s__doc__sdescsNonesnamespackages templatessFalses sqlalchemyselixirsidentitys__init__srun(((s6build\bdist.win32\egg\turbogears\command\quickstart.pys quickstart[s  supdatecBsDtZdZdZeZeZdZe Z e Z dZ dZ RS(sImplementation of updates%Update an existing turbogears projects turbogearsc Cstidddd|}|iddddd d d |i|id d ddddd dd t|iddddddd dd t|i\}}|i i |i ||_ dS(Nsusages%prog quickstart [options]sversions%prog s-ts --templatesshelpsuser specific templatessdests templatessdefaults-ss --sqlalchemys#use SQLAlchemy instead of SQLObjectsactions store_trues sqlalchemys-is --identitysprovide Identity supportsidentity(soptparses OptionParsersversionsparsers add_optionsselfs templatessFalses parse_argssoptionssargss__dict__supdatesturbogearsversion(sselfsversionsargssparsersoptions((s6build\bdist.win32\egg\turbogears\command\quickstart.pys__init__s   c Cstii|_tii|_tiii |i o$ti i do t |_ qcn|i o$ti i do t |_qn|io$|i o d|_qd|_n d|_tiiti}||ij od||ifGHdSntid}g}|id x+|iid D]} |id | qAW|i|i|id |i|id |i|id|i |i|d|i} tii| o-ti| i}ti!| |ti"Bnddgt#_$dk%}|i&d|i'ddgx^ti(dD]M\}} }x;|D]3}|djo ti+tii,||q_q_WqIWdS(sUpdates an existing projectssqlalchemy.dburis identity.ons sqlalchemys sqlobjectsnonesNit looks like your project dir "%s" is named wrongly. Please rename it to "%s"Nscreates-o../s s --template=%ss package=%ss identity=%ss sqlalchemy=%ss start-%s.pyssetup.pysegg_infossetups.s./sempty(-s turbogearssutilsget_project_namesselfsnamesget_package_namespackagescommandsbasesload_project_configs sqlalchemysconfigsgetsTruesidentitysosspathsbasenamesgetcwds currentdirs create_distrosCreateDistroCommandscmd_argssappends templatesssplitstemplatesruns startscriptsexistssstatsst_modesoldmodeschmodsS_IXUSRssyssargvsimps load_modules find_moduleswalksfilessfilesremovesjoin( sselfsfilesscmd_argss currentdirsimpsfilesoldmodesbasescommandstemplates startscriptspath((s6build\bdist.win32\egg\turbogears\command\quickstart.pysrunsX             (s__name__s __module__s__doc__sdescsTrues need_projectsNonesnames templatessFalsesidentitys sqlalchemys__init__srun(((s6build\bdist.win32\egg\turbogears\command\quickstart.pysupdates  (s__doc__s pkg_resourcessresossos.pathsshutilsstatsoptparsessyss turbogearss paste.scripts templatess create_distroscompilesbeginning_letters valid_onlysTemplates TGTemplates BaseTemplatesTurbogearsTemplatesTGBigsTGWidgetTemplates quickstartsupdate(s templatessbeginning_lettersstats BaseTemplates turbogearss TGTemplatesoptparses valid_onlys pkg_resourcessupdatessyssresTGBigsTGWidgetTemplates create_distrosTurbogearsTemplatesshutilsoss quickstart((s6build\bdist.win32\egg\turbogears\command\quickstart.pys?s&          PKs6>IIturbogears/command/__init__.py"TurboGears command line tools" from turbogears.command.base import mainPKf6turbogears/command/__init__.pyc; *Fc@sdZdklZdS(sTurboGears command line tools(smainN(s__doc__sturbogears.command.basesmain(smain((s4build\bdist.win32\egg\turbogears\command\__init__.pys?sPKP68turbogears/feed/atom0_3.kid id myfeed modified name email uri copyright tagline title id modified issued name email uri content summary copyright PKP6Tturbogears/feed/atom1_0.kid id myfeed updated name icon logo rights subtitle title id updated published name content summary rights PKP6$$[= = turbogears/feed/feed.pyimport time import cherrypy import turbogears from warnings import warn class FeedController(turbogears.controllers.Controller): """ Object for generating feeds in multiple formats """ def __init__(self, default="atom1.0"): self.default = default self.formats = ["atom1.0", "atom0.3", "rss2.0"] def date_to_3339(self, date): date = date.strftime("%Y-%m-%dT%H:%M:%SZ") return date def date_to_822(self, date): date = date.strftime("%a, %d %b %Y %H:%M:%S GMT") return date def depr_entrys(self, feed): if "entrys" in feed: warn("You should use 'entries' instead of 'entrys'", DeprecationWarning, 3) feed['entries'] = feed['entrys'] del feed['entrys'] def format_dates(self, feed, format): if format == 822: convert_date = self.date_to_822 else: convert_date = self.date_to_3339 if feed.has_key('updated'): feed["updated"] = convert_date(feed["updated"]) self.depr_entrys(feed) for entry in feed['entries']: if entry.has_key('updated'): entry["updated"] = convert_date(entry["updated"]) if entry.has_key('published'): entry["published"] = convert_date(entry["published"]) return feed def index(self): raise cherrypy.HTTPRedirect(turbogears.url("%s" % self.default)) index = turbogears.expose()(index) def atom1_0(self, **kwargs): feed = self.get_feed_data(**kwargs) self.format_dates(feed, 3339) feed["href"] = turbogears.url("/") + "atom1.0" self.depr_entrys(feed) return feed atom1_0 = turbogears.expose(template="turbogears.feed.atom1_0", format="xml", content_type="application/atom+xml")(atom1_0) def atom0_3(self, **kwargs): feed = self.get_feed_data(**kwargs) self.format_dates(feed, 3339) feed["href"] = turbogears.url("/") + "atom0.3" self.depr_entrys(feed) return feed atom0_3 = turbogears.expose(template="turbogears.feed.atom0_3", format="xml", content_type="application/atom+xml")(atom0_3) def rss2_0(self, **kwargs): feed = self.get_feed_data(**kwargs) self.format_dates(feed, 822) self.depr_entrys(feed) return feed rss2_0 = turbogears.expose(template="turbogears.feed.rss2_0", format="xml", content_type="application/rss+xml")(rss2_0) PKf6 t׸turbogears/feed/feed.pyc; IEc@sHdkZdkZdkZdklZdeiifdYZdS(N(swarnsFeedControllercBstZdZddZdZdZdZdZdZe i eZdZ e i d d d d d de Z dZ e i d dd d d de Z dZ e i d dd d d de Z RS(s1 Object for generating feeds in multiple formats satom1.0cCs||_dddg|_dS(Nsatom1.0satom0.3srss2.0(sdefaultsselfsformats(sselfsdefault((s-build\bdist.win32\egg\turbogears\feed\feed.pys__init__ s cCs|id}|SdS(Ns%Y-%m-%dT%H:%M:%SZ(sdatesstrftime(sselfsdate((s-build\bdist.win32\egg\turbogears\feed\feed.pys date_to_3339scCs|id}|SdS(Ns%a, %d %b %Y %H:%M:%S GMT(sdatesstrftime(sselfsdate((s-build\bdist.win32\egg\turbogears\feed\feed.pys date_to_822scCs:d|jo)tdtd|d|d<|d=ndS(Nsentryss,You should use 'entries' instead of 'entrys'isentries(sfeedswarnsDeprecationWarning(sselfsfeed((s-build\bdist.win32\egg\turbogears\feed\feed.pys depr_entryss   cCs|djo |i}n |i}|ido||d|d myfeed link description lastBuildDate lang generated title guid link pubDate description PKP6HHturbogears/feed/__init__.pyfrom turbogears.feed import feed FeedController = feed.FeedController PKf6z:turbogears/feed/__init__.pyc; IEc@sdklZeiZdS((sfeedN(sturbogears.feedsfeedsFeedController(sfeedsFeedController((s1build\bdist.win32\egg\turbogears\feed\__init__.pys?s PK6>XIHHturbogears/i18n/format.py""" Localized formatting functions. These functions extract localization data from config files located in the data/directory. """ from turbogears.i18n.utils import get_locale import pkg_resources import os import re def is_locale_format(locale): py_filename = pkg_resources.resource_filename( "turbogears.i18n.data", "%s.py" %locale) if os.path.exists(py_filename):return True pyc_filename = pkg_resources.resource_filename( "turbogears.i18n.data", "%s.pyc" %locale) if os.path.exists(pyc_filename):return True return False def get_locale_module(locale): try: # check if locale is supported. If not, check again with # first part of locale for example, "fi_FI" > "fi". if not is_locale_format(locale): locale = locale[:2] name = "turbogears.i18n.data.%s" %locale mod = __import__(name) parts = name.split(".")[1:] for p in parts:mod = getattr(mod, p) return mod except (ImportError, AttributeError): return None def get(locale, name, default=None): locale = get_locale(locale) mod = get_locale_module(locale) return getattr(mod, name, default) def get_countries(locale=None): """ Returns list of tuples, consisting of international country code and localized name, e.g. ('AU', 'Australia') """ countries = get(locale, "countries", {}).items() countries.sort(lambda x,y:cmp(x[1], y[1])) return countries def get_country(key, locale=None): """ Returns localized name of country based on international country code """ return get(locale, "countries", {})[key] def get_languages(locale=None): """ Returns list of tuples, with language code and localized name, e.g. ('en', 'English') """ languages = get(locale, "languages", {}).items() languages.sort(lambda x,y:cmp(x[1], y[1])) return languages def get_language(key, locale=None): """ Returns localized name of language based on language code """ return get(locale, "languages", {})[key] def get_month_names(locale=None): """Returns list of full month names, starting with January """ return get(locale, "months", []) def get_abbr_month_names(locale=None): """Returns list of abbreviated month names, starting with Jan """ return get(locale, "abbrMonths", []) def get_weekday_names(locale=None): """Returns list of full weekday names """ return get(locale, "days", []) def get_abbr_weekday_names(locale=None): """Returns list of abbreviated weekday names """ return get(locale, "abbrDays", get_weekday_names(locale)) def get_decimal_format(locale=None): return get(locale, "numericSymbols").get("decimal", ".") def get_group_format(locale=None): return get(locale, "numericSymbols").get("group", ",") def format_number(value, locale=None): """ Returns number formatted with grouping for thousands, e.g. 5000000>5,000,000 """ gf = get_group_format(locale) thou=re.compile(r"([0-9])([0-9][0-9][0-9]([%s]|$))" %gf).search v=str(value) mo=thou(v) while mo is not None: l = mo.start(0) v=v[:l+1]+gf+v[l+1:] mo=thou(v) return unicode(v) def format_decimal(value, num_places, locale=None): """ Returns number formatted with grouping for thousands and correct notation, e.g. 5000000.898>5,000,000.898 """ format = "%%.%df"%num_places str = format%value num, decimals = str.split(".") return unicode( format_number(num, locale) + get_decimal_format( locale) + decimals) def format_currency(value, locale=None): """ Returns formatted currency value """ return format_decimal(value, 2, locale) def parse_number(value, locale=None): """ Takes localized number string and returns a long integer (or throws ValueError if bad format) """ return long(value.replace(get_group_format(locale), "")) def parse_decimal(value, locale=None): """ Takes localized decimal string and returns a float (or throws ValueError if bad format) """ value = value.replace(get_group_format(locale), "") value = value.replace(get_decimal_format(locale), ".") return float(value) def get_date_format(format, locale=None): formats = get(locale, "dateFormats", {}) return formats.get(format, None) def format_date(dt, format="medium", locale=None, time_format="", date_format=""): """ Returns formatted date value. format can be "full", "long", "medium" or "short". To have complete control over formatting, use time_format and date_format parameters. @param dt: datetime @type dt: datetime.datetime @param format: format("full", "long", "medium", "short") @type format:string @param locale: XXX @type locale: XXX @param time_format: standard time formatting string, e.g. %H:%M @type time_format:string @param time_format: date formatting template string. Template variables include standard date formatting string like %d or %Y plus a few locale-specific names: %%(abbrmonthname)s, %%(dayname)s, %%(abbrmonthname)s and %%(monthname)s. @type time_format:string """ if date_format: pattern = date_format else: pattern = get_date_format(format, locale) if not pattern:return str(dt) month = dt.month-1 weekday = dt.weekday() # becase strftime() accepts str only but not unicode # we encode string to utf-8 and then decode back date_str = dt.strftime(pattern.encode('utf8')+time_format) return date_str.decode('utf8') % { 'monthname':get_month_names(locale)[month], 'abbrmonthname':get_abbr_month_names(locale)[month], 'dayname':get_weekday_names(locale)[weekday], 'abbrdayname':get_abbr_weekday_names(locale)[weekday], } PKh6r ''turbogears/i18n/format.pyc; hFc@s%dZdklZdkZdkZdkZdZdZedZ edZ edZ edZ ed Z ed Zed Zed Zed ZedZedZedZedZedZedZedZedZdedddZdS(s~ Localized formatting functions. These functions extract localization data from config files located in the data/directory. (s get_localeNcCsjtidd|}tii|otSntidd|}tii|otSnt SdS(Nsturbogears.i18n.datas%s.pys%s.pyc( s pkg_resourcessresource_filenameslocales py_filenamesosspathsexistssTrues pyc_filenamesFalse(slocales py_filenames pyc_filename((s/build\bdist.win32\egg\turbogears\i18n\format.pysis_locale_format scCsymt| o|d }nd|}t|}|idd}x|D]}t||}qOW|SWnt t fj o t SnXdS(Nisturbogears.i18n.data.%ss.i( sis_locale_formatslocalesnames __import__smodssplitspartsspsgetattrs ImportErrorsAttributeErrorsNone(slocalesnamespspartssmod((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_locale_modules  cCs,t|}t|}t|||SdS(N(s get_localeslocalesget_locale_modulesmodsgetattrsnamesdefault(slocalesnamesdefaultsmod((s/build\bdist.win32\egg\turbogears\i18n\format.pysget+s  cCs0t|dhi}|id|SdS(s{ Returns list of tuples, consisting of international country code and localized name, e.g. ('AU', 'Australia') s countriescCst|d|dS(Ni(scmpsxsy(sxsy((s/build\bdist.win32\egg\turbogears\i18n\format.pys9sN(sgetslocalesitemss countriesssort(slocales countries((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_countries2scCst|dh|SdS(sO Returns localized name of country based on international country code s countriesN(sgetslocaleskey(skeyslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_country<scCs0t|dhi}|id|SdS(sc Returns list of tuples, with language code and localized name, e.g. ('en', 'English') s languagescCst|d|dS(Ni(scmpsxsy(sxsy((s/build\bdist.win32\egg\turbogears\i18n\format.pysJsN(sgetslocalesitemss languagesssort(slocales languages((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_languagesCscCst|dh|SdS(sC Returns localized name of language based on language code s languagesN(sgetslocaleskey(skeyslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys get_languageMscCst|dgSdS(s<Returns list of full month names, starting with January smonthsN(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_month_namesTscCst|dgSdS(s?Returns list of abbreviated month names, starting with Jan s abbrMonthsN(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_abbr_month_namesYscCst|dgSdS(s'Returns list of full weekday names sdaysN(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_weekday_names_scCst|dt|SdS(s.Returns list of abbreviated weekday names sabbrDaysN(sgetslocalesget_weekday_names(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_abbr_weekday_namesescCst|diddSdS(NsnumericSymbolssdecimals.(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_decimal_formatkscCst|diddSdS(NsnumericSymbolssgroups,(sgetslocale(slocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_group_formatoscCst|}tid|i}t|}||}xK|t j o=|i d}||d |||d}||}q=Wt|SdS(sZ Returns number formatted with grouping for thousands, e.g. 5000000>5,000,000 s ([0-9])([0-9][0-9][0-9]([%s]|$))iiN(sget_group_formatslocalesgfsrescompilessearchsthousstrsvaluesvsmosNonesstartslsunicode(svalueslocalesmoslsgfsvsthou((s/build\bdist.win32\egg\turbogears\i18n\format.pys format_numberss    cCsNd|}||}|id\}}tt||t ||SdS(sx Returns number formatted with grouping for thousands and correct notation, e.g. 5000000.898>5,000,000.898 s%%.%dfs.N( s num_placessformatsvaluesstrssplitsnumsdecimalssunicodes format_numberslocalesget_decimal_format(svalues num_placesslocalesformatsnumsstrsdecimals((s/build\bdist.win32\egg\turbogears\i18n\format.pysformat_decimals   cCst|d|SdS(s* Returns formatted currency value iN(sformat_decimalsvalueslocale(svalueslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pysformat_currencyscCs t|it|dSdS(sk Takes localized number string and returns a long integer (or throws ValueError if bad format) sN(slongsvaluesreplacesget_group_formatslocale(svalueslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys parse_numberscCs>|it|d}|it|d}t|SdS(se Takes localized decimal string and returns a float (or throws ValueError if bad format) ss.N(svaluesreplacesget_group_formatslocalesget_decimal_formatsfloat(svalueslocale((s/build\bdist.win32\egg\turbogears\i18n\format.pys parse_decimalscCs&t|dh}|i|tSdS(Ns dateFormats(sgetslocalesformatssformatsNone(sformatslocalesformats((s/build\bdist.win32\egg\turbogears\i18n\format.pysget_date_formatssmediumsc Cs|o |}nt||}| ot|Sn|id}|i}|i |i d|}|i dhdt||<dt||<dt||<dt||<SdS(s Returns formatted date value. format can be "full", "long", "medium" or "short". To have complete control over formatting, use time_format and date_format parameters. @param dt: datetime @type dt: datetime.datetime @param format: format("full", "long", "medium", "short") @type format:string @param locale: XXX @type locale: XXX @param time_format: standard time formatting string, e.g. %H:%M @type time_format:string @param time_format: date formatting template string. Template variables include standard date formatting string like %d or %Y plus a few locale-specific names: %%(abbrmonthname)s, %%(dayname)s, %%(abbrmonthname)s and %%(monthname)s. @type time_format:string isutf8s monthnames abbrmonthnamesdaynames abbrdaynameN(s date_formatspatternsget_date_formatsformatslocalesstrsdtsmonthsweekdaysstrftimesencodes time_formatsdate_strsdecodesget_month_namessget_abbr_month_namessget_weekday_namessget_abbr_weekday_names( sdtsformatslocales time_formats date_formatspatternsmonthsweekdaysdate_str((s/build\bdist.win32\egg\turbogears\i18n\format.pys format_dates   (s__doc__sturbogears.i18n.utilss get_locales pkg_resourcessossresis_locale_formatsget_locale_modulesNonesgets get_countriess get_countrys get_languagess get_languagesget_month_namessget_abbr_month_namessget_weekday_namessget_abbr_weekday_namessget_decimal_formatsget_group_formats format_numbersformat_decimalsformat_currencys parse_numbers parse_decimalsget_date_formats format_date(s parse_decimals get_languagesget_month_namess pkg_resourcessget_weekday_namessget_group_formats get_countriess parse_numbersformat_currencysres get_localesget_decimal_formatsgetsget_abbr_month_namess format_numbersformat_decimals get_countrysis_locale_formats format_dates get_languagessget_date_formatsget_locale_modulesget_abbr_weekday_namessos((s/build\bdist.win32\egg\turbogears\i18n\format.pys?s0                  PK;6Vx turbogears/i18n/kidutils.py""" Functions for use with Kid template """ from kid.parser import START, TEXT, END import turbogears # use plain_gettext because Kid template's strings always evaluated immediately from turbogears.i18n.tg_gettext import plain_gettext as gettext from turbogears.i18n.utils import google_translate def translate(item, attr=None): """Translates the text of element plus the text of all child elements. If attr is present this is used to provide the locale name; if not then value provided by get_locale is used. For example:
this is a test testing
The string 'this is a test' is rendered by the locale provided by get_locale, the string 'testing' by the German locale. Possible use in Kid template:

Welcome!

@param item: element to be translated @type item: ElementTree element @param attr: attribute name used to store locale, if any """ if attr is None:attr = turbogears.config.get("i18n.templateLocaleAttribute", "lang") translate_all(item, item.get(attr), attr) return item def __translate_text(text, lang): prefix = '' postfix = '' if len(text) > 0 and text[0].isspace(): prefix = text[0] if len(text) > 1 and text[-1].isspace(): postfix = text[-1] return prefix + gettext(text.strip(), lang) + postfix def translate_all(tree, lang, attr, inroot=True): """Recursive function to translate all text in child elements @param tree: parent ElementTree element @param lang: language setting @param attr: attribute name used to store locale """ if tree.text: tree.text = __translate_text(tree.text, lang) if tree.tail and not inroot: # Don't translate tail of root. It is beyond the scope of the lang attr tree.tail = __translate_text(tree.tail, lang) for element in tree: # check overriding lang attribute if element.get(attr):lang = element.get(attr) translate_all(element, lang, attr, False) def i18n_filter(stream, template, locale=None): """Kid template filter which calls translates all elements matching language attribute(set in configuration as i18n.templateLocaleAttribute, default 'lang') """ lang_attr = turbogears.config.get("i18n.templateLocaleAttribute", "lang") locales=[locale] for ev, item in stream: if ev==START: l = item.get(lang_attr) if l: locale = l locales.append(l) elif ev==TEXT: prefix = '' postfix = '' if len(item) > 0 and item[0] == ' ': prefix =' ' if len(item) > 1 and item[-1] == ' ': postfix =' ' text = item.strip() if text: item = gettext(text, locale) item = prefix + item + postfix elif ev==END: if item.get(lang_attr): locales.pop() locale = locales[-1] yield (ev, item) PKh6B;;turbogears/i18n/kidutils.pyc; S-Fc@ssdZdklZlZlZdkZdklZdk l Z e dZ dZ edZe dZdS( s% Functions for use with Kid template (sSTARTsTEXTsENDN(s plain_gettext(sgoogle_translatecCsG|tjotiidd}nt||i|||SdS(s)Translates the text of element plus the text of all child elements. If attr is present this is used to provide the locale name; if not then value provided by get_locale is used. For example:
this is a test testing
The string 'this is a test' is rendered by the locale provided by get_locale, the string 'testing' by the German locale. Possible use in Kid template:

Welcome!

@param item: element to be translated @type item: ElementTree element @param attr: attribute name used to store locale, if any si18n.templateLocaleAttributeslangN(sattrsNones turbogearssconfigsgets translate_allsitem(sitemsattr((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys translate s  cCsd}d}t|djo|dio|d}nt|djo|dio|d}n|t|i||SdS(Nsiii(sprefixspostfixslenstextsisspacesgettextsstripslang(stextslangspostfixsprefix((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys__translate_text's$$cCs|iot|i||_n|io| ot|i||_nxD|D]<}|i|o|i|}nt |||t qUWdS(sRecursive function to translate all text in child elements @param tree: parent ElementTree element @param lang: language setting @param attr: attribute name used to store locale N( streestexts__translate_textslangstailsinrootselementsgetsattrs translate_allsFalse(streeslangsattrsinrootselement((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys translate_all.s c csgtiidd}|g} xB|D]:\}}|t jo1|i|}|o|}| i |qUn|t jod}d} t|djo|ddjo d}nt|djo|ddjo d} n|i}|o!t||}||| }qUn:|tjo,|i|o| i| d}qUn||fVq%WdS( sKid template filter which calls translates all elements matching language attribute(set in configuration as i18n.templateLocaleAttribute, default 'lang') si18n.templateLocaleAttributeslangsis iiN(s turbogearssconfigsgets lang_attrslocaleslocalessstreamsevsitemsSTARTslsappendsTEXTsprefixspostfixslensstripstextsgettextsENDspop( sstreamstemplateslocalesevslsitemsprefixstexts lang_attrspostfixslocales((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys i18n_filter?s4    $ $    (s__doc__s kid.parsersSTARTsTEXTsENDs turbogearssturbogears.i18n.tg_gettexts plain_gettextsgettextsturbogears.i18n.utilssgoogle_translatesNones translates__translate_textsTrues translate_alls i18n_filter( sENDs turbogearss translate_allsTEXTs i18n_filtersgettextsSTARTsgoogle_translates__translate_texts translate((s1build\bdist.win32\egg\turbogears\i18n\kidutils.pys?s      PK6;;turbogears/i18n/tg_gettext.pyfrom gettext import translation import turbogears from turbogears.i18n.utils import get_locale from turbojson.jsonify import jsonify from turbogears.util import get_package_name, request_available import os import sys import types _catalogs = {} def get_locale_dir(): localedir = turbogears.config.get("i18n.locale_dir") if not localedir: package = get_package_name() if package: localedir = os.path.join(os.path.dirname( sys.modules[package].__path__[0]), "locales") return localedir def is_locale_supported(locale, domain=None): """Checks if [domain].mo file exists for this language """ if not domain: domain = turbogears.config.get("i18n.domain", "messages") localedir = get_locale_dir() return localedir and os.path.exists(os.path.join( localedir, locale, "LC_MESSAGES", "%s.mo" % domain)) def get_catalog(locale, domain = None): """Return translations for given locale. """ if not domain: domain = turbogears.config.get("i18n.domain", "messages") catalog = _catalogs.get(domain) if not catalog: catalog = _catalogs[domain] = {} messages = catalog.get(locale) if not messages: localedir = get_locale_dir() messages = catalog[locale] = translation(domain=domain, localedir=localedir, languages=[locale]) return messages def plain_gettext(key, locale=None, domain=None): """Gets the gettext value for key.Added to builtins as '_'. Returns Unicode string. @param key: text to be translated @param locale: locale code to be used.If locale is None, gets the value provided by get_locale. """ gettext_func = turbogears.config.get("i18n.gettext", tg_gettext) return gettext_func(key, locale, domain) def tg_gettext(key, locale=None, domain=None): """Gets the gettext value for key.Added to builtins as '_'. Returns Unicode string. @param key: text to be translated @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if locale is None:locale = get_locale() if not is_locale_supported(locale):locale = locale[:2] if key == '': return '' # special case try: return get_catalog(locale, domain).ugettext(key) except KeyError: return key except IOError: return key def plain_ngettext(key1, key2, num, locale=None): """Translates two possible texts based on whether num is greater than 1 @param key1: text if num==1 @param key2: text if num!=1 @param num: a number @type num: integer @locale:locale code to be used. If locale is None, gets the value provided by get_locale. """ if num==1: return plain_gettext(key1, locale) else: return plain_gettext(key2, locale) class lazystring(object): """Has a number of lazily evaluated functions replicating a string. Just override the eval() method to produce the actual value. """ def __init__(self, func, *args, **kw): self.func = func self.args = args self.kw = kw def eval(self): return self.func(*self.args, **self.kw) def __unicode__(self): return unicode(self.eval()) def __str__(self): return str(self.eval()) def __mod__(self, other): return self.eval() % other def __cmp__(self, other): return cmp(self.eval(), other) def __eq__(self, other): return self.eval() == other def __deepcopy__(self, memo): return self def lazify(func): def newfunc(*args, **kw): lazystr = lazystring(func, *args, **kw) return lazystr return newfunc def jsonify_lazystring(obj): return unicode(obj) jsonify.when("isinstance(obj, lazystring)")(jsonify_lazystring) lazy_gettext = lazify(plain_gettext) lazy_ngettext = lazify(plain_ngettext) def gettext(key, locale=None, domain=None): """Gets the gettext value for key. Added to builtins as '_'. Returns Unicode string. @param key: text to be translated @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if request_available(): return plain_gettext(key, locale, domain) else: return lazy_gettext(key, locale, domain) def ngettext(key1, key2, num, locale=None): """Translates two possible texts based on whether num is greater than 1. @param key1: text if num==1 @param key2: text if num!=1 @param num: a number @type num: integer @param locale: locale code to be used. If locale is None, gets the value provided by get_locale. """ if request_available(): return plain_ngettext(key1, key2, num, locale) else: return lazy_ngettext(key1, key2, num, locale) def install(): """Adds the gettext function to __builtins__ as '_' """ __builtins__["_"] = gettext PKh6E(##turbogears/i18n/tg_gettext.pyc; VtFc@s*dklZdkZdklZdklZdklZl Z dk Z dk Z dk Z hZ dZedZedZeedZeed Zed Zd efd YZd ZdZeideeeZeeZeedZedZdZdS((s translationN(s get_locale(sjsonify(sget_package_namesrequest_availablecCsitiid}| oGt}|o3tiitii t i |i dd}qan|SdS(Nsi18n.locale_dirislocales( s turbogearssconfigsgets localedirsget_package_namespackagesosspathsjoinsdirnamessyssmoduless__path__(spackages localedir((s3build\bdist.win32\egg\turbogears\i18n\tg_gettext.pysget_locale_dir s &cCs^| otiidd}nt}|o)tiitii ||dd|SdS(s8Checks if [domain].mo file exists for this language s i18n.domainsmessagess LC_MESSAGESs%s.moN( sdomains turbogearssconfigsgetsget_locale_dirs localedirsosspathsexistssjoinslocale(slocalesdomains localedir((s3build\bdist.win32\egg\turbogears\i18n\tg_gettext.pysis_locale_supporteds  cCs| otiidd}nti|}| oh}t|(.*?)', re.DOTALL).search(s) data = match.groups()[0] return unicode(data, "utf-8").strip() def lang_in_gettext_format(lang): if len(lang) > 2: country = lang[3:].upper() lang = lang[:2] + "_" + country return lang def get_accept_languages(accept): """Returns a list of languages, by order of preference, based on an HTTP Accept-Language string.See W3C RFC 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) for specification. """ langs = parse_http_accept_header(accept) for index, lang in enumerate(langs): langs[index] = lang_in_gettext_format(lang) return langs def get_locale(locale=None): """ Returns user locale, using _get_locale or app-specific locale lookup function. """ if not locale: get_locale_f = config.get("i18n.get_locale", _get_locale) locale = get_locale_f() return locale def _get_locale(): """Default function for returning locale. First looks in session for locale key, then checks the HTTP Accept-Language header, and finally checks the config default locale setting. This can be replaced by your own function by setting cherrypy config setting i18n.get_locale to your function name. """ if not request_available(): return config.get("i18n.default_locale", "en") if config.get("session_filter.on", False): locale_key = config.get("i18n.session_key", "locale") locale = cherrypy.session.get(locale_key) if locale: return locale browser_accept_lang = _get_locale_from_accept_header() return browser_accept_lang or config.get("i18n.default_locale", "en") def _get_locale_from_accept_header(): """ Checks HTTP Accept-Language header to find preferred language if any. """ try: header = cherrypy.request.headers.get("Accept-Language") if header: accept_languages = get_accept_languages(header) if accept_languages: return accept_languages[0] except AttributeError: pass def set_session_locale(locale): """ Sets the i18n session locale. Raises an error if session support is not enabled. """ cherrypy.session[config.get("i18n.session_key", "locale")] = locale PKh63turbogears/i18n/utils.pyc; BEc@sdZdkZdkZdkZdkZdkZdklZdkl Z l Z dZ dZ dZ edZdZd Zd ZdS( s! General i18n utility functions. N(sconfig(sparse_http_accept_headersrequest_availablec Cstihdd||f<d|<dd<dd<}tid}|i dd ||i }|i }|itid tii|}|id }t|d iSdS( Nslangpairs%s|%sstextsiesUTF8soestranslate.google.comsPOSTs /translate_ts$isutf-8(surllibs urlencodes from_langsto_langstextsparamsshttplibsHTTPConnectionsconnsrequests getresponsesrespsreadsssclosesrescompilesDOTALLssearchsmatchsgroupssdatasunicodesstrip( s from_langsto_langstextsrespsssparamssmatchsdatasconn((s.build\bdist.win32\egg\turbogears\i18n\utils.pysgoogle_translate s=    cCsAt|djo&|di}|d d|}n|SdS(Niis_(slenslangsupperscountry(slangscountry((s.build\bdist.win32\egg\turbogears\i18n\utils.pyslang_in_gettext_formatscCsAt|}x*t|D]\}}t|||<d?d@<dAdB<dCdD<dEdF<dGdH<d?d@<dAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd>turbogears/i18n/data/ar_JO.py# Formatting configuration for locale ar_JO languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0623\u064a\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] abbrMonths=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0623\u064a\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6lF''turbogears/i18n/data/ar_JO.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd>turbogears/i18n/data/ar_LB.py# Formatting configuration for locale ar_LB languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] abbrMonths=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf66A''turbogears/i18n/data/ar_LB.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd)>turbogears/i18n/data/ar_QA.py# Formatting configuration for locale ar_QA languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf62''turbogears/i18n/data/ar_QA.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd)>turbogears/i18n/data/ar_SA.py# Formatting configuration for locale ar_SA languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6^PQ''turbogears/i18n/data/ar_SA.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd>turbogears/i18n/data/ar_SY.py# Formatting configuration for locale ar_SY languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] abbrMonths=[u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0634\u0628\u0627\u0637', u'\u0622\u0630\u0627\u0631', u'\u0646\u064a\u0633\u0627\u0646', u'\u0646\u0648\u0627\u0631', u'\u062d\u0632\u064a\u0631\u0627\u0646', u'\u062a\u0645\u0648\u0632', u'\u0622\u0628', u'\u0623\u064a\u0644\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644', u'\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a', u'\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6h~>''turbogears/i18n/data/ar_SY.pyc; AEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd#>turbogears/i18n/data/ar_TN.py# Formatting configuration for locale ar_TN languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf67''turbogears/i18n/data/ar_TN.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd)>turbogears/i18n/data/ar_YE.py# Formatting configuration for locale ar_YE languages={'el': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646\u064a\u0629', 'gu': u'\u0627\u0644\u063a\u0648\u062c\u0627\u0631\u0627\u062a\u064a\u0629', 'en': u'\u0627\u0644\u0627\u0646\u062c\u0644\u064a\u0632\u064a\u0629', 'zh': u'\u0627\u0644\u0635\u064a\u0646\u064a\u0629', 'sw': u'\u0627\u0644\u0633\u0648\u0627\u062d\u0644\u064a\u0629', 'ca': u'\u0627\u0644\u0643\u0627\u062a\u0627\u0644\u0648\u064a\u0646\u064a\u0629', 'it': u'\u0627\u0644\u0627\u064a\u0637\u0627\u0644\u064a\u0629', 'ar': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629', 'id': u'\u0627\u0644\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0629', 'es': u'\u0627\u0644\u0627\u0633\u0628\u0627\u0646\u064a\u0629', 'ru': u'\u0627\u0644\u0631\u0648\u0633\u064a\u0629', 'nl': u'\u0627\u0644\u0647\u0648\u0644\u0646\u062f\u064a\u0629', 'pt': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644\u064a\u0629', 'tr': u'\u0627\u0644\u062a\u0631\u0643\u064a\u0629', 'ne': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644\u064a\u0629', 'lt': u'\u0627\u0644\u0644\u062a\u0648\u0627\u0646\u064a\u0629', 'pa': u'\u0627\u0644\u0628\u0646\u062c\u0627\u0628\u064a\u0629', 'th': u'\u0627\u0644\u062a\u0627\u064a\u0644\u0627\u0646\u062f\u064a\u0629', 'vi': u'\u0627\u0644\u0641\u064a\u062a\u0646\u0627\u0645\u064a\u0629', 'ro': u'\u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064a\u0629', 'be': u'\u0627\u0644\u0628\u064a\u0644\u0648\u0631\u0648\u0633\u064a\u0629', 'fr': u'\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629', 'bg': u'\u0627\u0644\u0628\u0644\u063a\u0627\u0631\u064a\u0629', 'uk': u'\u0627\u0644\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0629', 'hr': u'\u0627\u0644\u0643\u0631\u0648\u0627\u062a\u064a\u0629', 'bn': u'\u0627\u0644\u0628\u0646\u063a\u0627\u0644\u064a\u0629', 'bo': u'\u0627\u0644\u062a\u0628\u062a\u064a\u0629', 'da': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0627\u0631\u0643\u064a\u0629', 'fa': u'\u0627\u0644\u0641\u0627\u0631\u0633\u064a\u0629', 'hi': u'\u0627\u0644\u0647\u0646\u062f\u064a\u0629', 'dz': u'\u0627\u0644\u0632\u0648\u0646\u062e\u0627\u064a\u0629', 'dv': u'\u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641\u064a\u0629', 'fi': u'\u0627\u0644\u0641\u0646\u0644\u0646\u062f\u064a\u0629', 'ja': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646\u064a\u0629', 'he': u'\u0627\u0644\u0639\u0628\u0631\u064a\u0629', 'tl': u'\u0627\u0644\u062a\u0627\u063a\u0627\u0644\u0648\u063a\u064a\u0629', 'sr': u'\u0627\u0644\u0635\u0631\u0628\u064a\u0629', 'sq': u'\u0627\u0644\u0627\u0644\u0628\u0627\u0646\u064a\u0629', 'mn': u'\u0627\u0644\u0645\u0646\u063a\u0648\u0644\u064a\u0629', 'ko': u'\u0627\u0644\u0643\u0648\u0631\u064a\u0629', 'km': u'\u0627\u0644\u062e\u0645\u064a\u0631\u064a\u0629', 'ur': u'\u0627\u0644\u0627\u0631\u062f\u064a\u0629', 'de': u'\u0627\u0644\u0627\u0644\u0645\u0627\u0646\u064a\u0629', 'ms': u'\u0644\u063a\u0629 \u0627\u0644\u0645\u0644\u0627\u064a\u0648', 'ug': u'\u0627\u0644\u0627\u063a\u0648\u0631\u064a\u0629', 'my': u'\u0627\u0644\u0628\u0648\u0631\u0645\u064a\u0629'} countries={'BD': u'\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634', 'BE': u'\u0628\u0644\u062c\u064a\u0643\u0627', 'BF': u'\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648', 'BG': u'\u0628\u0644\u063a\u0627\u0631\u064a\u0627', 'BA': u'\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643', 'BB': u'\u0628\u0631\u0628\u0627\u062f\u0648\u0633', 'BN': u'\u0628\u0631\u0648\u0646\u0627\u064a', 'BO': u'\u0628\u0648\u0644\u064a\u0641\u064a\u0627', 'BH': u'\u0627\u0644\u0628\u062d\u0631\u064a\u0646', 'BI': u'\u0628\u0648\u0631\u0648\u0646\u062f\u064a', 'BJ': u'\u0628\u0646\u064a\u0646', 'BT': u'\u0628\u0648\u062a\u0627\u0646', 'JM': u'\u062c\u0627\u0645\u0627\u064a\u0643\u0627', 'BW': u'\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627', 'WS': u'\u0633\u0627\u0645\u0648\u0627', 'BR': u'\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644', 'BS': u'\u0627\u0644\u0628\u0647\u0627\u0645\u0627', 'BY': u'\u0631\u0648\u0633\u064a\u0627 \u0627\u0644\u0628\u064a\u0636\u0627\u0621', 'BZ': u'\u0628\u0644\u064a\u0632', 'RU': u'\u0631\u0648\u0633\u064a\u0627', 'RW': u'\u0631\u0648\u0627\u0646\u062f\u0627', 'TM': u'\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646', 'TJ': u'\u062a\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646', 'RO': u'\u0631\u0648\u0645\u0627\u0646\u064a\u0627', 'GW': u'\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648', 'GT': u'\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627', 'GR': u'\u0627\u0644\u064a\u0648\u0646\u0627\u0646', 'GQ': u'\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629', 'JP': u'\u0627\u0644\u064a\u0627\u0628\u0627\u0646', 'GY': u'\u063a\u0648\u0627\u064a\u0627\u0646\u0627', 'GE': u'\u062c\u0648\u0631\u062c\u064a\u0627', 'GD': u'\u063a\u0631\u064a\u0646\u0627\u062f\u0627', 'GB': u'\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'GA': u'\u063a\u0627\u0628\u0648\u0646', 'SV': u'\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631', 'GN': u'\u063a\u064a\u0646\u064a\u0627', 'GM': u'\u063a\u0627\u0645\u0628\u064a\u0627', 'GH': u'\u063a\u0627\u0646\u0627', 'OM': u'\u0639\u0645\u0627\u0646', 'TN': u'\u062a\u0648\u0646\u0633', 'JO': u'\u0627\u0644\u0627\u0631\u062f\u0646', 'HR': u'\u0643\u0631\u0648\u0627\u062a\u064a\u0627', 'HT': u'\u0647\u0627\u064a\u062a\u064a', 'HU': u'\u0647\u0646\u063a\u0627\u0631\u064a\u0627', 'HN': u'\u0647\u0646\u062f\u0648\u0631\u0627\u0633', 'VE': u'\u0641\u0646\u0632\u0648\u064a\u0644\u0627', 'PW': u'\u0628\u0627\u0644\u0627\u0648', 'PT': u'\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644', 'PY': u'\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a', 'IQ': u'\u0627\u0644\u0639\u0631\u0627\u0642', 'PA': u'\u0628\u0646\u0645\u0627', 'PG': u'\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'PE': u'\u0628\u064a\u0631\u0648', 'PK': u'\u0627\u0644\u0628\u0627\u0643\u0633\u062a\u0627\u0646', 'PH': u'\u0627\u0644\u0641\u064a\u0644\u0628\u064a\u0646', 'PL': u'\u0628\u0648\u0644\u0646\u062f\u0627', 'ZM': u'\u0632\u0627\u0645\u0628\u064a\u0627', 'EH': u'\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629', 'EE': u'\u0627\u0633\u062a\u0648\u0646\u064a\u0627', 'EG': u'\u0645\u0635\u0631', 'ZA': u'\u062c\u0646\u0648\u0628 \u0627\u0641\u0631\u064a\u0642\u064a\u0627', 'EC': u'\u0627\u0643\u0648\u0627\u062f\u0648\u0631', 'VN': u'\u0641\u064a\u062a\u0646\u0627\u0645', 'SB': u'\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646', 'ET': u'\u0627\u062b\u064a\u0648\u0628\u064a\u0627', 'SO': u'\u0627\u0644\u0635\u0648\u0645\u0627\u0644', 'ZW': u'\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a', 'ES': u'\u0627\u0633\u0628\u0627\u0646\u064a\u0627', 'ER': u'\u0627\u0631\u062a\u064a\u0631\u064a\u0627', 'MD': u'\u0645\u0648\u0644\u062f\u0648\u0641\u0627', 'MG': u'\u0645\u062f\u063a\u0634\u0642\u0631', 'MA': u'\u0627\u0644\u0645\u063a\u0631\u0628', 'MC': u'\u0645\u0648\u0646\u0627\u0643\u0648', 'UZ': u'\u0627\u0632\u0628\u0643\u0633\u062a\u0627\u0646', 'MM': u'\u0645\u064a\u0627\u0646\u0645\u0627\u0631', 'ML': u'\u0645\u0627\u0644\u064a', 'MN': u'\u0645\u0646\u063a\u0648\u0644\u064a\u0627', 'MH': u'\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u0634\u0627\u0644', 'MK': u'\u0645\u0642\u062f\u0648\u0646\u064a\u0627', 'MU': u'\u0645\u0648\u0631\u064a\u0634\u0648\u0633', 'MT': u'\u0645\u0627\u0644\u0637\u0629', 'MW': u'\u0645\u0644\u0627\u0648\u064a', 'MV': u'\u0645\u0627\u0644\u062f\u064a\u0641', 'MR': u'\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627', 'UG': u'\u0627\u0648\u063a\u0646\u062f\u0627', 'MY': u'\u0645\u0627\u0644\u064a\u0632\u064a\u0627', 'MX': u'\u0627\u0644\u0645\u0643\u0633\u064a\u0643', 'IL': u'\u0627\u0633\u0631\u0627\u0626\u064a\u0644', 'FR': u'\u0641\u0631\u0646\u0633\u0627', 'FI': u'\u0641\u0646\u0644\u0646\u062f\u0627', 'FJ': u'\u0641\u064a\u062c\u064a', 'FM': u'\u0645\u064a\u0643\u0631\u0648\u0646\u064a\u0632\u064a\u0627', 'NI': u'\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627', 'NL': u'\u0647\u0648\u0644\u0646\u062f\u0627', 'NO': u'\u0627\u0644\u0646\u0631\u0648\u064a\u062c', 'NA': u'\u0646\u0627\u0645\u064a\u0628\u064a\u0627', 'VU': u'\u0641\u0627\u0646\u0648\u0622\u062a\u0648', 'NE': u'\u0627\u0644\u0646\u064a\u062c\u0631', 'NG': u'\u0646\u064a\u062c\u064a\u0631\u064a\u0627', 'NZ': u'\u0632\u064a\u0644\u0646\u062f\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629', 'NP': u'\u0627\u0644\u0646\u064a\u0628\u0627\u0644', 'NR': u'\u0646\u0627\u0648\u0631\u0648', 'CH': u'\u0633\u0648\u064a\u0633\u0631\u0627', 'CO': u'\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627', 'CN': u'\u0627\u0644\u0635\u064a\u0646', 'CM': u'\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646', 'CL': u'\u062a\u0634\u064a\u0644\u064a', 'CA': u'\u0643\u0646\u062f\u0627', 'CG': u'\u0627\u0644\u0643\u0648\u0646\u063a\u0648', 'CF': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649', 'CZ': u'\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062a\u0634\u064a\u0643', 'CY': u'\u0642\u0628\u0631\u0635', 'CR': u'\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627', 'CV': u'\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0627\u062e\u0636\u0631', 'CU': u'\u0643\u0648\u0628\u0627', 'SZ': u'\u0633\u0648\u0627\u0632\u064a\u0644\u0627\u0646\u062f', 'SY': u'\u0633\u0648\u0631\u064a\u0629', 'KG': u'\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646', 'KE': u'\u0643\u064a\u0646\u064a\u0627', 'SR': u'\u0633\u0648\u0631\u064a\u0646\u0627\u0645', 'KI': u'\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a', 'KH': u'\u0643\u0645\u0628\u0648\u062f\u064a\u0627', 'KN': u'\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633', 'KM': u'\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631', 'ST': u'\u0633\u0627\u0646 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a', 'SK': u'\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627', 'KR': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629', 'SI': u'\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627', 'KP': u'\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629', 'KW': u'\u0627\u0644\u0643\u0648\u064a\u062a', 'SN': u'\u0627\u0644\u0633\u0646\u063a\u0627\u0644', 'SM': u'\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648', 'SL': u'\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646', 'SC': u'\u0633\u064a\u0634\u0644', 'KZ': u'\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646', 'SA': u'\u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629', 'SG': u'\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629', 'SE': u'\u0627\u0644\u0633\u0648\u064a\u062f', 'SD': u'\u0627\u0644\u0633\u0648\u062f\u0627\u0646', 'DO': u'\u0627\u0644\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u064a\u0629', 'DM': u'\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627', 'DJ': u'\u062c\u064a\u0628\u0648\u062a\u064a', 'DK': u'\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643', 'DE': u'\u0627\u0644\u0645\u0627\u0646\u064a\u0627', 'YE': u'\u0627\u0644\u064a\u0645\u0646', 'DZ': u'\u0627\u0644\u062c\u0632\u0627\u0626\u0631', 'US': u'\u0627\u0644\u0627\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629 \u0627\u0644\u0627\u0645\u0631\u064a\u0643\u064a\u0629', 'UY': u'\u0627\u0631\u0648\u063a\u0648\u0627\u064a', 'LB': u'\u0644\u0628\u0646\u0627\u0646', 'LC': u'\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627', 'LA': u'\u0644\u0627\u0648\u0633', 'TV': u'\u062a\u0648\u0641\u0627\u0644\u0648', 'TW': u'\u062a\u0627\u064a\u0648\u0627\u0646', 'TT': u'\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648', 'TR': u'\u062a\u0631\u0643\u064a\u0627', 'LK': u'\u0633\u0631\u064a \u0644\u0627\u0646\u0643\u0627', 'LI': u'\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646', 'LV': u'\u0644\u0627\u062a\u0641\u064a\u0627', 'TO': u'\u062a\u0648\u0646\u063a\u0627', 'LT': u'\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627', 'LU': u'\u0644\u0648\u0643\u0633\u0648\u0645\u0628\u0631\u063a', 'LR': u'\u0644\u064a\u0628\u064a\u0631\u064a\u0627', 'LS': u'\u0644\u064a\u0633\u0648\u062a\u0648', 'TH': u'\u062a\u0627\u064a\u0644\u0646\u062f', 'TG': u'\u062a\u0648\u063a\u0648', 'TD': u'\u062a\u0634\u0627\u062f', 'LY': u'\u0644\u064a\u0628\u064a\u0627', 'VA': u'\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646', 'VC': u'\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646', 'AE': u'\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629', 'AD': u'\u0627\u0646\u062f\u0648\u0631\u0627', 'AG': u'\u0627\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627', 'AF': u'\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646', 'AI': u'\u0627\u0644\u0628\u0627\u0646\u064a\u0627', 'IS': u'\u0627\u064a\u0633\u0644\u0646\u062f\u0627', 'IR': u'\u0627\u064a\u0631\u0627\u0646', 'AM': u'\u0627\u0631\u0645\u064a\u0646\u064a\u0627', 'IT': u'\u0627\u064a\u0637\u0627\u0644\u064a\u0627', 'AO': u'\u0627\u0646\u063a\u0648\u0644\u0627', 'AR': u'\u0627\u0644\u0627\u0631\u062c\u0646\u062a\u064a\u0646', 'AU': u'\u0627\u0633\u062a\u0631\u0627\u0644\u064a\u0627', 'AT': u'\u0627\u0644\u0646\u0645\u0633\u0627', 'IN': u'\u0627\u0644\u0647\u0646\u062f', 'TZ': u'\u062a\u0627\u0646\u0632\u0627\u0646\u064a\u0627', 'AZ': u'\u0622\u0630\u0631\u0628\u064a\u062c\u0627\u0646', 'IE': u'\u0627\u064a\u0631\u0644\u0646\u062f\u0627', 'ID': u'\u0627\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627', 'UA': u'\u0627\u0648\u0643\u0631\u0627\u0646\u064a\u0627', 'QA': u'\u0642\u0637\u0631', 'MZ': u'\u0645\u0648\u0632\u0645\u0628\u064a\u0642'} months=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] abbrMonths=[u'\u064a\u0646\u0627\u064a\u0631', u'\u0641\u0628\u0631\u0627\u064a\u0631', u'\u0645\u0627\u0631\u0633', u'\u0623\u0628\u0631\u064a\u0644', u'\u0645\u0627\u064a\u0648', u'\u064a\u0648\u0646\u064a\u0648', u'\u064a\u0648\u0644\u064a\u0648', u'\u0623\u063a\u0633\u0637\u0633', u'\u0633\u0628\u062a\u0645\u0628\u0631', u'\u0623\u0643\u062a\u0648\u0628\u0631', u'\u0646\u0648\u0641\u0645\u0628\u0631', u'\u062f\u064a\u0633\u0645\u0628\u0631'] days=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] abbrDays=[u'\u0627\u0644\u0627\u062b\u0646\u064a\u0646', u'\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621', u'\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621', u'\u0627\u0644\u062e\u0645\u064a\u0633', u'\u0627\u0644\u062c\u0645\u0639\u0629', u'\u0627\u0644\u0633\u0628\u062a', u'\u0627\u0644\u0623\u062d\u062f'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s, %Y', 'long': '%d %%(monthname)s, %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': u'\u066c', 'nativeZeroDigit': u'\u0660', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': u'\u066b', 'percentSign': u'\u066a', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6Y''turbogears/i18n/data/ar_YE.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<d?d@<dAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdCd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdCS(?sbnuবাংলাsINu ভারতuজানুয়ারীuফেব্রুয়ারীuমার্চuএপ্রিলuমেu জুনuজুলাইuআগস্টuসেপ্টেম্বরuঅক্টোবরuনভেম্বরuডিসেম্বরuসোমবারuমঙ্গলবারuবুধবারu!বৃহষ্পতিবারuশুক্রবারuশনিবারuরবিবারu সোমuমঙ্গলu বুধuবৃহস্পতিuশুক্রu শনিu রবিsmediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\bn.pys?s***PKP6feeturbogears/i18n/data/bn_IN.py# Formatting configuration for locale bn_IN languages={'bn': u'\u09ac\u09be\u0982\u09b2\u09be'} countries={'IN': u'\u09ad\u09be\u09b0\u09a4'} months=[u'\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ae\u09be\u09b0\u09cd\u099a', u'\u098f\u09aa\u09cd\u09b0\u09bf\u09b2', u'\u09ae\u09c7', u'\u099c\u09c1\u09a8', u'\u099c\u09c1\u09b2\u09be\u0987', u'\u0986\u0997\u09b8\u09cd\u099f', u'\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0', u'\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0'] abbrMonths=[u'\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0', u'\u09ae\u09be\u09b0\u09cd\u099a', u'\u098f\u09aa\u09cd\u09b0\u09bf\u09b2', u'\u09ae\u09c7', u'\u099c\u09c1\u09a8', u'\u099c\u09c1\u09b2\u09be\u0987', u'\u0986\u0997\u09b8\u09cd\u099f', u'\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0', u'\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0', u'\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0'] days=[u'\u09b8\u09cb\u09ae\u09ac\u09be\u09b0', u'\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0', u'\u09ac\u09c1\u09a7\u09ac\u09be\u09b0', u'\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0', u'\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0', u'\u09b6\u09a8\u09bf\u09ac\u09be\u09b0', u'\u09b0\u09ac\u09bf\u09ac\u09be\u09b0'] abbrDays=[u'\u09b8\u09cb\u09ae', u'\u09ae\u0999\u09cd\u0997\u09b2', u'\u09ac\u09c1\u09a7', u'\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf', u'\u09b6\u09c1\u0995\u09cd\u09b0', u'\u09b6\u09a8\u09bf', u'\u09b0\u09ac\u09bf'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6 Ǯturbogears/i18n/data/bn_IN.pyc; BEc @sHhddS(?sbnuবাংলাsINu ভারতuজানুয়ারীuফেব্রুয়ারীuমার্চuএপ্রিলuমেu জুনuজুলাইuআগস্টuসেপ্টেম্বরuঅক্টোবরuনভেম্বরuডিসেম্বরuসোমবারuমঙ্গলবারuবুধবারu!বৃহষ্পতিবারuশুক্রবারuশনিবারuরবিবারu সোমuমঙ্গলu বুধuবৃহস্পতিuশুক্রu শনিu রবিsmediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\bn_IN.pys?s***PKP6Iturbogears/i18n/data/ca.py# Formatting configuration for locale ca languages={'gu': 'gujarati', 'gd': u'escoc\xe8s', 'ga': u'irland\xe8s', 'gn': u'guaran\xed', 'gl': 'gallec', 'la': u'llat\xed', 'ln': 'lingala', 'lo': u'laosi\xe0', 'tt': u't\xe0tar', 'tr': 'turc', 'ts': 'tsonga', 'lv': u'let\xf3', 'to': 'tonga', 'lt': u'litu\xe0', 'tk': 'turcman', 'th': 'thai', 'ti': 'tigrinya', 'tg': 'tadjik', 'te': 'telugu', 'ta': u't\xe0mil', 'yi': 'jiddish', 'yo': 'ioruba', 'de': 'alemany', 'da': u'dan\xe8s', 'dz': u'bhutan\xe8s', 'st': 'sotho', 'qu': u'qu\xe8txua', 'el': 'grec', 'eo': 'esperanto', 'en': u'angl\xe8s', 'zh': u'xin\xe9s', 'za': 'zhuang', 'uk': u'ucra\xefn\xe8s', 'eu': 'basc', 'et': u'estoni\xe0', 'es': 'espanyol', 'ru': 'rus', 'rw': 'kinyarwanda', 'rm': u'retorom\xe0nic', 'rn': 'kirundi', 'ro': u'roman\xe8s', 'bn': u'bengal\xed', 'be': u'bielor\xfas', 'bg': u'b\xfalgar', 'ba': 'baixkir', 'wo': u'w\xf2lof', 'jv': u'javan\xe8s', 'bo': u'tibet\xe0', 'bh': 'bihari', 'bi': 'bislama', 'br': u'bret\xf3', 'ja': u'japon\xe8s', 'om': 'oromo (afan)', 'oc': u'occit\xe0', 'tw': 'twi', 'or': 'oriya', 'xh': 'xosa', 'co': 'cors', 'ca': u'catal\xe0', 'cy': u'gal\xb7l\xe8s', 'cs': 'txec', 'ps': 'paixto', 'pt': u'portugu\xe8s', 'tl': u'tag\xe0log', 'pa': 'panjabi', 'vi': 'vietnamita', 'pl': u'polon\xe8s', 'hy': 'armeni', 'hr': 'croat', 'iu': 'inuktitut', 'hu': u'hongar\xe8s', 'hi': 'hindi', 'ha': 'hausa', 'he': 'hebreu', 'mg': 'malgaix', 'uz': 'uzbek', 'ml': 'malaialam', 'mo': 'moldau', 'mn': 'mongol', 'mi': 'maori', 'ik': 'inupiak', 'mk': 'macedoni', 'ur': u'urd\xfa', 'mt': u'malt\xe8s', 'ms': 'malai', 'mr': 'marathi', 'ug': 'uigur', 'my': u'birm\xe0', 'aa': u'\xe0far', 'ab': 'abkhaz', 'ss': 'siswati', 'af': 'afrikaans', 'tn': 'tswana', 'sw': 'swahili', 'is': u'island\xe8s', 'am': u'amh\xe0ric', 'it': u'itali\xe0', 'sv': 'suec', 'ia': 'interlingua', 'as': u'assam\xe8s', 'ar': u'\xe2rab', 'su': u'sundan\xe8s', 'zu': 'zulu', 'ay': 'aimara', 'az': u'\xe0zeri', 'ie': 'interlingue', 'id': 'indonesi', 'sk': 'eslovac', 'nl': u'neerland\xe8s', 'no': 'noruec', 'na': u'nauru\xe0', 'ne': u'nepal\xe8s', 'vo': 'volapuk', 'fr': u'franc\xe8s', 'sm': u'samo\xe0', 'fy': u'fris\xf3', 'fa': 'persa', 'fi': u'fin\xe8s', 'fj': u'fiji\xe0', 'sa': u's\xe0nscrit', 'fo': u'fero\xe8s', 'ka': u'georgi\xe0', 'kk': 'kazakh', 'sr': 'serbi', 'sq': u'alban\xe8s', 'ko': u'core\xe0', 'kn': 'kannada', 'km': u'cambodj\xe0', 'kl': u'greenland\xe8s', 'ks': 'caixmiri', 'si': u'sinhal\xe8s', 'sh': 'serbo-croat', 'so': 'somali', 'sn': 'shona', 'ku': 'kurd', 'sl': u'eslov\xe8', 'ky': u'kirgu\xeds', 'sg': 'sango', 'sd': 'sindhi'} countries={'BD': 'Bangla Desh', 'BE': u'B\xe8lgica', 'BF': 'Burkina Faso', 'BG': u'Bulg\xe0ria', 'BA': u'B\xf2snia i Hercegovina', 'BB': 'Barbados', 'BM': 'Bermudes', 'BN': 'Brunei', 'BO': u'Bol\xedvia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BW': 'Botswana', 'BR': 'Brasil', 'BS': 'Bahames', 'BY': u'Bielor\xfassia', 'BZ': 'Belize', 'RU': u'R\xfassia', 'RW': 'Rwanda', 'TL': 'Timor', 'TM': 'Turkmenistan', 'TJ': 'Tadjikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea Bissau', 'GT': 'Guatemala', 'GR': u'Gr\xe8cia', 'GQ': 'Guinea Equatorial', 'GP': 'Guadeloupe', 'JP': u'Jap\xf3', 'GY': 'Guyana', 'GF': 'Guaiana Francesa', 'GE': u'Ge\xf2rgia', 'GB': 'Regne Unit', 'GA': 'Gabon', 'GN': 'Guinea', 'GM': u'G\xe0mbia', 'GH': 'Ghana', 'OM': 'Oman', 'TN': u'Tun\xedsia', 'JO': u'Jord\xe0nia', 'SP': u'S\xe8rbia', 'HR': u'Cro\xe0cia', 'HT': u'Hait\xed', 'HU': 'Hongria', 'HK': 'Hong Kong', 'HN': 'Hondures', 'VE': u'Vene\xe7uela', 'PR': 'Puerto Rico', 'PT': 'Portugal', 'PY': 'Paraguai', 'IQ': 'Iraq', 'PA': u'Panam\xe0', 'PF': u'Polin\xe8sia Francesa', 'PG': 'Papua Nova Guinea', 'PE': u'Per\xfa', 'PK': 'Pakistan', 'PH': 'Filipines', 'PL': u'Pol\xf2nia', 'ZM': u'Z\xe0mbia', 'EH': u'S\xe0hara Occidental', 'EE': u'Est\xf2nia', 'EG': 'Egipte', 'ZA': u'Sud-\xe0frica', 'EC': 'Equador', 'IT': u'It\xe0lia', 'VN': 'Vietnam', 'ET': u'Eti\xf2pia', 'SO': u'Som\xe0lia', 'ZW': 'Zimbabwe', 'ES': 'Espanya', 'ER': 'Eritrea', 'MD': u'Mold\xe0via', 'MG': 'Madagascar', 'MA': 'Marroc', 'MC': u'M\xf2naco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MN': u'Mong\xf2lia', 'MK': u'Maced\xf2nia', 'MU': 'Maurici', 'MT': 'Malta', 'MQ': 'Martinica', 'MS': 'Montserrat', 'MR': u'Maurit\xe0nia', 'UG': 'Uganda', 'MY': u'Mal\xe0isia', 'MX': u'M\xe8xic', 'IL': 'Israel', 'FR': u'Fran\xe7a', 'FI': u'Finl\xe0ndia', 'FJ': 'Fiji', 'FM': u'Micron\xe8sia', 'NI': 'Nicaragua', 'NL': u'Pa\xefsos Baixos', 'NO': 'Noruega', 'NA': u'Nam\xedbia', 'VU': 'Vanuatu', 'NC': u'Nova Caled\xf2nia', 'NE': u'N\xedger', 'NG': u'Nig\xe8ria', 'NZ': 'Nova Zelanda', 'NP': 'Nepal', 'NU': 'Niue', 'CI': "Costa d'Ivori", 'CH': 'Switzerland', 'CO': u'Col\xf2mbia', 'CN': 'Xina', 'CM': 'Camerun', 'CL': 'Xile', 'CA': u'Canad\xe0', 'CG': 'Congo', 'CF': u'Rep\xfablica Centrafricana', 'CZ': u'Rep\xfablica Txeca', 'CY': 'Xipre', 'CR': 'Costa Rica', 'CV': 'Cap Verd', 'CU': 'Cuba', 'SZ': u'Swazil\xe0ndia', 'SY': u'S\xedria', 'KG': 'Kirgizistan', 'KE': 'Kenya', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': 'Cambodja', 'SV': 'El Salvador', 'KM': 'Comores', 'SK': u'Eslov\xe0quia', 'KR': 'Corea del Sud', 'SI': u'Eslov\xe8nia', 'KP': 'Corea del Nord', 'KW': 'Kuwait', 'SN': 'Senegal', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'SA': u'Ar\xe0bia Saud\xed', 'SG': 'Singapur', 'SE': u'Su\xe8cia', 'SD': 'Sudan', 'DO': u'Rep\xfablica Dominicana', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Dinamarca', 'VG': u'Illes Verges Brit\xe0niques', 'DE': 'Alemanya', 'YE': 'Iemen', 'DZ': u'Alg\xe8ria', 'US': 'Estats Units', 'UY': 'Uruguai', 'YU': u'Iugosl\xe0via', 'YT': 'Mayotte', 'LB': u'L\xedban', 'LA': 'Laos', 'TW': 'Taiwan', 'TT': 'Trinitat i Tobago', 'TR': 'Turquia', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': u'Let\xf2nia', 'TO': 'Tonga', 'LT': u'Litu\xe0nia', 'LU': 'Luxemburg', 'LR': u'Lib\xe8ria', 'LS': 'Lesotho', 'TH': u'Tail\xe0ndia', 'TF': 'Territoris Meridionals Francesos', 'TG': 'Togo', 'TD': 'Txad', 'LY': u'L\xedbia', 'VA': u'Vatic\xe0', 'AE': u'Uni\xf3 dels Emirats \xc0rabs', 'AD': 'Andorra', 'AF': 'Afganistan', 'AI': 'Anguilla', 'VI': 'Illes Verges dels USA', 'IS': u'Isl\xe0ndia', 'IR': 'Iran', 'AM': u'Arm\xe8nia', 'AL': u'Alb\xe0nia', 'AO': 'Angola', 'AN': 'Antilles Holandeses', 'AR': 'Argentina', 'AU': u'Austr\xe0lia', 'AT': u'\xc2ustria', 'AW': 'Aruba', 'IN': u'\xcdndia', 'TZ': u'Tanz\xe0nia', 'AZ': 'Azerbaidjan', 'IE': 'Irlanda', 'ID': u'Indon\xe8sia', 'UA': u'Ucra\xefna', 'QA': 'Qatar', 'MZ': u'Mo\xe7ambic'} months=['gener', 'febrer', u'mar\xe7', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre'] abbrMonths=['gen.', 'feb.', u'mar\xe7', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'] days=['dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte', 'diumenge'] abbrDays=['dl.', 'dt.', 'dc.', 'dj.', 'dv.', 'ds.', 'dg.'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6v(y++turbogears/i18n/data/ca.pyc; AEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMd#<dNdO<dPdQ<dRdS<dTdU<dVdWd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMd#<dNdO<dPdQ<dRdS<dTdU<dVdWd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?d@dAg ZdBdCdDdEd:dFdGdHdIdJdKdLg ZdMdNdOdPdQdRdSgZdTdUdVdWdXdYdZgZhd[d\<d]d^<d_d`<dadbd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPd<<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdCd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!d?d@gZdAdBdCdDdEdFdGgZhdHdI<dJdK<dLdM<dNdOd?<d@dA<dBdCd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!d?d@gZdAdBdCdDdEdFdGgZhdHdI<dJdK<dLdM<dNdOd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6#H;::turbogears/i18n/data/en_AU.py# Formatting configuration for locale en_AU languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6\$vZZturbogears/i18n/data/en_AU.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6ſR$B:B:turbogears/i18n/data/en_BE.py# Formatting configuration for locale en_BE languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%%{abbrdayname}sE %d %%(abbrmonthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6/VZZturbogears/i18n/data/en_BE.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6g^,:,:turbogears/i18n/data/en_BW.py# Formatting configuration for locale en_BW languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d,%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6ɿZZturbogears/i18n/data/en_BW.pyc; AEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6|X/:/:turbogears/i18n/data/en_CA.py# Formatting configuration for locale en_CA languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf62hZZturbogears/i18n/data/en_CA.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6h-:-:turbogears/i18n/data/en_GB.py# Formatting configuration for locale en_GB languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf64ZZturbogears/i18n/data/en_GB.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6Qf2-:-:turbogears/i18n/data/en_HK.py# Formatting configuration for locale en_HK languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6(ZZturbogears/i18n/data/en_HK.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP62,:,:turbogears/i18n/data/en_IE.py# Formatting configuration for locale en_IE languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6dZZturbogears/i18n/data/en_IE.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6 ,:,:turbogears/i18n/data/en_IN.py# Formatting configuration for locale en_IN languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6/kZZturbogears/i18n/data/en_IN.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6UN::turbogears/i18n/data/en_MT.py# Formatting configuration for locale en_MT languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%Y', 'full': '%d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6·ZZturbogears/i18n/data/en_MT.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6/::turbogears/i18n/data/en_NZ.py# Formatting configuration for locale en_NZ languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6+=ZZturbogears/i18n/data/en_NZ.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6S : :turbogears/i18n/data/en_PH.py# Formatting configuration for locale en_PH languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%m %d, %y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6šZZturbogears/i18n/data/en_PH.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6=*x#:#:turbogears/i18n/data/en_SG.py# Formatting configuration for locale en_SG languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%y', 'full': '%d %%(monthname)s %Y', 'long': '%d %%(abbrmonthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6ZZturbogears/i18n/data/en_SG.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP60N00:0:turbogears/i18n/data/en_US.py# Formatting configuration for locale en_US languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d, %Y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6hZZturbogears/i18n/data/en_US.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6V/:/:#turbogears/i18n/data/en_US_POSIX.py# Formatting configuration for locale en_US_POSIX languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d, %Y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': '0/00', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': 'INF', 'minusSign': '-'}PKf6Z ^BZZ$turbogears/i18n/data/en_US_POSIX.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6[ 0:0:turbogears/i18n/data/en_VI.py# Formatting configuration for locale en_VI languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%%(abbrmonthname)s %d, %Y', 'full': '%%(dayname)s, %%(monthname)s %d, %Y', 'long': '%%(monthname)s %d, %Y', 'short': '%m/%d/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6ZZturbogears/i18n/data/en_VI.pyc; AEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6_Uk,:,:turbogears/i18n/data/en_ZA.py# Formatting configuration for locale en_ZA languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%Y/%m/%d'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6og ZZturbogears/i18n/data/en_ZA.pyc; AEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6Lc,:,:turbogears/i18n/data/en_ZW.py# Formatting configuration for locale en_ZW languages={'gv': 'Manx', 'gu': 'Gujarati', 'rom': 'Romany', 'alg': 'Algonquian Languages', 'ale': 'Aleut', 'sco': 'Scots', 'mni': 'Manipuri', 'gd': 'Scottish Gaelic', 'ga': 'Irish', 'mno': 'Manobo Languages', 'osa': 'Osage', 'gn': 'Guarani', 'gl': 'Gallegan', 'mwr': 'Marwari', 'ty': 'Tahitian', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Turkish', 'ts': 'Tsonga', 'tn': 'Tswana', 'to': 'Tonga (Tonga Islands)', 'aus': 'Australian Languages', 'av': 'Avaric', 'tk': 'Turkmen', 'th': 'Thai', 'roa': 'Romance (Other)', 'tg': 'Tajik', 'te': 'Telugu', 'uga': 'Ugaritic', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Rhaeto-Romance', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': 'Chamic Languages', 'ml': 'Malayalam', 'zh': 'Chinese', 'tem': 'Timne', 'za': 'Zhuang', 'cau': 'Caucasian (Other)', 'zu': 'Zulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': 'Manchu', 'kut': 'Kutenai', 'suk': 'Sukuma', 'kum': 'Kumyk', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerian', 'den': 'Slave', 'men': 'Mende', 'mul': 'Multiple Languages', 'lez': 'Lezghian', 'root': 'Root', 'eka': 'Ekajuk', 'akk': 'Akkadian', 'dra': 'Dravidian (Other)', 'jrb': 'Judeo-Arabic', 'sgn': 'Sign Languages', 'sga': 'Irish, Old (to 900)', 'apa': 'Apache Languages', 'bra': 'Braj', 'chb': 'Chibcha', 'chg': 'Chagatai', 'chk': 'Chuukese', 'chm': 'Mari', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'chp': 'Chipewyan', 'chr': 'Cherokee', 'chy': 'Cheyenne', 'ti': 'Tigrinya', 'vot': 'Votic', 'mg': 'Malagasy', 'iba': 'Iban', 'mo': 'Moldavian', 'mn': 'Mongolian', 'mi': 'Maori', 'mh': 'Marshallese', 'mk': 'Macedonian', 'mt': 'Maltese', 'cai': 'Central American Indian (Other)', 'del': 'Delaware', 'ms': 'Malay', 'mr': 'Marathi', 'my': 'Burmese', 'cad': 'Caddo', 'tai': 'Tai (Other)', 'afh': 'Afrihili', 'sit': 'Sino-Tibetan (Other)', 'enm': 'English, Middle (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Nyoro', 'nym': 'Nyamwezi', 'sio': 'Siouan Languages', 'map': 'Austronesian', 'mas': 'Masai', 'lah': 'Lahnda', 'lad': 'Ladino', 'fy': 'Frisian', 'snk': 'Soninke', 'fa': 'Persian', 'mad': 'Madurese', 'mag': 'Magahi', 'mai': 'Maithili', 'fi': 'Finnish', 'fj': 'Fijian', 'man': 'Mandingo', 'egy': 'Egyptian (Ancient)', 'znd': 'Zande', 'ss': 'Swati', 'sr': 'Serbian', 'sq': 'Albanian', 'sw': 'Swahili', 'sv': 'Swedish', 'su': 'Sundanese', 'st': 'Sotho, Southern', 'sk': 'Slovak', 'si': 'Sinhalese', 'sh': 'Serbo-Croatian', 'so': 'Somali', 'sn': 'Shona', 'sm': 'Samoan', 'sl': 'Slovenian', 'sc': 'Sardinian', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': 'Northern Sami', 'sd': 'Sindhi', 'zen': 'Zenaga', 'kbd': 'Kabardian', 'afa': 'Afro-Asiatic (Other)', 'lg': 'Ganda', 'lb': 'Luxembourgish', 'fiu': 'Finno - Ugrian (Other)', 'ln': 'Lingala', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Lithuanian', 'lu': 'Luba-Katanga', 'yi': 'Yiddish', 'non': 'Norse, Old', 'ceb': 'Cebuano', 'yo': 'Yoruba', 'nog': 'Nogai', 'bat': 'Baltic (Other)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dayak', 'ssa': 'Nilo-Saharam (Other)', 'kpe': 'Kpelle', 'el': 'Greek', 'eo': 'Esperanto', 'en': 'English', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': 'French', 'mdr': 'Mandar', 'et': 'Estonian', 'es': 'Spanish', 'ru': 'Russian', 'gon': 'Gondi', 'goh': 'German, Old High (ca.750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gothic', 'rn': 'Rundi', 'ro': 'Romanian', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Athapascan Languages', 'gez': 'Geez', 'xh': 'Xhosa', 'ff': 'Fulah', 'mak': 'Makasar', 'zap': 'Zapotec', 'kok': 'Konkani', 'kos': 'Kosraean', 'fo': 'Faroese', 'tog': 'Tonga (Nyasa)', 'hup': 'Hupa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Tsimshian', 'ber': 'Berber', 'nzi': 'Nzima', 'sai': 'South American Indian (Other)', 'ang': 'English, Old (ca.450-1100)', 'pra': 'Prakrit Languages', 'bho': 'Bhojpuri', 'sal': 'Salishan languages', 'pro': u'Proven\xe7al, Old (to 1500)', 'raj': 'Rajasthani', 'sad': 'Sandawe', 'rar': 'Rarotongan', 'rap': 'Rapanui', 'sas': 'Sasak', 'car': 'Carib', 'min': 'Minangkabau', 'mic': 'Micmac', 'efi': 'Efik', 'arn': 'Araucanian', 'ypk': 'Yupik Languages', 'mis': 'Miscellaneous Languages', 'kac': 'Kachin', 'kab': 'Kabyle', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinian', 'awa': 'Awadhi', 'ka': 'Georgian', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': 'Kazakh', 'kj': 'Kuanyama', 'ki': 'Kikuyu', 'ko': 'Korean', 'kn': 'Kannada', 'km': 'Khmer', 'kl': 'Kalaallisut', 'ks': 'Kashmiri', 'kr': 'Kanuri', 'kw': 'Cornish', 'kv': 'Komi', 'ku': 'Kurdish', 'ky': 'Kirghiz', 'tkl': 'Tokelau', 'bua': 'Buriat', 'mga': 'Irish, Middle (900-1200)', 'hit': 'Hittite', 'dyu': 'Dyula', 'de': 'German', 'da': 'Danish', 'dz': 'Dzongkha', 'ira': 'Iranian', 'dv': 'Divehi', 'hil': 'Hiligaynon', 'him': 'Himachali', 'gem': 'Germanic (Other)', 'crp': 'Creoles and Pidgins (Other)', 'qu': 'Quechua', 'bas': 'Basa', 'gba': 'Gbaya', 'bad': 'Banda', 'ban': 'Balinese', 'bal': 'Baluchi', 'bam': 'Bambara', 'shn': 'Shan', 'bai': 'Bamileke Languages', 'arp': 'Arapaho', 'art': 'Artificial (Other)', 'arw': 'Arawak', 'arc': 'Aramaic', 'sem': 'Semitic (Other)', 'sel': 'Selkup', 'nub': 'Nubian Languages', 'btk': 'Batak', 'lus': 'Lushai', 'mus': 'Creek', 'lua': 'Luba-Lulua', 'iro': 'Iroquoian languages', 'lui': 'Luiseno', 'mun': 'Munda Languages', 'lun': 'Lunda', 'luo': 'Luo', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': 'Javanese', 'tut': 'Altaic (Other)', 'tum': 'Tumbuka', 'ja': 'Japanese', 'cop': 'Coptic', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': "Gwich'in", 'und': 'Undetermined', 'tli': 'Tlingit', 'ch': 'Chamorro', 'co': 'Corsican', 'ca': 'Catalan', 'ce': 'Chechen', 'pon': 'Pohnpeian', 'cy': 'Welsh', 'sah': 'Yakut', 'cs': 'Czech', 'cr': 'Cree', 'bnt': 'Bantu', 'cv': 'Chuvash', 'cu': 'Church Slavic', 'lv': 'Latvian', 'dum': 'Dutch, Middle (ca. 1050-1350)', 'pt': 'Portuguese', 'dua': 'Duala', 'fro': 'French, Old (842-ca.1400)', 'yap': 'Yapese', 'frm': 'French, Middle (ca.1400-1600)', 'tiv': 'Tiv', 'yao': 'Yao', 'pa': 'Punjabi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Polish', 'gay': 'Gayo', 'oto': 'Otomian Languages', 'ota': 'Turkish, Ottoman (1500-1928)', 'hmn': 'Hmong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Friulian', 'khi': 'Khoisan (Other)', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': 'Vietnamese', 'is': 'Icelandic', 'kho': 'Khotanese', 'iu': 'Inuktitut', 'it': 'Italian', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupiaq', 'io': 'Ido', 'ine': 'Indo-European (Other)', 'ia': 'Interlingua', 'jpr': 'Judeo-Persian', 'ie': 'Interlingue', 'id': 'Indonesian', 'ig': 'Igbo', 'pap': 'Papiamento', 'ewo': 'Ewondo', 'pau': 'Palauan', 'paa': 'Papuan (Other)', 'pag': 'Pangasinan', 'sat': 'Santali', 'pal': 'Pahlavi', 'pam': 'Pampanga', 'phi': 'Philippine (Other)', 'cel': 'Celtic (Other)', 'phn': 'Phoenician', 'nic': 'Niger - Kordofanian (Other)', 'nia': 'Nias', 'dgr': 'Dogrib', 'syr': 'Syriac', 'niu': 'Niuean', 'jbo': 'Lojban', 'nah': 'Nahuatl', 'sam': 'Samaritan Aramaic', 'hai': 'Haida', 'gmh': 'German, Middle High (ca.1050-1500)', 'cus': 'Cushitic (Other)', 'wen': 'Sorbian Languages', 'ady': 'Adyghe', 'elx': 'Elamite', 'ada': 'Adangme', 'haw': 'Hawaiian', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': 'Mohawk', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': 'Ijo', 'kmb': 'Kimbundu', 'peo': 'Persian Old (ca.600-400 B.C.)', 'umb': 'Umbundu', 'tmh': 'Tamashek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarusian', 'bg': 'Bulgarian', 'ba': 'Bashkir', 'ps': 'Pashto (Pushto)', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetan', 'bh': 'Bihari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnian', 'om': 'Oromo', 'oj': 'Ojibwa', 'ace': 'Achinese', 'ach': 'Acoli', 'oc': u'Occitan (post 1500); Proven\xe7al', 'kru': 'Kurukh', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': 'Low German; Low Saxon', 'os': 'Ossetic', 'or': 'Oriya', 'sog': 'Sogdien', 'nso': 'Sotho, Northern', 'son': 'Songhai', 'vai': 'Vai', 'wak': 'Wakashan Languages', 'lol': 'Mongo', 'mkh': 'Mon-Khmer (Other)', 'loz': 'Lozi', 'gil': 'Gilbertese', 'was': 'Washo', 'war': 'Waray', 'hz': 'Herero', 'hy': 'Armenian', 'sid': 'Sidamo', 'hr': 'Croatian', 'ht': 'Haitian', 'hu': 'Hungarian', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'ha': 'Hausa', 'bug': 'Buginese', 'he': 'Hebrew', 'uz': 'Uzbek', 'ur': 'Urdu', 'uk': 'Ukrainian', 'ug': 'Uighur', 'aa': 'Afar', 'ab': 'Abkhazian', 'ae': 'Avestan', 'af': 'Afrikaans', 'ak': 'Akan', 'am': 'Amharic', 'myv': 'Erzya', 'eu': 'Basque', 'as': 'Assamese', 'ar': 'Arabic', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Mayan', 'ay': 'Aymara', 'kha': 'Khasi', 'az': 'Azerbaijani', 'inc': 'Indic (Other)', 'nl': 'Dutch', 'nn': 'Norwegian Nynorsk', 'no': 'Norwegian', 'na': 'Nauru', 'nb': u'Norwegian Bokm\xe5l', 'nai': 'North American Indian (Other)', 'nd': 'Ndebele, North', 'ne': 'Nepali', 'ng': 'Ndonga', 'ny': 'Nyanja; Chichewa; Chewa', 'nap': 'Neapolitan', 'grb': 'Gerbo', 'grc': 'Greek, Ancient (to 1453)', 'nr': 'Ndebele, South', 'tig': 'Tigre', 'nv': 'Navajo', 'zun': 'Zuni', 'rw': 'Kinyarwanda', 'cpe': 'Creoles and Pidgins, English-based (Other)', 'cpf': 'Creoles and Pidgins, French-based (Other)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladesh', 'BE': 'Belgium', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia and Herzegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunei', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahamas', 'BY': 'Belarus', 'BZ': 'Belize', 'RU': 'Russia', 'RW': 'Rwanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': 'Tajikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': 'Greece', 'GQ': 'Equatorial Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'French Guiana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'United Kingdom', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Croatia', 'HT': 'Haiti', 'HU': 'Hungary', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': 'French Polynesia', 'PG': 'Papua New Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Philippines', 'PN': 'Pitcairn', 'PL': 'Poland', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambia', 'EH': 'Western Sahara', 'EE': 'Estonia', 'EG': 'Egypt', 'ZA': 'South Africa', 'EC': 'Ecuador', 'IT': 'Italy', 'VN': 'Vietnam', 'SB': 'Solomon Islands', 'ET': 'Ethiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spain', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagascar', 'MA': 'Morocco', 'MC': 'Monaco', 'UZ': 'Uzbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolia', 'MH': 'Marshall Islands', 'MK': 'Macedonia', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinique', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'France', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': 'Falkland Islands', 'FM': 'Micronesia', 'FO': 'Faroe Islands', 'NI': 'Nicaragua', 'NL': 'Netherlands', 'NO': 'Norway', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'New Caledonia', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u"C\xf4te d'Ivoire", 'CH': 'Switzerland', 'CO': 'Colombia', 'CN': 'China', 'CM': 'Cameroon', 'CL': 'Chile', 'CC': 'Cocos Islands', 'CA': 'Canada', 'CG': 'Congo', 'CF': 'Central African Republic', 'CD': 'Democratic Republic of the Congo', 'CZ': 'Czech Republic', 'CY': 'Cyprus', 'CX': 'Christmas Island', 'CR': 'Costa Rica', 'CV': 'Cape Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kyrgyzstan', 'KE': 'Kenya', 'SR': 'Suriname', 'KI': 'Kiribati', 'KH': 'Cambodia', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakia', 'KR': 'South Korea', 'SI': 'Slovenia', 'KP': 'North Korea', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': 'Kazakhstan', 'KY': 'Cayman Islands', 'SG': 'Singapore', 'SE': 'Sweden', 'SD': 'Sudan', 'DO': 'Dominican Republic', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Denmark', 'VG': 'British Virgin Islands', 'DE': 'Germany', 'YE': 'Yemen', 'DZ': 'Algeria', 'US': 'United States', 'UY': 'Uruguay', 'YU': 'Yugoslavia', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Lebanon', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad and Tobago', 'TR': 'Turkey', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Lithuania', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': 'French Southern Territories', 'TG': 'Togo', 'TD': 'Chad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libya', 'VA': 'Vatican', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'United Arab Emirates', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Iceland', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Netherlands Antilles', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Azerbaijan', 'IE': 'Ireland', 'ID': 'Indonesia', 'UA': 'Ukraine', 'QA': 'Qatar', 'MZ': 'Mozambique'} months=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] abbrMonths=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] days=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] abbrDays=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] dateFormats={'medium': '%d %%(abbrmonthname)s,%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6€ZZturbogears/i18n/data/en_ZW.pyc; BEc @s#hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd~***PKP6.}N??turbogears/i18n/data/eo.py# Formatting configuration for locale eo languages={'gu': u'gu\u011darata', 'gd': 'gaela', 'ga': 'irlanda', 'gn': 'gvarania', 'gl': 'galega', 'la': 'latino', 'ln': 'lingala', 'lo': u'la\u016da', 'tt': 'tatara', 'tr': 'turka', 'ts': 'conga', 'lv': 'latva', 'to': 'tongaa', 'lt': 'litova', 'tk': 'turkmena', 'th': 'taja', 'ti': 'tigraja', 'tg': u'ta\u011dika', 'te': 'telugua', 'ta': 'tamila', 'yi': 'jida', 'yo': 'joruba', 'de': 'germana', 'da': 'dana', 'dz': 'dzonko', 'st': 'sota', 'qu': u'ke\u0109ua', 'el': 'greka', 'eo': 'esperanto', 'en': 'angla', 'zh': u'\u0109ina', 'za': u'\u011duanga', 'uk': 'ukraina', 'eu': u'e\u016dska', 'et': 'estona', 'es': 'hispana', 'ru': 'rusa', 'rw': 'ruanda', 'rm': u'roman\u0109a', 'rn': 'burunda', 'ro': 'rumana', 'bn': 'bengala', 'be': 'belorusa', 'bg': 'bulgara', 'ba': u'ba\u015dkira', 'wo': 'volofa', 'jv': 'java', 'bo': 'tibeta', 'bh': 'bihara', 'bi': 'bislamo', 'br': 'bretona', 'ja': 'japana', 'om': 'oroma', 'oc': 'okcitana', 'tw': 'akana', 'or': 'orijo', 'xh': 'ksosa', 'co': 'korsika', 'ca': 'kataluna', 'cy': 'kimra', 'cs': u'\u0109e\u0125a', 'ps': u'pa\u015dtua', 'pt': 'portugala', 'tl': 'filipina', 'pa': u'pan\u011daba', 'vi': 'vjetnama', 'pl': 'pola', 'hy': 'armena', 'hr': 'kroata', 'iu': 'inuita', 'hu': 'hungara', 'hi': 'hinda', 'ha': u'ha\u016dsa', 'he': 'hebrea', 'mg': 'malagasa', 'uz': 'uzbeka', 'ml': 'malajalama', 'mn': 'mongola', 'mi': 'maoria', 'ik': 'eskima', 'mk': 'makedona', 'ur': 'urduo', 'mt': 'malta', 'ms': 'malaja', 'mr': 'marata', 'ug': 'ujgura', 'my': 'birma', 'aa': 'afara', 'ab': u'ab\u0125aza', 'ss': 'svazia', 'af': 'afrikansa', 'tn': 'cvana', 'sw': 'svahila', 'is': 'islanda', 'am': 'amhara', 'it': 'itala', 'sv': 'sveda', 'ia': 'interlingvao', 'as': 'asama', 'ar': 'araba', 'su': 'sunda', 'zu': 'zulua', 'ay': 'ajmara', 'az': u'azerbaj\u011dana', 'ie': 'okcidentalo', 'id': 'indonezia', 'sk': 'slovaka', 'nl': 'nederlanda', 'no': 'norvega', 'na': 'naura', 'ne': 'nepala', 'vo': 'volapuko', 'fr': 'franca', 'sm': 'samoa', 'fy': 'frisa', 'fa': 'persa', 'fi': 'finna', 'fj': u'fi\u011dia', 'sa': 'sanskrito', 'fo': 'feroa', 'ka': 'kartvela', 'kk': u'kaza\u0125a', 'sr': 'serba', 'sq': 'albana', 'ko': 'korea', 'kn': 'kanara', 'km': 'kmera', 'kl': 'gronlanda', 'ks': u'ka\u015dmira', 'si': 'sinhala', 'sh': 'serbo-Kroata', 'so': 'somala', 'sn': u'\u015dona', 'ku': 'kurda', 'sl': 'slovena', 'ky': 'kirgiza', 'sg': 'sangoa', 'sd': 'sinda'} countries={'BD': u'Banglade\u015do', 'BE': 'Belgujo', 'BF': 'Burkino', 'BG': 'Bulgarujo', 'BA': 'Bosnio-Hercegovino', 'BB': 'Barbado', 'WF': 'Valiso kaj Futuno', 'BM': 'Bermudoj', 'BN': 'Brunejo', 'BO': 'Bolivio', 'BH': 'Barejno', 'BI': 'Burundo', 'BJ': 'Benino', 'BT': 'Butano', 'JM': 'Jamajko', 'BW': 'Bocvano', 'WS': 'Samoo', 'BR': 'Brazilo', 'BS': 'Bahamoj', 'BY': 'Belorusujo', 'BZ': 'Belizo', 'RU': 'Rusujo', 'RW': 'Ruando', 'RE': 'Reunio', 'TM': 'Turkmenujo', 'TJ': u'Ta\u011dikujo', 'RO': 'Rumanujo', 'GW': u'Gvineo-Bisa\u016do', 'GU': 'Gvamo', 'GT': 'Gvatemalo', 'GS': u'Sud-Georgio kaj Sud-Sandvi\u0109insuloj', 'GR': 'Grekujo', 'GQ': 'Ekvatora Gvineo', 'GP': 'Gvadelupo', 'JP': 'Japanujo', 'GY': 'Gujano', 'GF': 'Franca Gviano', 'GE': 'Kartvelujo', 'GD': 'Grenado', 'GB': u'Unui\u011dinta Re\u011dlando', 'GA': 'Gabono', 'SV': 'Salvadoro', 'GN': 'Gvineo', 'GM': 'Gambio', 'GL': 'Gronlando', 'GI': u'\u011cibraltaro', 'GH': 'Ganao', 'OM': 'Omano', 'TN': 'Tunizio', 'JO': 'Jordanio', 'SP': 'Serbujo', 'HR': 'Kroatujo', 'HT': 'Haitio', 'HU': 'Hungarujo', 'HN': 'Honduro', 'HM': 'Herda kaj Makdonaldaj Insuloj', 'VE': 'Venezuelo', 'PR': 'Puerto-Riko', 'PW': u'Bela\u016do', 'PT': 'Portugalujo', 'SJ': 'Svalbardo kaj Jan-Majen-insulo', 'PY': 'Paragvajo', 'IQ': 'Irako', 'PA': 'Panamo', 'PF': 'Franca Polinezio', 'PG': 'Papuo-Nov-Gvineo', 'PE': 'Peruo', 'PK': 'Pakistano', 'PH': 'Filipinoj', 'PN': 'Pitkarna Insulo', 'PL': 'Pollando', 'PM': 'Sent-Piero kaj Mikelono', 'ZM': 'Zambio', 'EH': 'Okcidenta Saharo', 'EE': 'Estonujo', 'EG': 'Egipto', 'ZA': 'Sud-Afriko', 'EC': 'Ekvadoro', 'IT': 'Italujo', 'VN': 'Vjetnamo', 'SB': 'Salomonoj', 'ET': 'Etiopujo', 'SO': 'Somalujo', 'ZW': 'Zimbabvo', 'SA': u'Sa\u016dda Arabujo', 'ES': 'Hispanujo', 'ER': 'Eritreo', 'MD': 'Moldavujo', 'MG': 'Madagaskaro', 'MA': 'Maroko', 'MC': 'Monako', 'UZ': 'Uzbekujo', 'MM': 'Mjanmao', 'ML': 'Malio', 'MN': 'Mongolujo', 'MH': u'Mar\u015daloj', 'MK': 'Makedonujo', 'MU': u'Ma\u016dricio', 'MT': 'Malto', 'MW': 'Malavio', 'MV': 'Maldivoj', 'MQ': 'Martiniko', 'MP': 'Nord-Marianoj', 'MR': u'Ma\u016dritanujo', 'UG': 'Ugando', 'MY': 'Malajzio', 'MX': 'Meksiko', 'IL': 'Israelo', 'FR': 'Francujo', 'IO': 'Brita Hindoceana Teritorio', 'SH': 'Sent-Heleno', 'FI': 'Finnlando', 'FJ': u'Fi\u011doj', 'FM': 'Mikronezio', 'FO': 'Ferooj', 'NI': 'Nikaragvo', 'NL': 'Nederlando', 'NO': 'Norvegujo', 'NA': 'Namibio', 'VU': 'Vanuatuo', 'NC': 'Nov-Kaledonio', 'NE': u'Ni\u011dero', 'NF': 'Norfolkinsulo', 'NG': u'Ni\u011derio', 'NZ': 'Nov-Zelando', 'NP': 'Nepalo', 'NR': 'Nauro', 'NU': 'Niuo', 'CK': 'Kukinsuloj', 'CI': 'Ebur-Bordo', 'CH': 'Svisujo', 'CO': 'Kolombio', 'CN': u'\u0108inujo', 'CM': 'Kameruno', 'CL': u'\u0108ilio', 'CA': 'Kanado', 'CG': 'Kongolo', 'CF': 'Centr-Afrika Respubliko', 'CZ': u'\u0108e\u0125ujo', 'CY': 'Kipro', 'CR': 'Kostariko', 'CV': 'Kabo-Verdo', 'CU': 'Kubo', 'SZ': 'Svazilando', 'SY': 'Sirio', 'KG': 'Kirgizistano', 'KE': 'Kenjo', 'SR': 'Surinamo', 'KI': 'Kiribato', 'KH': u'Kambo\u011do', 'KN': 'Sent-Kristofo kaj Neviso', 'KM': 'Komoroj', 'ST': 'Sao-Tomeo kaj Principeo', 'SK': 'Slovakujo', 'KR': 'Sud-Koreo', 'SI': 'Slovenujo', 'KP': 'Nord-Koreo', 'KW': 'Kuvajto', 'SN': 'Senegalo', 'SM': 'San-Marino', 'SL': 'Siera-Leono', 'SC': u'Sej\u015deloj', 'KZ': u'Kaza\u0125stano', 'KY': 'Kejmanoj', 'SG': 'Singapuro', 'SE': 'Svedujo', 'SD': 'Sudano', 'DO': 'Domingo', 'DM': 'Dominiko', 'DJ': u'\u011cibutio', 'DK': 'Danujo', 'VG': 'Britaj Virgulininsuloj', 'DE': 'Germanujo', 'YE': 'Jemeno', 'DZ': u'Al\u011derio', 'US': 'Usono', 'UY': 'Urugvajo', 'YT': 'Majoto', 'UM': 'Usonaj malgrandaj insuloj', 'LB': 'Libano', 'LC': 'Sent-Lucio', 'LA': 'Laoso', 'TV': 'Tuvalo', 'TW': 'Tajvano', 'TT': 'Trinidado kaj Tobago', 'TR': 'Turkujo', 'LK': 'Sri-Lanko', 'LI': u'Li\u0125ten\u015dtejno', 'LV': 'Latvujo', 'TO': 'Tongo', 'LT': 'Litovujo', 'LU': 'Luksemburgo', 'LR': 'Liberio', 'LS': 'Lesoto', 'TH': 'Tajlando', 'TG': 'Togolo', 'TD': u'\u0108ado', 'LY': 'Libio', 'VA': 'Vatikano', 'VC': 'Sent-Vincento kaj la Grenadinoj', 'AE': u'Unui\u011dintaj Arabaj Emirlandos', 'AD': 'Andoro', 'AG': 'Antigvo-Barbudo', 'AF': 'Afganujo', 'AI': 'Angvilo', 'VI': 'Usonaj Virgulininsuloj', 'IS': 'Islando', 'IR': 'Irano', 'AM': 'Armenujo', 'AL': 'Albanujo', 'AO': 'Angolo', 'AN': 'Nederlandaj Antiloj', 'AQ': 'Antarkto', 'AR': 'Argentino', 'AU': u'A\u016dstralio', 'AT': u'A\u016dstrujo', 'AW': 'Arubo', 'IN': 'Hindujo', 'TZ': 'Tanzanio', 'AZ': u'Azerbaj\u011dano', 'IE': 'Irlando', 'ID': 'Indonezio', 'UA': 'Ukrajno', 'QA': 'Kataro', 'MZ': 'Mozambiko'} months=['januaro', 'februaro', 'marto', 'aprilo', 'majo', 'junio', 'julio', u'a\u016dgusto', 'septembro', 'oktobro', 'novembro', 'decembro'] abbrMonths=['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', u'a\u016dg', 'sep', 'okt', 'nov', 'dec'] days=['lundo', 'mardo', 'merkredo', u'\u0135a\u016ddo', 'vendredo', 'sabato', u'diman\u0109o'] abbrDays=['lu', 'ma', 'me', u'\u0135a', 've', 'sa', 'di'] dateFormats={'medium': '%Y-%%(abbrmonthname)s-%d', 'full': '%%(dayname)s, %d-a de %%(monthname)s %Y', 'long': '%Y-%%(monthname)s-%d', 'short': '%y-%m-%d'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKf6⺋//turbogears/i18n/data/eo.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd'00turbogears/i18n/data/es_MX.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d.<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBd%<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsd<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd!<dd<dd<dd<dd <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d-<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dad<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd7<dd<dd<dd<dd<dd+<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdMd?<d@dA<dBd%<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsd<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd!<dd<dd<dd<dd <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d-<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dad<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd7<dd<dd<dd<dd<dd+<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdMd?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd3<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdtd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd3<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdtd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dddddd0dgZhdd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dddddd0dgZhdd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<d?d@<dAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdud?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddF<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdVd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<d?d@<dAdB<dCdD<dEdF<dGdHd?<d@dA<dBdCd?<d@dA<dBdCd><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<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/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<de<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<de<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd***PKP6yzH'H'turbogears/i18n/data/gv_GB.py# Formatting configuration for locale gv_GB languages={'gv': 'gv', 'gu': 'gu', 'rom': 'rom', 'alg': 'alg', 'ale': 'ale', 'sco': 'sco', 'mni': 'mni', 'gd': 'gd', 'ga': 'ga', 'mno': 'mno', 'osa': 'osa', 'gn': 'gn', 'gl': 'gl', 'mwr': 'mwr', 'ty': 'ty', 'tw': 'tw', 'tt': 'tt', 'tr': 'tr', 'ts': 'ts', 'tn': 'tn', 'to': 'to', 'aus': 'aus', 'av': 'av', 'tk': 'tk', 'th': 'th', 'roa': 'roa', 'tg': 'tg', 'te': 'te', 'uga': 'uga', 'ta': 'ta', 'fat': 'fat', 'fan': 'fan', 'wo': 'wo', 'rm': 'rm', 'din': 'din', 'bla': 'bla', 'cmc': 'cmc', 'ml': 'ml', 'zh': 'zh', 'tem': 'tem', 'za': 'za', 'cau': 'cau', 'zu': 'zu', 'ter': 'ter', 'tet': 'tet', 'mnc': 'mnc', 'kut': 'kut', 'suk': 'suk', 'kum': 'kum', 'sus': 'sus', 'new': 'new', 'sux': 'sux', 'den': 'den', 'men': 'men', 'mul': 'mul', 'lez': 'lez', 'root': 'root', 'eka': 'eka', 'akk': 'akk', 'dra': 'dra', 'jrb': 'jrb', 'sgn': 'sgn', 'sga': 'sga', 'apa': 'apa', 'bra': 'bra', 'chb': 'chb', 'chg': 'chg', 'chk': 'chk', 'chm': 'chm', 'chn': 'chn', 'cho': 'cho', 'chp': 'chp', 'chr': 'chr', 'chy': 'chy', 'ti': 'ti', 'vot': 'vot', 'mg': 'mg', 'iba': 'iba', 'mo': 'mo', 'mn': 'mn', 'mi': 'mi', 'mh': 'mh', 'mk': 'mk', 'mt': 'mt', 'cai': 'cai', 'del': 'del', 'ms': 'ms', 'mr': 'mr', 'my': 'my', 'cad': 'cad', 'tai': 'tai', 'afh': 'afh', 'sit': 'sit', 'enm': 'enm', 'csb': 'csb', 'nyn': 'nyn', 'nyo': 'nyo', 'nym': 'nym', 'sio': 'sio', 'map': 'map', 'mas': 'mas', 'lah': 'lah', 'lad': 'lad', 'fy': 'fy', 'snk': 'snk', 'fa': 'fa', 'mad': 'mad', 'mag': 'mag', 'mai': 'mai', 'fi': 'fi', 'fj': 'fj', 'man': 'man', 'egy': 'egy', 'znd': 'znd', 'ss': 'ss', 'sr': 'sr', 'sq': 'sq', 'sw': 'sw', 'sv': 'sv', 'su': 'su', 'st': 'st', 'sk': 'sk', 'si': 'si', 'sh': 'sh', 'so': 'so', 'sn': 'sn', 'sm': 'sm', 'sl': 'sl', 'sc': 'sc', 'sa': 'sa', 'sg': 'sg', 'se': 'se', 'sd': 'sd', 'zen': 'zen', 'kbd': 'kbd', 'afa': 'afa', 'lg': 'lg', 'lb': 'lb', 'fiu': 'fiu', 'ln': 'ln', 'lo': 'lo', 'li': 'li', 'byn': 'byn', 'lt': 'lt', 'lu': 'lu', 'yi': 'yi', 'non': 'non', 'ceb': 'ceb', 'yo': 'yo', 'nog': 'nog', 'bat': 'bat', 'dak': 'dak', 'dar': 'dar', 'day': 'day', 'ssa': 'ssa', 'kpe': 'kpe', 'el': 'el', 'eo': 'eo', 'en': 'en', 'lam': 'lam', 'ee': 'ee', 'mdf': 'mdf', 'fr': 'fr', 'mdr': 'mdr', 'et': 'et', 'es': 'es', 'ru': 'ru', 'gon': 'gon', 'goh': 'goh', 'sms': 'sms', 'smn': 'smn', 'smj': 'smj', 'smi': 'smi', 'got': 'got', 'rn': 'rn', 'ro': 'ro', 'dsb': 'dsb', 'sma': 'sma', 'gor': 'gor', 'ast': 'ast', 'wal': 'wal', 'crh': 'crh', 'ath': 'ath', 'gez': 'gez', 'xh': 'xh', 'ff': 'ff', 'mak': 'mak', 'zap': 'zap', 'kok': 'kok', 'kos': 'kos', 'fo': 'fo', 'tog': 'tog', 'hup': 'hup', 'udm': 'udm', 'bej': 'bej', 'bem': 'bem', 'tsi': 'tsi', 'ber': 'ber', 'nzi': 'nzi', 'sai': 'sai', 'ang': 'ang', 'pra': 'pra', 'bho': 'bho', 'sal': 'sal', 'pro': 'pro', 'raj': 'raj', 'sad': 'sad', 'rar': 'rar', 'rap': 'rap', 'sas': 'sas', 'car': 'car', 'min': 'min', 'mic': 'mic', 'efi': 'efi', 'arn': 'arn', 'ypk': 'ypk', 'mis': 'mis', 'kac': 'kac', 'kab': 'kab', 'kaa': 'kaa', 'kam': 'kam', 'kar': 'kar', 'kaw': 'kaw', 'tyv': 'tyv', 'awa': 'awa', 'ka': 'ka', 'doi': 'doi', 'kg': 'kg', 'kk': 'kk', 'kj': 'kj', 'ki': 'ki', 'ko': 'ko', 'kn': 'kn', 'km': 'km', 'kl': 'kl', 'ks': 'ks', 'kr': 'kr', 'kw': 'kw', 'kv': 'kv', 'ku': 'ku', 'ky': 'ky', 'tkl': 'tkl', 'bua': 'bua', 'mga': 'mga', 'hit': 'hit', 'dyu': 'dyu', 'de': 'de', 'da': 'da', 'dz': 'dz', 'ira': 'ira', 'dv': 'dv', 'hil': 'hil', 'him': 'him', 'gem': 'gem', 'crp': 'crp', 'qu': 'qu', 'bas': 'bas', 'gba': 'gba', 'bad': 'bad', 'ban': 'ban', 'bal': 'bal', 'bam': 'bam', 'shn': 'shn', 'bai': 'bai', 'arp': 'arp', 'art': 'art', 'arw': 'arw', 'arc': 'arc', 'sem': 'sem', 'sel': 'sel', 'nub': 'nub', 'btk': 'btk', 'lus': 'lus', 'mus': 'mus', 'lua': 'lua', 'iro': 'iro', 'lui': 'lui', 'mun': 'mun', 'lun': 'lun', 'luo': 'luo', 'wa': 'wa', 'tup': 'tup', 'jv': 'jv', 'tut': 'tut', 'tum': 'tum', 'ja': 'ja', 'cop': 'cop', 'ilo': 'ilo', 'la': 'la', 'gwi': 'gwi', 'und': 'und', 'tli': 'tli', 'ch': 'ch', 'co': 'co', 'ca': 'ca', 'ce': 'ce', 'pon': 'pon', 'cy': 'cy', 'sah': 'sah', 'cs': 'cs', 'cr': 'cr', 'bnt': 'bnt', 'cv': 'cv', 'cu': 'cu', 'lv': 'lv', 'dum': 'dum', 'pt': 'pt', 'dua': 'dua', 'fro': 'fro', 'yap': 'yap', 'frm': 'frm', 'tiv': 'tiv', 'yao': 'yao', 'pa': 'pa', 'xal': 'xal', 'pi': 'pi', 'pl': 'pl', 'gay': 'gay', 'oto': 'oto', 'ota': 'ota', 'hmn': 'hmn', 'an': 'an', 'gaa': 'gaa', 'fur': 'fur', 'khi': 'khi', 'sla': 'sla', 've': 've', 'vi': 'vi', 'is': 'is', 'kho': 'kho', 'iu': 'iu', 'it': 'it', 'vo': 'vo', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'ine': 'ine', 'ia': 'ia', 'jpr': 'jpr', 'ie': 'ie', 'id': 'id', 'ig': 'ig', 'pap': 'pap', 'ewo': 'ewo', 'pau': 'pau', 'paa': 'paa', 'pag': 'pag', 'sat': 'sat', 'pal': 'pal', 'pam': 'pam', 'phi': 'phi', 'cel': 'cel', 'phn': 'phn', 'nic': 'nic', 'nia': 'nia', 'dgr': 'dgr', 'syr': 'syr', 'niu': 'niu', 'jbo': 'jbo', 'nah': 'nah', 'sam': 'sam', 'hai': 'hai', 'gmh': 'gmh', 'cus': 'cus', 'wen': 'wen', 'ady': 'ady', 'elx': 'elx', 'ada': 'ada', 'haw': 'haw', 'bin': 'bin', 'bik': 'bik', 'mos': 'mos', 'moh': 'moh', 'tl': 'tl', 'tvl': 'tvl', 'ijo': 'ijo', 'kmb': 'kmb', 'peo': 'peo', 'umb': 'umb', 'tmh': 'tmh', 'fon': 'fon', 'hsb': 'hsb', 'be': 'be', 'bg': 'bg', 'ba': 'ba', 'ps': 'ps', 'bm': 'bm', 'bn': 'bn', 'bo': 'bo', 'bh': 'bh', 'bi': 'bi', 'br': 'br', 'bs': 'bs', 'om': 'om', 'oj': 'oj', 'ace': 'ace', 'ach': 'ach', 'oc': 'oc', 'kru': 'kru', 'srr': 'srr', 'kro': 'kro', 'krc': 'krc', 'nds': 'nds', 'os': 'os', 'or': 'or', 'sog': 'sog', 'nso': 'nso', 'son': 'son', 'vai': 'vai', 'wak': 'wak', 'lol': 'lol', 'mkh': 'mkh', 'loz': 'loz', 'gil': 'gil', 'was': 'was', 'war': 'war', 'hz': 'hz', 'hy': 'hy', 'sid': 'sid', 'hr': 'hr', 'ht': 'ht', 'hu': 'hu', 'hi': 'hi', 'ho': 'ho', 'Fallback': None, 'ha': 'ha', 'bug': 'bug', 'he': 'he', 'uz': 'uz', 'ur': 'ur', 'uk': 'uk', 'ug': 'ug', 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am', 'myv': 'myv', 'eu': 'eu', 'as': 'as', 'ar': 'ar', 'inh': 'inh', 'tpi': 'tpi', 'myn': 'myn', 'ay': 'ay', 'kha': 'kha', 'az': 'az', 'inc': 'inc', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'na': 'na', 'nb': 'nb', 'nai': 'nai', 'nd': 'nd', 'ne': 'ne', 'ng': 'ng', 'ny': 'ny', 'nap': 'nap', 'grb': 'grb', 'grc': 'grc', 'nr': 'nr', 'tig': 'tig', 'nv': 'nv', 'zun': 'zun', 'rw': 'rw', 'cpe': 'cpe', 'cpf': 'cpf', 'cpp': 'cpp'} countries={'BD': 'BD', 'BE': 'BE', 'BF': 'BF', 'BG': 'BG', 'BA': 'BA', 'BB': 'BB', 'WF': 'WF', 'BM': 'BM', 'BN': 'BN', 'BO': 'BO', 'BH': 'BH', 'BI': 'BI', 'BJ': 'BJ', 'BT': 'BT', 'JM': 'JM', 'BV': 'BV', 'BW': 'BW', 'WS': 'WS', 'BR': 'BR', 'BS': 'BS', 'BY': 'BY', 'BZ': 'BZ', 'RU': 'RU', 'RW': 'RW', 'TL': 'TL', 'RE': 'RE', 'TM': 'TM', 'TJ': 'TJ', 'RO': 'RO', 'TK': 'TK', 'GW': 'GW', 'GU': 'GU', 'GT': 'GT', 'GS': 'GS', 'GR': 'GR', 'GQ': 'GQ', 'GP': 'GP', 'JP': 'JP', 'GY': 'GY', 'GF': 'GF', 'GE': 'GE', 'GD': 'GD', 'GB': 'GB', 'GA': 'GA', 'SV': 'SV', 'GN': 'GN', 'GM': 'GM', 'GL': 'GL', 'GI': 'GI', 'GH': 'GH', 'OM': 'OM', 'TN': 'TN', 'JO': 'JO', 'SP': 'SP', 'HR': 'HR', 'HT': 'HT', 'HU': 'HU', 'HK': 'HK', 'HN': 'HN', 'HM': 'HM', 'VE': 'VE', 'PR': 'PR', 'PS': 'PS', 'PW': 'PW', 'PT': 'PT', 'SJ': 'SJ', 'PY': 'PY', 'IQ': 'IQ', 'PA': 'PA', 'PF': 'PF', 'PG': 'PG', 'PE': 'PE', 'PK': 'PK', 'PH': 'PH', 'PN': 'PN', 'PL': 'PL', 'PM': 'PM', 'ZM': 'ZM', 'EH': 'EH', 'EE': 'EE', 'EG': 'EG', 'ZA': 'ZA', 'EC': 'EC', 'IT': 'IT', 'VN': 'VN', 'SB': 'SB', 'ET': 'ET', 'SO': 'SO', 'ZW': 'ZW', 'SA': 'SA', 'ES': 'ES', 'ER': 'ER', 'MD': 'MD', 'MG': 'MG', 'MA': 'MA', 'MC': 'MC', 'UZ': 'UZ', 'MM': 'MM', 'ML': 'ML', 'MO': 'MO', 'MN': 'MN', 'MH': 'MH', 'MK': 'MK', 'MU': 'MU', 'MT': 'MT', 'MW': 'MW', 'MV': 'MV', 'MQ': 'MQ', 'MP': 'MP', 'MS': 'MS', 'MR': 'MR', 'UG': 'UG', 'MY': 'MY', 'MX': 'MX', 'IL': 'IL', 'FR': 'FR', 'IO': 'IO', 'SH': 'SH', 'FI': 'FI', 'FJ': 'FJ', 'FK': 'FK', 'FM': 'FM', 'FO': 'FO', 'NI': 'NI', 'NL': 'NL', 'NO': 'NO', 'NA': 'NA', 'VU': 'VU', 'NC': 'NC', 'NE': 'NE', 'NF': 'NF', 'NG': 'NG', 'NZ': 'NZ', 'NP': 'NP', 'NR': 'NR', 'NU': 'NU', 'CK': 'CK', 'CI': 'CI', 'CH': 'CH', 'CO': 'CO', 'CN': 'CN', 'CM': 'CM', 'CL': 'CL', 'CC': 'CC', 'CA': 'CA', 'CG': 'CG', 'CF': 'CF', 'CD': 'CD', 'CZ': 'CZ', 'CY': 'CY', 'CX': 'CX', 'CR': 'CR', 'Fallback': None, 'CV': 'CV', 'CU': 'CU', 'SZ': 'SZ', 'SY': 'SY', 'KG': 'KG', 'KE': 'KE', 'SR': 'SR', 'KI': 'KI', 'KH': 'KH', 'KN': 'KN', 'KM': 'KM', 'ST': 'ST', 'SK': 'SK', 'KR': 'KR', 'SI': 'SI', 'KP': 'KP', 'KW': 'KW', 'SN': 'SN', 'SM': 'SM', 'SL': 'SL', 'SC': 'SC', 'KZ': 'KZ', 'KY': 'KY', 'SG': 'SG', 'SE': 'SE', 'SD': 'SD', 'DO': 'DO', 'DM': 'DM', 'DJ': 'DJ', 'DK': 'DK', 'VG': 'VG', 'DE': 'DE', 'YE': 'YE', 'DZ': 'DZ', 'US': 'US', 'UY': 'UY', 'YU': 'YU', 'YT': 'YT', 'UM': 'UM', 'LB': 'LB', 'LC': 'LC', 'LA': 'LA', 'TV': 'TV', 'TW': 'TW', 'TT': 'TT', 'TR': 'TR', 'LK': 'LK', 'LI': 'LI', 'LV': 'LV', 'TO': 'TO', 'LT': 'LT', 'LU': 'LU', 'LR': 'LR', 'LS': 'LS', 'TH': 'TH', 'TF': 'TF', 'TG': 'TG', 'TD': 'TD', 'TC': 'TC', 'LY': 'LY', 'VA': 'VA', 'VC': 'VC', 'AE': 'AE', 'AD': 'AD', 'AG': 'AG', 'AF': 'AF', 'AI': 'AI', 'VI': 'VI', 'IS': 'IS', 'IR': 'IR', 'AM': 'AM', 'AL': 'AL', 'AO': 'AO', 'AN': 'AN', 'AQ': 'AQ', 'AS': 'AS', 'AR': 'AR', 'AU': 'AU', 'AT': 'AT', 'AW': 'AW', 'IN': 'IN', 'TZ': 'TZ', 'AZ': 'AZ', 'IE': 'IE', 'ID': 'ID', 'UA': 'UA', 'QA': 'QA', 'MZ': 'MZ'} months=['Jerrey-geuree', 'Toshiaght-arree', 'Mayrnt', 'Averil', 'Boaldyn', 'Mean-souree', 'Jerrey-souree', 'Luanistyn', 'Mean-fouyir', 'Jerrey-fouyir', 'Mee Houney', 'Mee ny Nollick'] abbrMonths=['J-guer', 'T-arree', 'Mayrnt', 'Avrril', 'Boaldyn', 'M-souree', 'J-souree', 'Luanistyn', 'M-fouyir', 'J-fouyir', 'M.Houney', 'M.Nollick'] days=['Jelhein', 'Jemayrt', 'Jercean', 'Jerdein', 'Jeheiney', 'Jesarn', 'Jedoonee'] abbrDays=['Jel', 'Jem', 'Jerc', 'Jerd', 'Jeh', 'Jes', 'Jed'] dateFormats={'medium': '%%(abbrmonthname)s %d,%y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg633turbogears/i18n/data/gv_GB.pyc; BEc @s5hdd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<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/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<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/<d0d0<d1d1<d2d2<d3d3<d4d4<d5d5<d6d6<d7d7<d8d8<d9d9<d:d:<d;d;<d<d<<d=d=<d>d><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<de<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd><d?d?<d@d@<dAdA<dBdB<dCdC<dDdD<dEdE<dFdF<dGdG<dHdH<dIdI<dJdJ<dKdK<dLdL<dMdM<dNdN<dOdO<dPdP<dQdQ<dRdR<dSdS<dTdT<dUdU<dVdV<dWdW<dXdX<dYdY<dZdZ<d[d[<d\d\<d]d]<d^d^<d_d_<d`d`<dada<dbdb<dcdc<dddd<dede<dfdf<dgdg<dhdh<didi<djdj<dkdk<dldl<dmdm<de<dndn<dodo<dpdp<dqdq<drdr<dsds<dtdt<dudu<dvdv<dwdw<dxdx<dydy<dzdz<d{d{<d|d|<d}d}<d~d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd***PKP6vqEEturbogears/i18n/data/he.py# Formatting configuration for locale he languages={'el': u'\u05d9\u05d5\u05d5\u05e0\u05d9\u05ea', 'en': u'\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea', 'zh': u'\u05e1\u05d9\u05e0\u05d9\u05ea', 'it': u'\u05d0\u05d9\u05d8\u05dc\u05e7\u05d9\u05ea', 'ar': u'\u05e2\u05e8\u05d1\u05d9\u05ea', 'cs': u"\u05e6'\u05db\u05d9\u05ea", 'et': u'\u05d0\u05e1\u05d8\u05d5\u05e0\u05d9\u05ea', 'es': u'\u05e1\u05e4\u05e8\u05d3\u05d9\u05ea', 'ru': u'\u05e8\u05d5\u05e1\u05d9\u05ea', 'nl': u'\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05ea', 'pt': u'\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea', 'no': u'\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05ea', 'tr': u'\u05d8\u05d5\u05e8\u05e7\u05d9\u05ea', 'lv': u'\u05dc\u05d8\u05d1\u05d9\u05ea', 'lt': u'\u05dc\u05d9\u05d8\u05d0\u05d9\u05ea', 'ro': u'\u05e8\u05d5\u05de\u05e0\u05d9\u05ea', 'pl': u'\u05e4\u05d5\u05dc\u05e0\u05d9\u05ea', 'fr': u'\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea', 'bg': u'\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05ea', 'hr': u'\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05ea', 'de': u'\u05d2\u05e8\u05de\u05e0\u05d9\u05ea', 'da': u'\u05d3\u05e0\u05d9\u05ea', 'fi': u'\u05e4\u05d9\u05e0\u05d9\u05ea', 'hu': u'\u05d4\u05d5\u05e0\u05d2\u05e8\u05d9\u05ea', 'ja': u'\u05d9\u05e4\u05e0\u05d9\u05ea', 'he': u'\u05e2\u05d1\u05e8\u05d9\u05ea', 'ko': u'\u05e7\u05d5\u05e8\u05d9\u05d0\u05e0\u05d9\u05ea', 'sv': u'\u05e9\u05d5\u05d5\u05d3\u05d9\u05ea', 'sk': u'\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05ea', 'sl': u'\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05ea'} countries={'BD': u'\u05d1\u05e0\u05d2\u05dc\u05d3\u05e9', 'BE': u'\u05d1\u05dc\u05d2\u05d9\u05d4', 'BF': u'\u05d1\u05d5\u05e8\u05e7\u05d9\u05e0\u05d4 \u05e4\u05d0\u05e1\u05d5', 'BG': u'\u05d1\u05d5\u05dc\u05d2\u05e8\u05d9\u05d4', 'BA': u'\u05d1\u05d5\u05e1\u05e0\u05d9\u05d4 \u05d5\u05d4\u05e8\u05e6\u05d2\u05d5\u05d1\u05d9\u05e0\u05d4', 'BB': u'\u05d1\u05e8\u05d1\u05d3\u05d5\u05e1', 'WF': u'\u05d5\u05d0\u05dc\u05d9\u05e1 \u05d5\u05e4\u05d5\u05d8\u05d5\u05e0\u05d4', 'BM': u'\u05d1\u05e8\u05de\u05d5\u05d3\u05d4', 'BN': u'\u05d1\u05e8\u05d5\u05e0\u05d9\u05d9 \u05d3\u05d0\u05e8\u05e1\u05dc\u05d0\u05dd', 'BO': u'\u05d1\u05d5\u05dc\u05d9\u05d1\u05d9\u05d4', 'BH': u'\u05d1\u05d7\u05e8\u05d9\u05d9\u05df', 'BI': u'\u05d1\u05d5\u05e8\u05d5\u05e0\u05d3\u05d9', 'BJ': u'\u05d1\u05e0\u05d9\u05df', 'BT': u'\u05d1\u05d5\u05d8\u05d0\u05df', 'JM': u"\u05d2'\u05de\u05d9\u05d9\u05e7\u05d4", 'BV': u'\u05d4\u05d0\u05d9 \u05d1\u05d5\u05d1\u05d4', 'BW': u'\u05d1\u05d5\u05d8\u05e1\u05d5\u05d5\u05d0\u05e0\u05d4', 'WS': u'\u05e1\u05de\u05d5\u05d0\u05d4', 'BR': u'\u05d1\u05e8\u05d6\u05d9\u05dc', 'BS': u'\u05d1\u05d4\u05d0\u05de\u05d4', 'BY': u'\u05d1\u05dc\u05e8\u05d5\u05e1', 'BZ': u'\u05d1\u05dc\u05d9\u05d6', 'RU': u'\u05d7\u05d1\u05e8 \u05d4\u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05d4\u05e8\u05d5\u05e1\u05d9\u05d5\u05ea', 'RW': u'\u05e8\u05d5\u05d0\u05e0\u05d3\u05d4', 'TL': u'\u05de\u05d6\u05e8\u05d7 \u05d8\u05d9\u05de\u05d5\u05e8', 'RE': u'\u05e8\u05d0\u05d5\u05e0\u05d9\u05d5\u05df', 'TM': u'\u05d8\u05d5\u05e8\u05e7\u05de\u05e0\u05d9\u05e1\u05d8\u05df', 'TJ': u"\u05d8\u05d2'\u05d9\u05e7\u05d9\u05e1\u05d8\u05df", 'RO': u'\u05e8\u05d5\u05de\u05e0\u05d9\u05d4', 'TK': u'\u05d8\u05d5\u05e7\u05dc\u05d0\u05d5', 'GW': u'\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4-\u05d1\u05d9\u05e1\u05d0\u05d5', 'GU': u'\u05d2\u05d5\u05d0\u05dd', 'GT': u'\u05d2\u05d5\u05d5\u05d8\u05de\u05d0\u05dc\u05d4', 'GS': u"\u05d4\u05d0\u05d9 \u05d2'\u05d5\u05e8\u05d2'\u05d9\u05d4 \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05ea \u05d5\u05d0\u05d9\u05d9 \u05e1\u05e0\u05d3\u05d5\u05d5\u05d9\u05e5' \u05d4\u05d3\u05e8\u05d5\u05de\u05d9\u05d9\u05dd", 'GR': u'\u05d9\u05d5\u05d5\u05df', 'GQ': u'\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4 \u05d4\u05de\u05e9\u05d5\u05d5\u05e0\u05d9\u05ea', 'GP': u'\u05d2\u05d5\u05d5\u05d0\u05d3\u05dc\u05d5\u05e4', 'JP': u'\u05d9\u05e4\u05df', 'GY': u'\u05d2\u05d9\u05d0\u05e0\u05d4', 'GF': u'\u05d2\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea', 'GE': u'\u05d2\u05e8\u05d5\u05d6\u05d9\u05d4', 'GD': u'\u05d2\u05e8\u05e0\u05d3\u05d4', 'GB': u'\u05d1\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4', 'GA': u'\u05d2\u05d1\u05d5\u05df', 'SV': u'\u05d0\u05dc \u05e1\u05dc\u05d1\u05d0\u05d3\u05d5\u05e8', 'GN': u'\u05d2\u05d9\u05e0\u05d9\u05d0\u05d4', 'GM': u'\u05d2\u05de\u05d1\u05d9\u05d4', 'GL': u'\u05d2\u05e8\u05d9\u05e0\u05dc\u05e0\u05d3', 'GI': u'\u05d2\u05d9\u05d1\u05e8\u05dc\u05d8\u05e8', 'GH': u'\u05d2\u05d0\u05e0\u05d4', 'OM': u'\u05e2\u05d5\u05de\u05df', 'TN': u'\u05d8\u05d5\u05e0\u05d9\u05e1\u05d9\u05d4', 'JO': u'\u05d9\u05e8\u05d3\u05df', 'HR': u'\u05e7\u05e8\u05d5\u05d0\u05d8\u05d9\u05d4', 'HT': u'\u05d4\u05d0\u05d9\u05d8\u05d9', 'HU': u'\u05d4\u05d5\u05e0\u05d2\u05e8\u05d9\u05d4', 'HK': u'\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 S.A.R. \u05e9\u05dc \u05e1\u05d9\u05df', 'HN': u'\u05d4\u05d5\u05e0\u05d3\u05d5\u05e8\u05e1', 'HM': u'\u05d0\u05d9\u05d9 \u05d4\u05e8\u05d3 \u05d5\u05d0\u05d9\u05d9 \u05de\u05e7\u05d3\u05d5\u05e0\u05dc\u05e0\u05d3', 'VE': u'\u05d5\u05e0\u05e6\u05d5\u05d0\u05dc\u05d4', 'PR': u'\u05e4\u05d5\u05e8\u05d8\u05d5 \u05e8\u05d9\u05e7\u05d5', 'PS': u'\u05d4\u05e8\u05e9\u05d5\u05ea \u05d4\u05e4\u05dc\u05e9\u05ea\u05d9\u05e0\u05d9\u05ea', 'PW': u'\u05e4\u05dc\u05d0\u05d5', 'PT': u'\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05dc', 'SJ': u"\u05e1\u05d5\u05d5\u05dc\u05d1\u05d0\u05e8\u05d3 \u05d5\u05d6'\u05d0\u05df \u05de\u05d0\u05d9\u05d9\u05df", 'PY': u'\u05e4\u05e8\u05d0\u05d2\u05d5\u05d5\u05d0\u05d9', 'IQ': u'\u05e2\u05d9\u05e8\u05e7', 'PA': u'\u05e4\u05e0\u05de\u05d4', 'PF': u'\u05e4\u05d5\u05dc\u05d9\u05e0\u05d6\u05d9\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea', 'PG': u'\u05e4\u05e4\u05d5\u05d0\u05d4 \u05d2\u05d9\u05e0\u05d9\u05d0\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4', 'PE': u'\u05e4\u05e8\u05d5', 'PK': u'\u05e4\u05e7\u05d9\u05e1\u05d8\u05df', 'PH': u'\u05e4\u05d9\u05dc\u05d9\u05e4\u05d9\u05e0\u05d9\u05dd', 'PN': u'\u05e4\u05d9\u05d8\u05e7\u05d9\u05d9\u05e8\u05df', 'PL': u'\u05e4\u05d5\u05dc\u05d9\u05df', 'PM': u'\u05e1\u05e0\u05d8 \u05e4\u05d9\u05d9\u05e8 \u05d5\u05de\u05d9\u05e7\u05dc\u05d5\u05df', 'ZM': u'\u05d6\u05de\u05d1\u05d9\u05d4', 'EH': u'\u05e1\u05d4\u05e8\u05d4 \u05d4\u05de\u05e2\u05e8\u05d1\u05d9\u05ea', 'EE': u'\u05d0\u05e1\u05d8\u05d5\u05e0\u05d9\u05d4', 'EG': u'\u05de\u05e6\u05e8\u05d9\u05dd', 'ZA': u'\u05d3\u05e8\u05d5\u05dd \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4', 'EC': u'\u05d0\u05e7\u05d5\u05d5\u05d0\u05d3\u05d5\u05e8', 'IT': u'\u05d0\u05d9\u05d8\u05dc\u05d9\u05d4', 'VN': u'\u05d5\u05d9\u05d9\u05d8\u05e0\u05d0\u05dd', 'SB': u'\u05d0\u05d9\u05d9 \u05e9\u05dc\u05de\u05d4', 'ET': u'\u05d0\u05ea\u05d9\u05d5\u05e4\u05d9\u05d4', 'SO': u'\u05e1\u05d5\u05de\u05dc\u05d9\u05d4', 'ZW': u'\u05d6\u05d9\u05de\u05d1\u05d1\u05d5\u05d5\u05d4', 'SA': u'\u05e2\u05e8\u05d1 \u05d4\u05e1\u05e2\u05d5\u05d3\u05d9\u05ea', 'ES': u'\u05e1\u05e4\u05e8\u05d3', 'ER': u'\u05d0\u05e8\u05d9\u05ea\u05e8\u05d9\u05d0\u05d4', 'MD': u'\u05de\u05d5\u05dc\u05d3\u05d5\u05d1\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4', 'MG': u'\u05de\u05d3\u05d2\u05e1\u05e7\u05e8', 'MA': u'\u05de\u05e8\u05d5\u05e7\u05d5', 'MC': u'\u05de\u05d5\u05e0\u05e7\u05d5', 'UZ': u'\u05d0\u05d5\u05d6\u05d1\u05e7\u05d9\u05e1\u05d8\u05df', 'MM': u'\u05de\u05d9\u05e0\u05de\u05d0\u05e8', 'ML': u'\u05de\u05d0\u05dc', 'MO': u'\u05de\u05e7\u05d0\u05d5 S.A.R. \u05e9\u05dc \u05e1\u05d9\u05df', 'MN': u'\u05de\u05d5\u05e0\u05d2\u05d5\u05dc\u05d9', 'MH': u'\u05d0\u05d9\u05d9 \u05de\u05e8\u05e9\u05dc', 'MK': u'\u05de\u05e7\u05d3\u05d5\u05e0\u05d9\u05d4, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc', 'MU': u'\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1', 'MT': u'\u05de\u05dc\u05d8\u05d4', 'MW': u'\u05de\u05dc\u05d0\u05d5\u05d5\u05d9', 'MV': u'\u05de\u05dc\u05d3\u05d9\u05d1\u05d0\u05e1', 'MQ': u'\u05de\u05e8\u05d8\u05d9\u05e0\u05d9\u05e7', 'MP': u'\u05d0\u05d9\u05d9 \u05de\u05e8\u05d9\u05d0\u05e0\u05d4 \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05d9\u05dd', 'MS': u'\u05de\u05d5\u05e0\u05d8\u05e1\u05e8\u05d0\u05d8', 'MR': u'\u05de\u05d0\u05d5\u05e8\u05d9\u05d8\u05e0\u05d9\u05d4', 'UG': u'\u05d0\u05d5\u05d2\u05e0\u05d3\u05d4', 'MY': u'\u05de\u05dc\u05d6\u05d9\u05d4', 'MX': u'\u05de\u05db\u05e1\u05d9\u05e7\u05d5', 'IL': u'\u05d9\u05e9\u05e8\u05d0\u05dc', 'FR': u'\u05e6\u05e8\u05e4\u05ea', 'IO': u'\u05d4\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d4\u05d1\u05e8\u05d9\u05d8\u05d9\u05ea \u05d1\u05d0\u05d5\u05e7\u05d9\u05e0\u05d5\u05e1 \u05d4\u05d4\u05d5\u05d3\u05d9', 'SH': u'\u05e1\u05d9\u05d9\u05e0\u05d8 \u05d4\u05dc\u05e0\u05d4', 'FI': u'\u05e4\u05d9\u05e0\u05dc\u05e0\u05d3', 'FJ': u"\u05e4\u05d9\u05d2'\u05d9", 'FK': u'\u05d0\u05d9\u05d9 \u05e4\u05d5\u05e7\u05dc\u05e0\u05d3', 'FM': u'\u05de\u05d0\u05d5\u05e8\u05d9\u05e6\u05d9\u05d5\u05e1, \u05d4\u05de\u05d3\u05d9\u05e0\u05d5\u05ea \u05d4\u05de\u05d0\u05d5\u05d2\u05d3\u05d5\u05ea \u05e9\u05dc', 'FO': u'\u05d0\u05d9\u05d9 \u05e4\u05d0\u05e8\u05d5', 'NI': u'\u05e0\u05d9\u05e7\u05e8\u05d0\u05d2\u05d5\u05d5\u05d4', 'NL': u'\u05d4\u05d5\u05dc\u05e0\u05d3', 'NO': u'\u05e0\u05d5\u05e8\u05d5\u05d5\u05d2\u05d9\u05d4', 'NA': u'\u05e0\u05de\u05d9\u05d1\u05d9\u05d4', 'VU': u'\u05d5\u05d0\u05e0\u05d5\u05d0\u05d8\u05d5', 'NC': u'\u05e7\u05dc\u05d3\u05d5\u05e0\u05d9\u05d4 \u05d4\u05d7\u05d3\u05e9', 'NE': u"\u05e0\u05d9\u05d6'\u05e8", 'NF': u'\u05d0\u05d9\u05d9 \u05e0\u05d5\u05e8\u05e4\u05e7', 'NG': u'\u05e0\u05d9\u05d2\u05e8\u05d9\u05d4', 'NZ': u'\u05e0\u05d9\u05d5 \u05d6\u05d9\u05dc\u05e0\u05d3', 'NP': u'\u05e0\u05e4\u05d0\u05dc', 'NR': u'\u05e0\u05d0\u05d5\u05e8\u05d5', 'NU': u'\u05e0\u05d9\u05d5\u05d5\u05d4', 'CK': u'\u05d0\u05d9\u05d9 \u05e7\u05d5\u05e7', 'CI': u'\u05d7\u05d5\u05e3 \u05d4\u05e9\u05e0\u05d4\u05d1', 'CH': u'\u05e9\u05d5\u05d5\u05d9\u05d9\u05e5', 'CO': u'\u05e7\u05d5\u05dc\u05d5\u05de\u05d1\u05d9\u05d4', 'CN': u'\u05e1\u05d9\u05df', 'CM': u'\u05e7\u05de\u05e8\u05d5\u05df', 'CL': u"\u05e6'\u05d9\u05dc\u05d4", 'CC': u'\u05d0\u05d9\u05d9 \u05e7\u05d5\u05e7\u05d5\u05e1 (\u05e7\u05d9\u05dc\u05d9\u05e0\u05d2)', 'CA': u'\u05e7\u05e0\u05d3\u05d4', 'CG': u'\u05e7\u05d5\u05e0\u05d2\u05d5', 'CF': u'\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05e9\u05dc \u05de\u05e8\u05db\u05d6 \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4', 'CD': u'\u05e7\u05d5\u05e0\u05d2\u05d5, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05de\u05d5\u05e7\u05e8\u05d8\u05d9\u05ea \u05e9\u05dc', 'CZ': u"\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05e6'\u05db\u05d9\u05ea", 'CY': u'\u05e7\u05e4\u05e8\u05d9\u05e1\u05d9\u05df', 'CX': u'\u05d0\u05d9\u05d9 \u05db\u05e8\u05d9\u05e1\u05d8\u05de\u05e1', 'CR': u'\u05e7\u05d5\u05e1\u05d8\u05d4 \u05e8\u05d9\u05e7\u05d4', 'CV': u'\u05e7\u05d9\u05d9\u05e4 \u05d5\u05e8\u05d3\u05d4', 'CU': u'\u05e7\u05d5\u05d1\u05d4', 'SZ': u'\u05e1\u05d5\u05d5\u05d6\u05d9\u05dc\u05e0\u05d3', 'SY': u'\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05e2\u05e8\u05d1\u05d9\u05ea \u05d4\u05e1\u05d5\u05e8\u05d9\u05ea', 'KG': u'\u05e7\u05d9\u05e8\u05d2\u05d9\u05d6\u05e1\u05d8\u05df', 'KE': u'\u05e7\u05e0\u05d9\u05d4', 'SR': u'\u05e1\u05d5\u05e8\u05d9\u05e0\u05d0\u05dd', 'KI': u'\u05e7\u05d9\u05e8\u05d9\u05d1\u05d0\u05d8\u05d9', 'KH': u'\u05e7\u05de\u05d1\u05d5\u05d3\u05d9\u05d4', 'KN': u'\u05e1\u05e0\u05d8 \u05e7\u05d9\u05d8\u05e1 \u05d5\u05e0\u05d9\u05d1\u05e1', 'KM': u'\u05e7\u05d5\u05de\u05d5\u05e8\u05d5\u05e1', 'ST': u'\u05e1\u05df \u05ea\u05d5\u05de\u05d4 \u05d5\u05e4\u05e8\u05d9\u05e0\u05e1\u05d9\u05e4\u05d4', 'SK': u'\u05e1\u05dc\u05d5\u05d1\u05e7\u05d9\u05d4', 'KR': u'\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4, \u05d3\u05e8\u05d5\u05dd', 'SI': u'\u05e1\u05dc\u05d5\u05d1\u05e0\u05d9\u05d4', 'KP': u'\u05e7\u05d5\u05e8\u05d9\u05d0\u05d4, \u05e6\u05e4\u05d5\u05df', 'KW': u'\u05db\u05d5\u05d5\u05d9\u05ea', 'SN': u'\u05e1\u05e0\u05d2\u05dc', 'SM': u'\u05e1\u05df \u05de\u05e8\u05d9\u05e0\u05d5', 'SL': u'\u05e1\u05d9\u05d9\u05e8\u05d4 \u05dc\u05d0\u05d5\u05e0\u05d4', 'SC': u'\u05d0\u05d9\u05d9 \u05e1\u05d9\u05d9\u05e9\u05dc', 'KZ': u'\u05e7\u05d6\u05d7\u05e1\u05d8\u05df', 'KY': u'\u05d0\u05d9\u05d9 \u05e7\u05d9\u05d9\u05de\u05d0\u05df', 'SG': u'\u05e1\u05d9\u05e0\u05d2\u05e4\u05d5\u05e8', 'SE': u'\u05e9\u05d5\u05d5\u05d3\u05d9\u05d4', 'SD': u'\u05e1\u05d5\u05d3\u05df', 'DO': u'\u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05e0\u05d9\u05ea', 'DM': u'\u05d3\u05d5\u05de\u05d9\u05e0\u05d9\u05e7\u05d4', 'DJ': u"\u05d2'\u05d9\u05d1\u05d5\u05d8\u05d9", 'DK': u'\u05d3\u05e0\u05de\u05e8\u05e7', 'VG': u'\u05d0\u05d9\u05d9 \u05d4\u05d1\u05ea\u05d5\u05dc\u05d4 \u05d4\u05d1\u05e8\u05d9\u05d8\u05d9\u05d9\u05dd', 'DE': u'\u05d2\u05e8\u05de\u05e0\u05d9\u05d4', 'YE': u'\u05ea\u05d9\u05de\u05df', 'DZ': u"\u05d0\u05dc\u05d2'\u05d9\u05e8\u05d9\u05d4", 'US': u'\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea', 'UY': u'\u05d0\u05d5\u05e8\u05d5\u05d2\u05d5\u05d5\u05d0\u05d9', 'YU': u'\u05d9\u05d5\u05d2\u05d5\u05e1\u05dc\u05d1\u05d9\u05d4', 'YT': u'\u05de\u05d9\u05d5\u05d8\u05d4', 'UM': u'\u05d0\u05d9\u05d9\u05dd \u05e7\u05d8\u05e0\u05d9\u05dd \u05e9\u05dc\u05d7\u05d5\u05e3 \u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05e8\u05d9\u05ea', 'LB': u'\u05dc\u05d1\u05e0\u05d5\u05df', 'LC': u'\u05e1\u05e0\u05d8 \u05dc\u05d5\u05e9\u05d9\u05d4', 'LA': u'\u05dc\u05d0\u05d5\u05e1, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d3\u05de\u05e7\u05d5\u05e8\u05d8\u05d9\u05ea \u05d4\u05e2\u05de\u05de\u05d9\u05ea', 'TV': u'\u05d8\u05d5\u05d1\u05d0\u05dc\u05d5', 'TW': u'\u05d8\u05d9\u05d5\u05d5\u05d0\u05df', 'TT': u'\u05d8\u05e8\u05d9\u05e0\u05d9\u05d3\u05d3 \u05d5\u05d8\u05d5\u05d1\u05d2\u05d5', 'TR': u'\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4', 'LK': u'\u05e1\u05e8\u05d9 \u05dc\u05e0\u05e7\u05d4', 'LI': u'\u05dc\u05d9\u05db\u05d8\u05e0\u05e9\u05d8\u05d9\u05d9\u05df', 'LV': u'\u05dc\u05d8\u05d1\u05d9\u05d4', 'TO': u'\u05d8\u05d5\u05e0\u05d2\u05d4', 'LT': u'\u05dc\u05d9\u05d8\u05d0', 'LU': u'\u05dc\u05d5\u05e7\u05e1\u05de\u05d1\u05d5\u05e8\u05d2', 'LR': u'\u05dc\u05d9\u05d1\u05e8\u05d9\u05d4', 'LS': u'\u05dc\u05e1\u05d5\u05d8\u05d5', 'TH': u'\u05ea\u05d0\u05d9\u05dc\u05e0\u05d3', 'TF': u'\u05d8\u05e8\u05d9\u05d8\u05d5\u05e8\u05d9\u05d5\u05ea \u05d3\u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e9\u05dc \u05e6\u05e8\u05e4\u05ea', 'TG': u'\u05d8\u05d5\u05d2\u05d5', 'TD': u"\u05e6'\u05d0\u05d3", 'TC': u'\u05d0\u05d9\u05d9 \u05d8\u05d5\u05e8\u05e7\u05e1 \u05d5\u05e7\u05d0\u05d9\u05e7\u05d5\u05e1', 'LY': u'\u05dc\u05d5\u05d1', 'VA': u'\u05d4\u05d5\u05d5\u05ea\u05d9\u05e7\u05df', 'VC': u'\u05e1\u05e0\u05d8 \u05d5\u05d9\u05e0\u05e1\u05e0\u05d8 \u05d5\u05d4\u05d2\u05e8\u05e0\u05d3\u05d9\u05e0\u05d9\u05dd', 'AE': u'\u05d0\u05d9\u05d7\u05d5\u05d3 \u05d4\u05d0\u05de\u05d9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05e2\u05e8\u05d1\u05d9\u05d5\u05ea', 'AD': u'\u05d0\u05e0\u05d3\u05d5\u05e8\u05d4', 'AG': u'\u05d0\u05e0\u05d8\u05d9\u05d2\u05d5\u05d0\u05d4 \u05d5\u05d1\u05e8\u05d1\u05d5\u05d3\u05d4', 'AF': u'\u05d0\u05e4\u05d2\u05e0\u05d9\u05e1\u05d8\u05df', 'AI': u'\u05d0\u05e0\u05d2\u05d9\u05dc\u05d4', 'VI': u'\u05d0\u05d9\u05d9 \u05d4\u05d1\u05ea\u05d5\u05dc\u05d4 \u05d4\u05d0\u05de\u05e8\u05d9\u05e7\u05e0\u05d9\u05d9\u05dd', 'IS': u'\u05d0\u05d9\u05e1\u05dc\u05e0\u05d3', 'IR': u'\u05d0\u05d9\u05e8\u05d0\u05df, \u05d4\u05e8\u05e4\u05d5\u05d1\u05dc\u05d9\u05e7\u05d4 \u05d4\u05d0\u05d9\u05e1\u05dc\u05de\u05d9\u05ea', 'AM': u'\u05d0\u05e8\u05de\u05e0\u05d9\u05d4', 'AL': u'\u05d0\u05dc\u05d1\u05e0\u05d9\u05d4', 'AO': u'\u05d0\u05e0\u05d2\u05d5\u05dc', 'AN': u'\u05d4\u05d0\u05d9\u05e0\u05d8\u05d9\u05dc\u05d9\u05dd \u05d4\u05d4\u05d5\u05dc\u05e0\u05d3\u05d9\u05d9\u05dd', 'AQ': u'\u05d0\u05e0\u05d8\u05d0\u05e8\u05e7\u05d8\u05d9\u05e7\u05d4', 'AS': u'\u05e1\u05de\u05d5\u05d0\u05d4 \u05d4\u05d0\u05de\u05e8\u05d9\u05e7\u05e0\u05d9\u05ea', 'AR': u'\u05d0\u05e8\u05d2\u05e0\u05d8\u05d9\u05e0\u05d4', 'AU': u'\u05d0\u05d5\u05e1\u05d8\u05e8\u05dc\u05d9\u05d4', 'AT': u'\u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4', 'AW': u'\u05d0\u05e8\u05d5\u05d1\u05d4', 'IN': u'\u05d4\u05d5\u05d3\u05d5', 'TZ': u'\u05d8\u05e0\u05d6\u05e0\u05d9\u05d4', 'AZ': u"\u05d0\u05d6\u05e8\u05d1\u05d9\u05d9\u05d2'\u05df", 'IE': u'\u05d0\u05d9\u05e8\u05dc\u05e0\u05d3', 'ID': u'\u05d0\u05d9\u05e0\u05d3\u05d5\u05e0\u05d6\u05d9\u05d4', 'UA': u'\u05d0\u05d5\u05e7\u05e8\u05d0\u05d9\u05e0\u05d4', 'QA': u'\u05e7\u05d8\u05e8', 'MZ': u'\u05de\u05d5\u05d6\u05de\u05d1\u05d9\u05e7'} months=[u'\u05d9\u05e0\u05d5\u05d0\u05e8', u'\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8', u'\u05de\u05e8\u05e5', u'\u05d0\u05e4\u05e8\u05d9\u05dc', u'\u05de\u05d0\u05d9', u'\u05d9\u05d5\u05e0\u05d9', u'\u05d9\u05d5\u05dc\u05d9', u'\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8', u'\u05e1\u05e4\u05d8\u05de\u05d1\u05e8', u'\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8', u'\u05e0\u05d5\u05d1\u05de\u05d1\u05e8', u'\u05d3\u05e6\u05de\u05d1\u05e8'] abbrMonths=[u'\u05d9\u05e0\u05d5', u'\u05e4\u05d1\u05e8', u'\u05de\u05e8\u05e5', u'\u05d0\u05e4\u05e8', u'\u05de\u05d0\u05d9', u'\u05d9\u05d5\u05e0', u'\u05d9\u05d5\u05dc', u'\u05d0\u05d5\u05d2', u'\u05e1\u05e4\u05d8', u'\u05d0\u05d5\u05e7', u'\u05e0\u05d5\u05d1', u'\u05d3\u05e6\u05de'] days=[u'\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9', u'\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9', u'\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9', u'\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9', u'\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9', u'\u05e9\u05d1\u05ea', u'\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df'] abbrDays=[u'\u05d1', u'\u05d2', u'\u05d3', u'\u05d4', u'\u05d5', u'\u05e9', u'\u05d0'] dateFormats={'medium': '%d/%m/%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6:C--turbogears/i18n/data/he.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdEd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didjd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didjd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdDd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdDd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFd:<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFd:<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdq<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9<dde<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd?<dd<d d=<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCd<dDd<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<ded<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|dS<d}d <d~d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdq<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd9<dde<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd?<dd<d d=<d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCd<dDd<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<ded<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|dS<d}d <d~d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdGd?<d@dA<dBdC<dDdE<dFdGd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdDd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdDd?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdI<d?d@<dAdB<dCdD<dEdF<dGdH<d?d@<dAdB<dCdD<dEdF<dGdHS(?sknuಕನ್ನಡsINu ಭಾರತuಜನವರೀuಫೆಬ್ರವರೀuಮಾರ್ಚ್uಎಪ್ರಿಲ್uಮೆu ಜೂನ್u ಜುಲೈuಆಗಸ್ಟ್uಸಪ್ಟೆಂಬರ್uಅಕ್ಟೋಬರ್uನವೆಂಬರ್uಡಿಸೆಂಬರ್uಸೋಮವಾರuಮಂಗಳವಾರuಬುಧವಾರuಗುರುವಾರuಶುಕ್ರವಾರuಶನಿವಾರuರವಿವಾರuಸೋ.uಮಂ.uಬು.uಗು.uಶು.u ಶನಿ.uರ.smediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\kn.pys?s***PKP678turbogears/i18n/data/kn_IN.py# Formatting configuration for locale kn_IN languages={'kn': u'\u0c95\u0ca8\u0ccd\u0ca8\u0ca1'} countries={'IN': u'\u0cad\u0cbe\u0cb0\u0ca4'} months=[u'\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0', u'\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0', u'\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd', u'\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd', u'\u0cae\u0cc6', u'\u0c9c\u0cc2\u0ca8\u0ccd', u'\u0c9c\u0cc1\u0cb2\u0cc8', u'\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd', u'\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd', u'\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd'] abbrMonths=[u'\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0', u'\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0', u'\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd', u'\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd', u'\u0cae\u0cc6', u'\u0c9c\u0cc2\u0ca8\u0ccd', u'\u0c9c\u0cc1\u0cb2\u0cc8', u'\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd', u'\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd', u'\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd', u'\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd'] days=[u'\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0', u'\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0', u'\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0', u'\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0', u'\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0', u'\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0', u'\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0'] abbrDays=[u'\u0cb8\u0ccb.', u'\u0cae\u0c82.', u'\u0cac\u0cc1.', u'\u0c97\u0cc1.', u'\u0cb6\u0cc1.', u'\u0cb6\u0ca8\u0cbf.', u'\u0cb0.'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6Sppturbogears/i18n/data/kn_IN.pyc; BEc @sHhddS(?sknuಕನ್ನಡsINu ಭಾರತuಜನವರೀuಫೆಬ್ರವರೀuಮಾರ್ಚ್uಎಪ್ರಿಲ್uಮೆu ಜೂನ್u ಜುಲೈuಆಗಸ್ಟ್uಸಪ್ಟೆಂಬರ್uಅಕ್ಟೋಬರ್uನವೆಂಬರ್uಡಿಸೆಂಬರ್uಸೋಮವಾರuಮಂಗಳವಾರuಬುಧವಾರuಗುರುವಾರuಶುಕ್ರವಾರuಶನಿವಾರuರವಿವಾರuಸೋ.uಮಂ.uಬು.uಗು.uಶು.u ಶನಿ.uರ.smediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\kn_IN.pys?s***PKP6Mb<b<turbogears/i18n/data/ko.py# Formatting configuration for locale ko languages={'gv': u'\ub9f9\ud06c\uc2a4\uc5b4', 'gu': u'\uad6c\uc790\ub77c\ud2b8\uc5b4', 'gd': u'\uc2a4\ucf54\uac24\ub9ad\uc5b4', 'ga': u'\uc544\uc77c\ub79c\ub4dc\uc5b4', 'gn': u'\uad6c\uc544\ub77c\ub2c8\uc5b4', 'gl': u'\uac08\ub9ac\uc2dc\uc544\uc5b4', 'la': u'\ub77c\ud2f4\uc5b4', 'ln': u'\ub9c1\uac08\ub77c\uc5b4', 'lo': u'\ub77c\uc624\uc5b4', 'tt': u'\ud0c0\ud0c0\ub974\uc5b4', 'tr': u'\ud130\ud0a4\uc5b4', 'ts': u'\ud1b5\uac00\uc5b4', 'lv': u'\ub77c\ud2b8\ube44\uc544\uc5b4', 'to': u'\ud1b5\uac00\uc5b4', 'lt': u'\ub9ac\ud22c\uc544\ub2c8\uc544\uc5b4', 'tk': u'\ud22c\ub974\ud06c\uba58\uc5b4', 'th': u'\ud0dc\uad6d\uc5b4', 'ti': u'\ud2f0\uadf8\ub9ac\ub0d0\uc5b4', 'tg': u'\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4\uc5b4', 'te': u'\ud154\ub8e8\uad6c\uc5b4', 'haw': u'\ud558\uc640\uc774\uc5b4', 'yi': u'\uc774\ub514\uc2dc\uc5b4', 'yo': u'\uc694\ub8e8\ubc14\uc5b4', 'de': u'\ub3c5\uc77c\uc5b4', 'da': u'\ub374\ub9c8\ud06c\uc5b4', 'dz': u'\ubd80\ud0c4\uc5b4', 'st': u'\uc138\uc18c\ud1a0\uc5b4', 'qu': u'\ucf00\ucd94\uc544\uc5b4', 'el': u'\uadf8\ub9ac\uc2a4\uc5b4', 'eo': u'\uc5d0\uc2a4\ud398\ub780\ud1a0\uc5b4', 'en': u'\uc601\uc5b4', 'zh': u'\uc911\uad6d\uc5b4', 'za': u'\uc8fc\uc559\uc5b4', 'uk': u'\uc6b0\ud06c\ub77c\uc774\ub098\uc5b4', 'eu': u'\ubc14\uc2a4\ud06c\uc5b4', 'et': u'\uc5d0\uc2a4\ud1a0\ub2c8\uc544\uc5b4', 'es': u'\uc2a4\ud398\uc778\uc5b4', 'ru': u'\ub7ec\uc2dc\uc544\uc5b4', 'rw': u'\ubc18\ud22c\uc5b4(\ub8e8\uc644\ub2e4)', 'rm': u'\ub808\ud1a0\ub85c\ub9cc\uc5b4', 'rn': u'\ubc18\ud22c\uc5b4(\ubd80\ub8ec\ub514)', 'ro': u'\ub8e8\ub9c8\ub2c8\uc544\uc5b4', 'bn': u'\ubcb5\uace8\uc5b4', 'be': u'\ubca8\ub85c\ub8e8\uc2dc\uc5b4', 'bg': u'\ubd88\uac00\ub9ac\uc544\uc5b4', 'ba': u'\ubc14\uc288\ud0a4\ub974\uc5b4', 'wo': u'\uc62c\ub85c\ud504\uc5b4', 'jv': u'\uc790\ubc14\uc5b4', 'bo': u'\ud2f0\ubca0\ud2b8\uc5b4', 'bh': u'\ube44\ud558\ub974\uc5b4', 'bi': u'\ube44\uc2ac\ub77c\ub9c8\uc5b4', 'br': u'\ube0c\ub974\ud0c0\ub274\uc5b4', 'ja': u'\uc77c\ubcf8\uc5b4', 'om': u'\uc624\ub85c\ubaa8\uc5b4 (\uc544\ud310)', 'oc': u'\uc625\uc2dc\ud2b8\uc5b4', 'tw': u'\ud2b8\uc704\uc5b4', 'or': u'\uc624\ub9ac\uc57c\uc5b4', 'xh': u'\ubc18\ud22c\uc5b4(\ub0a8\uc544\ud504\ub9ac\uce74)', 'co': u'\ucf54\ub974\uc2dc\uce74\uc5b4', 'ca': u'\uce74\ud0c8\ub85c\ub2c8\uc544\uc5b4', 'cy': u'\uc6e8\uc77c\uc2a4\uc5b4', 'cs': u'\uccb4\ucf54\uc5b4', 'ps': u'\ud30c\uc2dc\ud1a0\uc5b4 (\ud478\uc2dc\ud1a0)', 'pt': u'\ud3ec\ub974\ud22c\uce7c\uc5b4', 'tl': u'\ud0c0\uac08\ub85c\uadf8\uc5b4', 'pa': u'\ud380\uc7a1\uc5b4', 'vi': u'\ubca0\ud2b8\ub0a8\uc5b4', 'pl': u'\ud3f4\ub780\ub4dc\uc5b4', 'hy': u'\uc544\ub974\uba54\ub2c8\uc544\uc5b4', 'hr': u'\ud06c\ub85c\uc544\ud2f0\uc544\uc5b4', 'iu': u'\uc774\ub205\ud2f0\ud22c\ud2b8\uc5b4', 'hu': u'\ud5dd\uac00\ub9ac\uc5b4', 'hi': u'\ud78c\ub514\uc5b4', 'ha': u'\ud558\uc6b0\uc790\uc5b4', 'he': u'\ud788\ube0c\ub9ac\uc5b4', 'mg': u'\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974\uc5b4', 'uz': u'\uc6b0\uc988\ubca0\ud06c\uc5b4', 'ml': u'\ub9d0\ub77c\uc584\ub78c\uc5b4', 'mo': u'\ubab0\ub2e4\ube44\uc544\uc5b4', 'mn': u'\ubabd\uace8\uc5b4', 'mi': u'\ub9c8\uc624\ub9ac\uc5b4', 'ik': u'\uc774\ub204\ud53c\uc544\ud06c\uc5b4', 'mk': u'\ub9c8\ucf00\ub3c4\ub2c8\uc544\uc5b4', 'ur': u'\uc6b0\ub974\ub450\uc5b4', 'mt': u'\ubab0\ud0c0\uc5b4', 'ms': u'\ub9d0\ub808\uc774\uc5b4', 'mr': u'\ub9c8\ub77c\ud2f0\uc5b4', 'ug': u'\uc704\uad6c\ub974\uc5b4', 'ta': u'\ud0c0\ubc00\uc5b4', 'my': u'\ubc84\ub9c8\uc5b4', 'aa': u'\uc544\ud30c\ub974\uc5b4', 'ab': u'\uc555\uce74\uc988\uc5b4', 'ss': u'\uc2dc\uc2a4\uc640\ud2f0\uc5b4', 'af': u'\ub0a8\uc544\uacf5 \uacf5\uc6a9\uc5b4', 'tn': u'\uc138\uce20\uc640\ub098\uc5b4', 'sw': u'\uc2a4\uc640\ud790\ub9ac\uc5b4', 'is': u'\uc544\uc774\uc2ac\ub780\ub4dc\uc5b4', 'am': u'\uc554\ud558\ub77c\uc5b4', 'it': u'\uc774\ud0c8\ub9ac\uc544\uc5b4', 'sv': u'\uc2a4\uc6e8\ub374\uc5b4', 'ia': u'\uc778\ud130\ub9c1\uac70', 'as': u'\uc544\uc0d8\uc5b4', 'ar': u'\uc544\ub78d\uc5b4', 'su': u'\uc21c\ub2e8\uc5b4', 'zu': u'\uc904\ub8e8\uc5b4', 'ay': u'\uc544\uc774\ub9c8\ub77c\uc5b4', 'az': u'\uc544\uc81c\ub974\ubc14\uc774\uc794\uc5b4', 'ie': u'\uc778\ud130\ub9c1\uac8c\uc5b4', 'id': u'\uc778\ub3c4\ub124\uc2dc\uc544\uc5b4', 'sk': u'\uc2ac\ub85c\ubc14\ud0a4\uc544\uc5b4', 'nl': u'\ub124\ub35c\ub780\ub4dc\uc5b4', 'nn': u'\ub258\ub178\ub974\uc2a4\ud06c \ub178\ub974\uc6e8\uc774\uc5b4', 'no': u'\ub178\ub974\uc6e8\uc774\uc5b4', 'na': u'\ub098\uc6b0\ub8e8\uc5b4', 'nb': u'\ubcf4\ud06c\ub9d0 \ub178\ub974\uc6e8\uc774\uc5b4', 'ne': u'\ub124\ud314\uc5b4', 'vo': u'\ubcfc\ub77c\ud4cc\ud06c\uc5b4', 'so': u'\uc18c\ub9d0\ub9ac\uc544\uc5b4', 'fr': u'\ud504\ub791\uc2a4\uc5b4', 'sm': u'\uc0ac\ubaa8\uc544\uc5b4', 'fy': u'\ud504\ub9ac\uc9c0\uc544\uc5b4', 'fa': u'\uc774\ub780\uc5b4', 'fi': u'\ud540\ub780\ub4dc\uc5b4', 'fj': u'\ud53c\uc9c0\uc5b4', 'sa': u'\uc0b0\uc2a4\ud06c\ub9ac\ud2b8\uc5b4', 'fo': u'\ud398\ub85c\uc2a4\uc5b4', 'ka': u'\uadf8\ub8e8\uc9c0\uc57c\uc5b4', 'kk': u'\uce74\uc790\ud750\uc5b4', 'sr': u'\uc138\ub974\ube44\uc544\uc5b4', 'sq': u'\uc54c\ubc14\ub2c8\uc544\uc5b4', 'ko': u'\ud55c\uad6d\uc5b4', 'kn': u'\uce74\ub098\ub2e4\uc5b4', 'km': u'\uce84\ubcf4\ub514\uc544\uc5b4', 'kl': u'\uadf8\ub9b0\ub79c\ub4dc\uc5b4', 'ks': u'\uce74\uc288\ubbf8\ub974\uc5b4', 'si': u'\uc2a4\ub9ac\ub791\uce74\uc5b4', 'sh': u'\uc138\ub974\ubcf4\ud06c\ub85c\uc544\ud2f0\uc544\uc5b4', 'kw': u'\ucf58\uc6d4\uc5b4', 'sn': u'\uc1fc\ub098\uc5b4', 'ku': u'\ud06c\ub974\ub4dc\uc5b4', 'sl': u'\uc2ac\ub85c\ubca0\ub2c8\uc544\uc5b4', 'ky': u'\ud0a4\ub974\uae30\uc2a4\uc5b4', 'sg': u'\uc0b0\uace0\uc5b4', 'sd': u'\uc2e0\ub514\uc5b4'} countries={'BD': u'\ubc29\uae00\ub77c\ub370\uc2dc', 'BE': u'\ubca8\uae30\uc5d0', 'BF': u'\ubd80\ub974\ud0a4\ub098\ud30c\uc18c', 'BG': u'\ubd88\uac00\ub9ac\uc544', 'BA': u'\ubcf4\uc2a4\ub2c8\uc544 \ud5e4\ub974\uccb4\uace0\ube44\ub098', 'BB': u'\ubc14\ubca0\uc774\ub3c4\uc2a4', 'WF': u'\uc648\ub9ac\uc2a4-\ud478\ud22c\ub098 \uc81c\ub3c4', 'BM': u'\ubc84\ubba4\ub2e4', 'BN': u'\ube0c\ub8e8\ub098\uc774', 'BO': u'\ubcfc\ub9ac\ube44\uc544', 'BH': u'\ubc14\ub808\uc778', 'BI': u'\ubd80\ub8ec\ub514', 'BJ': u'\ubca0\ub139', 'BT': u'\ubd80\ud0c4', 'JM': u'\uc790\uba54\uc774\uce74', 'BV': u'\ubd80\ubca0', 'BW': u'\ubcf4\uce20\uc640\ub098', 'WS': u'\uc0ac\ubaa8\uc544', 'BR': u'\ube0c\ub77c\uc9c8', 'BS': u'\ubc14\ud558\ub9c8', 'BY': u'\ubca8\ub77c\ub8e8\uc2a4', 'BZ': u'\ubca8\ub9ac\uc988', 'RU': u'\ub7ec\uc2dc\uc544', 'RW': u'\ub974\uc644\ub2e4', 'TL': u'\ub3d9\ud2f0\ubaa8\ub974', 'RE': u'\ub9ac\uc720\ub2c8\uc628', 'TM': u'\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4', 'TJ': u'\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4', 'RO': u'\ub8e8\ub9c8\ub2c8\uc544', 'TK': u'\ud1a0\ucf08\ub77c\uc6b0', 'GW': u'\uae30\ub124\ube44\uc3d8', 'GU': u'\uad0c', 'GT': u'\uacfc\ud14c\ub9d0\ub77c', 'GS': u'\uc0ac\uc6b0\uc2a4\uc870\uc9c0\uc544-\uc0ac\uc6b0\uc2a4\uc0cc\ub4dc\uc704\uce58\uc81c\ub3c4', 'GR': u'\uadf8\ub9ac\uc2a4', 'GQ': u'\uc801\ub3c4 \uae30\ub2c8', 'GP': u'\uacfc\ub2ec\ub85c\ud504', 'JP': u'\uc77c\ubcf8', 'GY': u'\uac00\uc774\uc544\ub098', 'GF': u'\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098', 'GE': u'\uadf8\ub8e8\uc9c0\uc57c', 'GD': u'\uadf8\ub808\ub098\ub2e4', 'GB': u'\uc601\uad6d', 'GA': u'\uac00\ubd09', 'SV': u'\uc5d8\uc0b4\ubc14\ub3c4\ub974', 'GN': u'\uae30\ub2c8', 'GM': u'\uac10\ube44\uc544', 'GL': u'\uadf8\ub9b0\ub780\ub4dc', 'GI': u'\uc9c0\ube0c\ub864\ud130', 'GH': u'\uac00\ub098', 'OM': u'\uc624\ub9cc', 'TN': u'\ud280\ub2c8\uc9c0', 'JO': u'\uc694\ub974\ub2e8', 'SP': u'\uc138\ub974\ube44\uc544', 'HR': u'\ud06c\ub85c\uc544\ud2f0\uc544', 'HT': u'\ud558\uc774\ud2f0', 'HU': u'\ud5dd\uac00\ub9ac', 'HK': u'\ud64d\ucf69, \uc911\uad6d \ud2b9\ubcc4\ud589\uc815\uad6c', 'HN': u'\uc628\ub450\ub77c\uc2a4', 'HM': u'\ud5c8\ub4dc\uc12c-\ub9e5\ub3c4\ub110\ub4dc\uc81c\ub3c4', 'VE': u'\ubca0\ub124\uc218\uc5d8\ub77c', 'PR': u'\ud478\uc5d0\ub974\ud1a0\ub9ac\ucf54', 'PS': u'\ud314\ub808\uc2a4\ud0c0\uc778 \uc9c0\uad6c', 'PW': u'\ud314\ub77c\uc6b0', 'PT': u'\ud3ec\ub974\ud2b8\uce7c', 'SJ': u'\uc2a4\ubc1c\ubc14\ub974\uc81c\ub3c4-\uc580\ub9c8\uc6ec\uc12c', 'PY': u'\ud30c\ub77c\uacfc\uc774', 'IQ': u'\uc774\ub77c\ud06c', 'PA': u'\ud30c\ub098\ub9c8', 'PF': u'\ud504\ub791\uc2a4\ub839 \ud3f4\ub9ac\ub124\uc2dc\uc544', 'PG': u'\ud30c\ud478\uc544\ub274\uae30\ub2c8', 'PE': u'\ud398\ub8e8', 'PK': u'\ud30c\ud0a4\uc2a4\ud0c4', 'PH': u'\ud544\ub9ac\ud540', 'PN': u'\ud54f\ucf00\uc5b8\uc12c', 'PL': u'\ud3f4\ub780\ub4dc', 'PM': u'\uc138\uc778\ud2b8\ud53c\uc5d0\ub974-\ubbf8\ufffd\ub871', 'ZM': u'\uc7a0\ube44\uc544', 'EH': u'\uc11c\uc0ac\ud558\ub77c', 'EE': u'\uc5d0\uc2a4\ud1a0\ub2c8\uc544', 'EG': u'\uc774\uc9d1\ud2b8', 'ZA': u'\ub0a8\uc544\ud504\ub9ac\uce74', 'EC': u'\uc5d0\ucfe0\uc544\ub3c4\ub974', 'IT': u'\uc774\ud0c8\ub9ac\uc544', 'VN': u'\ubca0\ud2b8\ub0a8', 'SB': u'\uc194\ub85c\ubaac', 'ET': u'\uc774\ub514\uc624\ud53c\uc544', 'SO': u'\uc18c\ub9d0\ub9ac\uc544', 'ZW': u'\uc9d0\ubc14\ube0c\uc6e8', 'SA': u'\uc0ac\uc6b0\ub514\uc544\ub77c\ube44\uc544', 'ES': u'\uc2a4\ud398\uc778', 'ER': u'\uc5d0\ub9ac\ud2b8\ub9ac\uc544', 'MD': u'\ubab0\ub3c4\ubc14', 'MG': u'\ub9c8\ub2e4\uac00\uc2a4\uce74\ub974', 'MA': u'\ubaa8\ub85c\ucf54', 'MC': u'\ubaa8\ub098\ucf54', 'UZ': u'\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4', 'MM': u'\ubbf8\uc580\ub9c8', 'ML': u'\ub9d0\ub9ac', 'MO': u'\ub9c8\uce74\uc624, \uc911\uad6d \ud2b9\ubcc4\ud589\uc815\uad6c', 'MN': u'\ubabd\uace8', 'MH': u'\ub9c8\uc0ec \uad70\ub3c4', 'MK': u'\ub9c8\ucf00\ub3c4\ub2c8\uc544\uc5b4', 'MU': u'\ubaa8\ub9ac\uc154\uc2a4', 'MT': u'\ubab0\ud0c0', 'MW': u'\ub9d0\ub77c\uc704', 'MV': u'\ubab0\ub514\ube0c', 'MQ': u'\ub9d0\ud2f0\ub2c8\ud06c', 'MP': u'\ubd81\ub9c8\ub9ac\uc544\ub098\uc81c\ub3c4', 'MS': u'\ubaac\ud2b8\uc138\ub77c\ud2b8', 'MR': u'\ubaa8\ub9ac\ud0c0\ub2c8', 'UG': u'\uc6b0\uac04\ub2e4', 'MY': u'\ub9d0\ub808\uc774\uc9c0\uc544', 'MX': u'\uba55\uc2dc\ucf54', 'IL': u'\uc774\uc2a4\ub77c\uc5d8', 'FR': u'\ud504\ub791\uc2a4', 'IO': u'\uc601\uad6d\ub839\uc778\ub3c4\uc591\uc2dd\ubbfc\uc9c0', 'SH': u'\uc138\uc778\ud2b8\ud5ec\ub808\ub098', 'FI': u'\ud540\ub780\ub4dc', 'FJ': u'\ud53c\uc9c0', 'FK': u'\ud3ec\ud074\ub79c\ub4dc\uc81c\ub3c4', 'FM': u'\ub9c8\uc774\ud06c\ub85c\ub124\uc2dc\uc544', 'FO': u'\ud398\ub85c\uc81c\ub3c4', 'NI': u'\ub2c8\uce74\ub77c\uacfc', 'NL': u'\ub124\ub35c\ub780\ub4dc', 'NO': u'\ub178\ub974\uc6e8\uc774', 'NA': u'\ub098\ubbf8\ube44\uc544', 'VU': u'\ubc14\ub204\uc544\ud22c', 'NC': u'\ub274 \uce7c\ub808\ub3c4\ub2c8\uc544', 'NE': u'\ub2c8\uc81c\ub974', 'NF': u'\ub178\ud37d\uc12c', 'NG': u'\ub098\uc774\uc9c0\ub9ac\uc544', 'NZ': u'\ub274\uc9c8\ub79c\ub4dc', 'NP': u'\ub124\ud314', 'NR': u'\ub098\uc6b0\ub8e8', 'NU': u'\ub2c8\uc6b0\uc5d0', 'CK': u'\ucfe1\uc81c\ub3c4', 'CI': u'\ucf54\ud2b8\ub514\ubd80\uc640\ub974', 'CH': u'\uc2a4\uc704\uc2a4', 'CO': u'\ucf5c\ub86c\ube44\uc544', 'CN': u'\uc911\uad6d', 'CM': u'\uce74\uba54\ub8ec', 'CL': u'\uce60\ub808', 'CC': u'\ucf54\ucf54\uc2a4\uc81c\ub3c4', 'CA': u'\uce90\ub098\ub2e4', 'CG': u'\ucf69\uace0', 'CF': u'\uc911\uc559 \uc544\ud504\ub9ac\uce74', 'CD': u'\ucf69\uace0\ubbfc\uc8fc\uacf5\ud654\uad6d', 'CZ': u'\uccb4\ucf54', 'CY': u'\uc0ac\uc774\ud504\ub7ec\uc2a4', 'CX': u'\ud06c\ub9ac\uc2a4\ub9c8\uc2a4\uc12c', 'CR': u'\ucf54\uc2a4\ud0c0\ub9ac\uce74', 'CV': u'\uae4c\ubf40\ubca0\ub974\ub370', 'CU': u'\ucfe0\ubc14', 'SZ': u'\uc2a4\uc640\uc9c8\ub79c\ub4dc', 'SY': u'\uc2dc\ub9ac\uc544', 'KG': u'\ud0a4\ub974\uae30\uc2a4\uc2a4\ud0c4', 'KE': u'\ucf00\ub0d0', 'SR': u'\uc218\ub9ac\ub0a8', 'KI': u'\ud0a4\ub9ac\ubc14\uc2dc', 'KH': u'\uce84\ubcf4\ub514\uc544', 'KN': u'\uc138\uc778\ud2b8\ud06c\ub9ac\uc2a4\ud1a0\ud37c \ub124\ube44\uc2a4', 'KM': u'\ucf54\ubaa8\ub974', 'ST': u'\uc0c1\ud22c\uba54 \ud504\ub9b0\uc2dc\ud398', 'SK': u'\uc2ac\ub85c\ubc14\ud0a4\uc544', 'KR': u'\ub300\ud55c\ubbfc\uad6d', 'SI': u'\uc2ac\ub85c\ubca0\ub2c8\uc544', 'KP': u'\uc870\uc120 \ubbfc\uc8fc\uc8fc\uc758 \uc778\ubbfc \uacf5\ud654\uad6d', 'KW': u'\ucfe0\uc6e8\uc774\ud2b8', 'SN': u'\uc138\ub124\uac08', 'SM': u'\uc0b0\ub9c8\ub9ac\ub178', 'SL': u'\uc2dc\uc5d0\ub77c\ub9ac\uc628', 'SC': u'\uc250\uc774\uc258', 'KZ': u'\uce74\uc790\ud750\uc2a4\ud0c4', 'KY': u'\ucf00\uc774\ub9e8\uc81c\ub3c4', 'SG': u'\uc2f1\uac00\ud3ec\ub974', 'SE': u'\uc2a4\uc6e8\ub374', 'SD': u'\uc218\ub2e8', 'DO': u'\ub3c4\ubbf8\ub2c8\uce74 \uacf5\ud654\uad6d', 'DM': u'\ub3c4\ubbf8\ub2c8\uce74', 'DJ': u'\uc9c0\ubd80\ud2f0', 'DK': u'\ub374\ub9c8\ud06c', 'VG': u'\uc601\uad6d\ub839 \ubc84\uc9c4 \uc544\uc77c\ub79c\ub4dc', 'DE': u'\ub3c5\uc77c', 'YE': u'\uc608\uba58', 'DZ': u'\uc54c\uc81c\ub9ac', 'US': u'\ubbf8\uad6d', 'UY': u'\uc6b0\ub8e8\uacfc\uc774', 'YU': u'\uc720\uace0\uc2ac\ub77c\ube44\uc544', 'YT': u'\ub9c8\uc694\ud2f0', 'UM': u'\ubbf8\uad6d\ub839 \ud574\uc678 \uc81c\ub3c4', 'LB': u'\ub808\ubc14\ub17c', 'LC': u'\uc138\uc778\ud2b8\ub8e8\uc2dc\uc544', 'LA': u'\ub77c\uc624\uc2a4', 'TV': u'\ud22c\ubc1c\ub8e8', 'TW': u'\ub300\ub9cc', 'TT': u'\ud2b8\ub9ac\ub2c8\ub2e4\ub4dc \ud1a0\ubc14\uace0', 'TR': u'\ud130\ud0a4', 'LK': u'\uc2a4\ub9ac\ub791\uce74', 'LI': u'\ub9ac\ud788\ud150\uc288\ud0c0\uc778', 'LV': u'\ub77c\ud2b8\ube44\uc544', 'TO': u'\ud1b5\uac00', 'LT': u'\ub9ac\ud22c\uc544\ub2c8\uc544', 'LU': u'\ub8e9\uc148\ubd80\ub974\ud06c', 'LR': u'\ub77c\uc774\ubca0\ub9ac\uc544', 'LS': u'\ub808\uc18c\ud1a0', 'TH': u'\ud0dc\uad6d', 'TF': u'\ud504\ub791\uc2a4 \ub0a8\ubd80 \uc9c0\ubc29', 'TG': u'\ud1a0\uace0', 'TD': u'\ucc28\ub4dc', 'TC': u'\ud130\ud06c\uc2a4\ucf00\uc774\ucee4\uc2a4\uc81c\ub3c4', 'LY': u'\ub9ac\ube44\uc544', 'VA': u'\ubc14\ud2f0\uce78', 'VC': u'\uc138\uc778\ud2b8\ube48\uc13c\ud2b8\uadf8\ub808\ub098\ub518', 'AE': u'\uc544\ub78d\uc5d0\ubbf8\ub9ac\ud2b8', 'AD': u'\uc548\ub3c4\ub77c', 'AG': u'\uc564\ud2f0\uac00 \ubc14\ubd80\ub2e4', 'AF': u'\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4', 'AI': u'\uc548\uae38\ub77c', 'VI': u'\ubbf8\uad6d\ub839 \ubc84\uc9c4 \uc544\uc77c\ub79c\ub4dc', 'IS': u'\uc544\uc774\uc2ac\ub780\ub4dc', 'IR': u'\uc774\ub780', 'AM': u'\uc544\ub974\uba54\ub2c8\uc544', 'AL': u'\uc54c\ubc14\ub2c8\uc544', 'AO': u'\uc559\uace8\ub77c', 'AN': u'\ub124\ub35c\ub780\ub4dc\ub839 \uc548\ud2f8\ub808\uc2a4', 'AQ': u'\ub0a8\uadf9 \ub300\ub959', 'AS': u'\uc544\uba54\ub9ac\uce78 \uc0ac\ubaa8\uc544', 'AR': u'\uc544\ub974\ud5e8\ud2f0\ub098', 'AU': u'\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544', 'AT': u'\uc624\uc2a4\ud2b8\ub9ac\uc544', 'AW': u'\uc544\ub8e8\ubc14', 'IN': u'\uc778\ub3c4', 'TZ': u'\ud0c4\uc790\ub2c8\uc544', 'AZ': u'\uc544\uc81c\ub974\ubc14\uc774\uc794', 'IE': u'\uc544\uc77c\ub79c\ub4dc', 'ID': u'\uc778\ub3c4\ub124\uc2dc\uc544', 'UA': u'\uc6b0\ud06c\ub77c\uc774\ub098', 'QA': u'\uce74\ud0c0\ub974', 'MZ': u'\ubaa8\uc7a0\ube44\ud06c'} months=[u'1\uc6d4', u'2\uc6d4', u'3\uc6d4', u'4\uc6d4', u'5\uc6d4', u'6\uc6d4', u'7\uc6d4', u'8\uc6d4', u'9\uc6d4', u'10\uc6d4', u'11\uc6d4', u'12\uc6d4'] abbrMonths=[u'1\uc6d4', u'2\uc6d4', u'3\uc6d4', u'4\uc6d4', u'5\uc6d4', u'6\uc6d4', u'7\uc6d4', u'8\uc6d4', u'9\uc6d4', u'10\uc6d4', u'11\uc6d4', u'12\uc6d4'] days=[u'\uc6d4\uc694\uc77c', u'\ud654\uc694\uc77c', u'\uc218\uc694\uc77c', u'\ubaa9\uc694\uc77c', u'\uae08\uc694\uc77c', u'\ud1a0\uc694\uc77c', u'\uc77c\uc694\uc77c'] abbrDays=[u'\uc6d4', u'\ud654', u'\uc218', u'\ubaa9', u'\uae08', u'\ud1a0', u'\uc77c'] dateFormats={'medium': '%Y-%m-%d', 'full': u'%Y\ub144 %m\uc6d4 %d\uc77c %%(dayname)s', 'long': u'%Y\ub144 %m\uc6d4 %d\uc77c %%{abbrdayname}s', 'short': '%y-%m-%d'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6dsJ88turbogears/i18n/data/ko.pyc; BEc @shdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdDd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdD'>'turbogears/i18n/data/lv.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdJd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdH<dIdJd?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddk<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdTd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddk<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdTd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddi<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNd;<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dNd;<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd***PKP6-??turbogears/i18n/data/mt_MT.py# Formatting configuration for locale mt_MT languages={'gv': 'Manks', 'gu': u'Gu\u0121arati', 'rom': u'\u017bingaru', 'alg': 'Lingwi Algonqwinjani', 'ale': 'Aleut', 'sco': u'Sko\u010b\u010bi\u017c', 'mni': 'Manipuri', 'gd': u'Galliku Sko\u010b\u010bi\u017c', 'ga': u'Irlandi\u017c', 'mno': 'Lingwi Manobo', 'osa': u'Osa\u0121jan', 'gn': 'Gwarani', 'gl': 'Gallegjan', 'mwr': 'Marwari', 'ty': u'Ta\u0127itjan', 'tw': 'Twi', 'tt': 'Tatar', 'tr': 'Tork', 'ts': 'Tsonga', 'tn': 'Zwana', 'to': u"Tongan (G\u017cejjer ta' Tonga)", 'aus': 'Lingwi Awstraljani', 'av': 'Avarik', 'tk': 'Turkmeni', 'th': u'Tajlandi\u017c', 'roa': u'Romanz (O\u0127ra)', 'tg': u'Ta\u0121ik', 'te': 'Telugu', 'uga': 'Ugaritiku', 'ta': 'Tamil', 'fat': 'Fanti', 'fan': 'Fang', 'wo': 'Wolof', 'rm': 'Reto-Romanz', 'din': 'Dinka', 'bla': 'Siksika', 'cmc': u'Lingwi \u010aamiki', 'ml': 'Malajalam', 'zh': u'\u010aini\u017c', 'tem': 'Timne', 'za': u'\u017bwang', 'cau': u'Kawkasu (O\u0127ra)', 'zu': u'\u017bulu', 'ter': 'Tereno', 'tet': 'Tetum', 'mnc': u'Man\u010burjan', 'kut': 'Kutenaj', 'suk': 'Sukuma', 'kum': 'Kumiku', 'sus': 'Susu', 'new': 'Newari', 'sux': 'Sumerjan', 'den': 'Slav', 'men': 'Mende', 'mul': 'Lingwi Diversi', 'lez': u'Le\u017cgjan', 'root': u'G\u0127erq', 'eka': 'Ekajuk', 'akk': 'Akkadjen', 'dra': u'Dravidjan (O\u0127ra)', 'jrb': u'Lhudi-G\u0127arbi', 'sgn': 'Lingwa tas-Sinjali', 'sga': u'Irlandi\u017c, Antik (sa l-900)', 'apa': u'Lingwi Apa\u010bi', 'bra': 'Braj', 'chb': u'\u010aib\u010ba', 'chg': u'\u010aagataj', 'chk': u'\u010aukese', 'chm': 'Mari', 'chn': u'\u0120argon ta\u010b-\u010ainuk', 'cho': u'\u010aostaw', 'chp': u'\u010aipewjan', 'chr': u'\u010aerokij', 'chy': 'Xajenn', 'ti': 'Tigrinja', 'vot': 'Votik', 'mg': u'Malaga\u017ci', 'iba': 'Iban', 'mo': 'Moldavjan', 'mn': 'Mongoljan', 'mi': 'Maori', 'mh': 'Marxall', 'mk': u'Ma\u010bedonjan', 'mt': 'Malti', 'cai': u'Amerika \u010aentrali (O\u0127ra)', 'del': 'Delawerjan', 'ms': 'Malajan', 'mr': 'Marati', 'my': u'Burmi\u017c', 'cad': 'Kaddo', 'tai': u'Tai (O\u0127ra)', 'afh': u'Afri\u0127ili', 'sit': u'Sino-Tibetjani (O\u0127ra)', 'enm': u'Ingli\u017c, Medjevali (1100-1500)', 'csb': 'Kashubian', 'nyn': 'Nyankole', 'nyo': 'Njoro', 'nym': u'Njamwe\u017ci', 'sio': 'Lingwi Suwjani', 'map': 'Awstronesjan', 'mas': 'Masaj', 'lah': 'Landa', 'lad': 'Ladino', 'fy': u'Fri\u017cjan', 'snk': 'Soninke', 'fa': 'Persjan', 'mad': u'Maduri\u017c', 'mag': u'Maga\u0127i', 'mai': 'Majtili', 'fi': u'Finlandi\u017c', 'fj': u'Fi\u0121i', 'man': 'Mandingwan', 'egy': u'E\u0121izzjan (Antik)', 'znd': u'\u017bande', 'ss': 'Swati', 'sr': 'Serb', 'sq': u'Albani\u017c', 'sw': u'Swa\u0127ili', 'sv': u'Svedi\u017c', 'su': u'Sundani\u017c', 'st': "Soto, t'Isfel", 'sk': 'Slovakk', 'si': u'Sin\u0127ali\u017c', 'sh': 'Serbo-Kroat', 'so': 'Somali', 'sn': 'Xona', 'sm': 'Samojan', 'sl': 'Slav', 'sc': 'Sardinjan', 'sa': 'Sanskrit', 'sg': 'Sango', 'se': "Sami ta' Fuq", 'sd': 'Sindi', 'zen': u'\u017benaga', 'kbd': 'Kabardian', 'afa': u'Afro-Asjatiku (O\u0127ra)', 'lg': 'Ganda', 'lb': u'Let\u017cburgi\u017c', 'fiu': 'Finno - Ugrijan', 'ln': 'Lingaljan', 'lo': 'Lao', 'li': 'Limburgish', 'byn': 'Blin', 'lt': 'Litwanjan', 'lu': 'Luba-Katanga', 'yi': 'Jiddix', 'non': 'Skandinav, Antik', 'ceb': 'Sibwano', 'yo': 'Joruba', 'nog': 'Nogai', 'bat': u'Baltiku (O\u0127ra)', 'dak': 'Dakota', 'dar': 'Dargwa', 'day': 'Dajak', 'ssa': u'Nilo-Sa\u0127aram', 'kpe': 'Kpelle', 'el': 'Grieg', 'eo': 'Esperanto', 'en': u'Ingli\u017c', 'lam': 'Lamba', 'ee': 'Ewe', 'mdf': 'Moksha', 'fr': u'Fran\u010bi\u017c', 'mdr': 'Mandar', 'et': 'Estonjan', 'es': 'Spanjol', 'ru': 'Russu', 'gon': 'Gondi', 'goh': u'\u0120ermaniku, Antik Pulit (ca. 750-1050)', 'sms': 'Skolt Sami', 'smn': 'Inari Sami', 'smj': 'Lule Sami', 'smi': 'Sami languages (Other)', 'got': 'Gotiku', 'rn': 'Rundi', 'ro': 'Rumen', 'dsb': 'Lower Sorbian', 'sma': 'Southern Sami', 'gor': 'Gorontalo', 'ast': 'Asturian', 'wal': 'Walamo', 'crh': 'Crimean Turkish; Crimean Tatar', 'ath': 'Lingwi Atabaskani', 'gez': 'Geez', 'xh': u'\u0126o\u017ca', 'ff': u'Fula\u0127', 'mak': 'Makasar', 'zap': u'\u017bapotek', 'kok': 'Konkani', 'kos': 'Kosrejan', 'fo': u'Fawri\u017c', 'tog': 'Tonga (Njasa)', 'hup': u'\u0126upa', 'udm': 'Udmurt', 'bej': 'Beja', 'bem': 'Bemba', 'tsi': 'Zimxjan', 'ber': 'Berber', 'nzi': u'N\u017cima', 'sai': u"Indjan tal-Amerika t'Isfel (O\u0127ra)", 'ang': u'Ingli\u017c, Antik (ca.450-1100)', 'pra': 'Lingwi Prakriti', 'bho': 'Bojpuri', 'sal': 'Salixan', 'pro': 'Provenzal, Antik (sa l-1500)', 'raj': u'Ra\u0121astani', 'sad': 'Sandawe', 'rar': 'Rarotongani', 'rap': 'Rapanwi', 'sas': 'Sasak', 'car': 'Karib', 'min': 'Minangkabaw', 'mic': 'Mikmek', 'efi': 'Efik', 'arn': 'Arawkanjan', 'ypk': u'Lingwi Jupi\u010bi', 'mis': u'Lingwi O\u0127ra', 'kac': u'Ka\u010bin', 'kab': 'Kabuljan', 'kaa': 'Kara-Kalpak', 'kam': 'Kamba', 'kar': 'Karen', 'kaw': 'Kawi', 'tyv': 'Tuvinjan', 'awa': u'Awad\u0127i', 'ka': u'\u0120or\u0121jan', 'doi': 'Dogri', 'kg': 'Kongo', 'kk': u'Ka\u017cak', 'kj': 'Kuanyama', 'ki': 'Kikuju', 'ko': 'Korejan', 'kn': 'Kannada', 'km': 'Kmer', 'kl': 'Kalallisut', 'ks': 'Kaxmiri', 'kr': 'Kanuri', 'kw': 'Korniku', 'kv': 'Komi', 'ku': u'Kurdi\u017c', 'ky': u'Kirgi\u017c', 'tkl': 'Tokelau', 'bua': 'Burjat', 'mga': u'Irlandi\u017c, Medjevali (900-1200)', 'hit': u'\u0126ittit', 'dyu': 'Djula', 'de': u'\u0120ermani\u017c', 'da': u'Dani\u017c', 'dz': u'D\u017congka', 'ira': 'Iranjan', 'dv': u'Dive\u0127i', 'hil': 'Hiligaynon', 'him': u'\u0126ima\u010bali', 'gem': u'\u0120ermaniku (O\u0127ra)', 'crp': u'Kreoli u Pi\u0121ini (O\u0127ra)', 'qu': u'Ke\u010bwa', 'bas': 'Basa', 'gba': 'Gbaja', 'bad': 'Banda', 'ban': u'Balini\u017c', 'bal': u'Balu\u010bi', 'bam': 'Bambara', 'shn': 'Xan', 'bai': 'Lingwi Bamileke', 'arp': u'Arapa\u0127o', 'art': u'Artifi\u010bjali (O\u0127ra)', 'arw': 'Arawak', 'arc': 'Aramajk', 'sem': 'Semitiku', 'sel': 'Selkup', 'nub': 'Lingwi Nubjani', 'btk': 'Batak', 'lus': 'Luxaj', 'mus': 'Kriek', 'lua': 'Luba-Luluwa', 'iro': 'Lingwi Irogwjani', 'lui': u'Luwisinu\u017c', 'mun': 'Lingwi tal-Munda', 'lun': 'Lunda', 'luo': 'Luwa', 'wa': 'Walloon', 'tup': 'Tupi languages', 'jv': u'\u0120avani\u017c', 'tut': u'Altajk (O\u0127ra)', 'tum': 'Tumbuka', 'ja': u'\u0120appuni\u017c', 'cop': 'Koptiku', 'ilo': 'Iloko', 'la': 'Latin', 'gwi': u'Gwi\u010bin', 'und': 'Indeterminat', 'tli': 'Tlingit', 'ch': u'\u010aamorro', 'co': 'Korsiku', 'ca': 'Katalan', 'ce': u'\u010ae\u010ben', 'pon': 'Ponpejan', 'cy': 'Welx', 'sah': 'Jakut', 'cs': u'\u010aek', 'cr': 'Krij', 'bnt': 'Bantu', 'cv': u'\u010auvax', 'cu': 'Slaviku tal-Knisja', 'lv': 'Latvjan (Lettix)', 'dum': u'Olandi\u017c, Medjevali (ca. 1050-1350)', 'pt': u'Portugi\u017c', 'dua': 'Dwala', 'fro': u'Fran\u010bi\u017c, Antik (842-ca. 1400)', 'yap': 'Japese', 'frm': u'Fran\u010bi\u017c, Medjevali (ca. 1400-1600)', 'tiv': 'Tiv', 'yao': 'Jao', 'pa': u'Pun\u0121abi', 'xal': 'Kalmyk', 'pi': 'Pali', 'pl': 'Pollakk', 'gay': 'Gajo', 'oto': 'Lingwi Otomjani', 'ota': 'Tork (Imperu Ottoman)', 'hmn': u'\u0126mong', 'an': 'Aragonese', 'gaa': 'Ga', 'fur': 'Frijuljan', 'khi': 'Kojsan', 'sla': 'Slavic (Other)', 've': 'Venda', 'vi': u'Vjetnami\u017c', 'is': u'I\u017clandi\u017c', 'kho': u'Kotani\u017c', 'iu': 'Inuktitut', 'it': 'Taljan', 'vo': u'Volap\xfck', 'ii': 'Sichuan Yi', 'ik': 'Inupjak', 'io': 'Ido', 'ine': 'Indo-Ewropew', 'ia': 'Interlingua', 'jpr': 'Lhudi-Persjan', 'ie': 'Interlingue', 'id': u'Indone\u017cjan', 'ig': 'Igbo', 'pap': 'Papjamento', 'ewo': 'Ewondo', 'pau': 'Palawjan', 'paa': u'Papwan (O\u0127ra)', 'pag': 'Pangasinjan', 'sat': 'Santali', 'pal': u'Pa\u0127lavi', 'pam': 'Pampamga', 'phi': u'Filippin (O\u0127ra)', 'cel': u'Keltiku (O\u0127ra)', 'phn': u'Feni\u010bju', 'nic': u'Ni\u0121erjan - Kordofanjan', 'nia': 'Nijas', 'dgr': 'Dogrib', 'syr': 'Sirjan', 'niu': 'Nijuwejan', 'jbo': 'Lojban', 'nah': u'Na\u0127watil', 'sam': 'Samaritan Aramaic', 'hai': u'\u0126ajda', 'gmh': u'\u0120ermaniku, Medjevali Pulit (ca. 1050-1500)', 'cus': u'Kuxtiku (O\u0127ra)', 'wen': 'Lingwi Sorbjani', 'ady': 'Adyghe', 'elx': 'Elamit', 'ada': 'Adangme', 'haw': u'\u0126awajjan', 'bin': 'Bini', 'bik': 'Bikol', 'mos': 'Mossi', 'moh': u'Mo\u0127ak', 'tl': 'Tagalog', 'tvl': 'Tuvalu', 'ijo': u'I\u0121o', 'kmb': 'Kimbundu', 'peo': 'Persjan Antik (ca. 600-400 Q.K.)', 'umb': 'Umbundu', 'tmh': 'Tamaxek', 'fon': 'Fon', 'hsb': 'Upper Sorbian', 'be': 'Belarussu', 'bg': 'Bulgaru', 'ba': 'Baxkir', 'ps': 'Paxtun', 'bm': 'Bambara', 'bn': 'Bengali', 'bo': 'Tibetjan', 'bh': u'Bi\u0127ari', 'bi': 'Bislama', 'br': 'Breton', 'bs': 'Bosnijan', 'om': 'Oromo', 'oj': u'O\u0121ibwa', 'ace': u'A\u010bini\u017c', 'ach': 'Akoli', 'oc': 'Provenzal (wara 1500)', 'kru': 'Kurusk', 'srr': 'Serer', 'kro': 'Kru', 'krc': 'Karachay-Balkar', 'nds': u'\u0120ermani\u017c Komuni; Sassonu Komuni', 'os': 'Ossettiku', 'or': 'Orija', 'sog': 'Sogdien', 'nso': "Soto, ta' Fuq", 'son': 'Songaj', 'vai': 'Vai', 'wak': 'Lingwi Wakaxani', 'lol': 'Mongo', 'mkh': u'Mon-Kmer (O\u0127ra)', 'loz': u'Lo\u017ci', 'gil': 'Gilbertjan', 'was': 'Waxo', 'war': 'Waraj', 'hz': u'\u0126erero', 'hy': 'Armenjan', 'sid': 'Sidamo', 'hr': 'Kroat', 'ht': 'Haitian', 'hu': u'Ungeri\u017c', 'hi': u'\u0126indi', 'ho': u'\u0126iri Motu', 'Fallback': 'en', 'ha': u'\u0126awsa', 'bug': u'Bugini\u017c', 'he': 'Ebrajk', 'uz': u'U\u017cbek', 'ur': 'Urdu', 'uk': 'Ukranjan', 'ug': 'Wigur', 'aa': 'Afar', 'ab': u'Abka\u017cjan', 'ae': 'Avestan', 'af': 'Afrikans', 'ak': 'Akan', 'am': u'Am\u0127ariku', 'myv': 'Erzya', 'eu': 'Bask', 'as': 'Assamese', 'ar': u'G\u0127arbi', 'inh': 'Ingush', 'tpi': 'Tok Pisin', 'myn': 'Majan', 'ay': 'Ajmara', 'kha': 'Kasi', 'az': u'A\u017cerbaj\u0121ani', 'inc': u'Indjan (O\u0127ra)', 'nl': u'Olandi\u017c', 'nn': u'Ninorsk Norve\u0121i\u017c', 'no': u'Norve\u0121i\u017c', 'na': 'Nawuru', 'nb': u'Bokmahal Norve\u0121i\u017c', 'nai': u"Indjan tal-Amerika ta' Fuq (O\u0127ra)", 'nd': "Ndebele, ta' Fuq", 'ne': u'Nepali\u017c', 'ng': 'Ndonga', 'ny': u'\u010ai\u010bewa; Njan\u0121a', 'nap': 'Neapolitan', 'grb': u'\u0120erbo', 'grc': 'Grieg, Antik (to 1453)', 'nr': "Ndebele, t'Isfel", 'tig': 'Tigre', 'nv': u'Nava\u0127o', 'zun': u'\u017buni', 'rw': 'Kinjarwanda', 'cpe': u'Kreoli u Pi\u0121ini, Bba\u017cat fuq l-Ingli\u017c (O\u0127ra)', 'cpf': u'Kreoli u Pi\u0121ini, Bba\u017cat fuq il-Fran\u010bi\u017c (O\u0127ra)', 'cpp': 'Creoles and pidgins, Portuguese-based (Other)'} countries={'BD': 'Bangladexx', 'BE': u'Bel\u0121ju', 'BF': 'Burkina Faso', 'BG': 'Bulgarija', 'BA': u'Bo\u017cnija \u0126er\u017cegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunej', 'BO': 'Bolivja', 'BH': u'Ba\u0127rajn', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Butan', 'JM': u'\u0120amajka', 'BV': 'Bouvet Island', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': u'Bra\u017cil', 'BS': u'Ba\u0127amas', 'BY': 'Bjelorussja', 'BZ': u'Beli\u017ce', 'RU': 'Russja', 'RW': 'Rwanda', 'TL': 'Timor tal-Lvant', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': u'Ta\u0121ikistan', 'RO': 'Rumanija', 'TK': 'Tokelaw', 'GW': 'Ginea-Bissaw', 'GU': 'Gwam', 'GT': 'Gwatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': u'Gre\u010bja', 'GQ': 'Ginea Ekwatorjali', 'GP': 'Gwadelupe', 'JP': u'\u0120appun', 'GY': 'Gujana', 'GF': u'Gujana Fran\u010bi\u017ca', 'GE': u'\u0120or\u0121ja', 'GD': 'Grenada', 'GB': 'Ingilterra', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Gineja', 'GM': 'Gambja', 'GL': 'Grinlandja', 'GI': 'Gibraltar', 'GH': 'Gana', 'OM': 'Oman', 'TN': u'Tune\u017c', 'JO': u'\u0120ordan', 'SP': 'Serbja', 'HR': 'Kroazja', 'HT': u'\u0126aiti', 'HU': 'Ungerija', 'HK': u'\u0126ong Kong S.A.R., \u010aina', 'HN': u'\u0126onduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venezwela', 'PR': 'Puerto Rico', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugall', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paragwaj', 'IQ': 'Iraq', 'PA': 'Panama', 'PF': u'Polinesja Fran\u010bi\u017ca', 'PG': u'Papwa-Ginea \u0120dida', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filippini', 'PN': 'Pitcairn', 'PL': 'Polonja', 'PM': 'Saint Pierre and Miquelon', 'ZM': u'\u017bambja', 'EH': 'Sahara tal-Punent', 'EE': 'Estonja', 'EG': u'E\u0121ittu', 'ZA': "Afrika t'Isfel", 'EC': 'Ekwador', 'IT': 'Italja', 'VN': 'Vjetnam', 'SB': 'Solomon Islands', 'ET': 'Etijopja', 'SO': 'Somalja', 'ZW': u'\u017bimbabwe', 'SA': u'G\u0127arabja Sawdita', 'ES': 'Spanja', 'ER': 'Eritreja', 'MD': 'Maldova', 'MG': 'Madagaskar', 'MA': 'Marokk', 'MC': 'Monako', 'UZ': u'U\u017cbekistan', 'MM': 'Mjanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolja', 'MH': u"G\u017cejjer ta' Marshall", 'MK': u'Ma\u010bedonja', 'MU': 'Mawrizju', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinik', 'MP': u"G\u017cejjer Marjana ta' Fuq", 'MS': 'Montserrat', 'MR': 'Mawritanja', 'UG': 'Uganda', 'MY': 'Malasja', 'MX': 'Messiku', 'IL': u'I\u017crael', 'FR': 'Franza', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finlandja', 'FJ': u'Fi\u0121i', 'FK': 'Falkland Islands', 'FM': 'Mikronesja', 'FO': u'G\u017cejjer Faroe', 'NI': 'Nikaragwa', 'NL': 'Olanda', 'NO': u'Norve\u0121ja', 'NA': 'Namibja', 'VU': 'Vanwatu', 'NC': 'New Caledonia', 'NE': u'Ni\u0121er', 'NF': 'Norfolk Island', 'NG': u'Ni\u0121erja', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': "Kosta ta' l-Avorju", 'CH': 'Svizzera', 'CO': 'Kolumbja', 'CN': u'\u010aina', 'CM': 'Kamerun', 'CL': u'\u010aili', 'CC': 'Cocos Islands', 'CA': 'Kanada', 'CG': 'Kongo', 'CF': u'Repubblika Afrikana \u010aentrali', 'CD': 'Democratic Republic of the Congo', 'CZ': u'Repubblika \u010aeka', 'CY': u'\u010aipru', 'CX': 'Christmas Island', 'CR': 'Kosta Rika', 'Fallback': 'en', 'CV': 'Kape Verde', 'CU': 'Kuba', 'SZ': u'Swa\u017ciland', 'SY': 'Sirja', 'KG': 'Kirgistan', 'KE': 'Kenja', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': 'Kambodja', 'KN': 'Saint Kitts and Nevis', 'KM': 'Komoros', 'ST': 'Sao Tome and Principe', 'SK': 'Slovakkja', 'KR': "Koreja t'Isfel", 'SI': 'Slovenja', 'KP': "Koreja ta' Fuq", 'KW': 'Kuwajt', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychelles', 'KZ': u'Ka\u017cakstan', 'KY': 'Cayman Islands', 'SG': 'Singapor', 'SE': u'\u017bvezja', 'SD': 'Sudan', 'DO': 'Republikka Domenikana', 'DM': 'Dominika', 'DJ': u'\u0120ibuti', 'DK': 'Danimarka', 'VG': 'British Virgin Islands', 'DE': u'\u0120ermanja', 'YE': 'Jemen', 'DZ': u'Al\u0121erija', 'US': 'Stati Uniti', 'UY': 'Urugwaj', 'YU': 'Jugoslavja', 'YT': 'Majotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Libanu', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Tajwan', 'TT': 'Trinidad u Tobago', 'TR': 'Turkija', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvja', 'TO': 'Tonga', 'LT': 'Litwanja', 'LU': 'Lussemburgu', 'LR': 'Liberja', 'LS': 'Lesoto', 'TH': 'Tajlandja', 'TF': u"Territorji Fran\u010bi\u017ci ta' Nofsinhar", 'TG': 'Togo', 'TD': u'\u010aad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libja', 'VA': 'Vatikan', 'VC': 'Saint Vincent and the Grenadines', 'AE': u'Emirati G\u0127arab Maqg\u0127uda', 'AD': 'Andorra', 'AG': 'Antigua and Barbuda', 'AF': 'Afganistan', 'AI': 'Angwilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Islanda', 'IR': 'Iran', 'AM': 'Armenja', 'AL': 'Albanija', 'AO': 'Angola', 'AN': u'Antilles Olandi\u017ci', 'AQ': 'Antarctica', 'AS': 'Samoa Amerikana', 'AR': u'Ar\u0121entina', 'AU': 'Awstralja', 'AT': 'Awstrija', 'AW': 'Aruba', 'IN': 'Indja', 'TZ': u'Tan\u017canija', 'AZ': u'A\u017cerbaj\u0121an', 'IE': 'Irlanda', 'ID': u'Indone\u017cja', 'UA': 'Ukraina', 'QA': 'Qatar', 'MZ': u'Mo\u017cambik'} months=['Jannar', 'Frar', 'Marzu', 'April', 'Mejju', u'\u0120unju', 'Lulju', 'Awissu', 'Settembru', 'Ottubru', 'Novembru', u'Di\u010bembru'] abbrMonths=['Jan', 'Fra', 'Mar', 'Apr', 'Mej', u'\u0120un', 'Lul', 'Awi', 'Set', 'Ott', 'Nov', u'Di\u010b'] days=['It-Tnejn', 'It-Tlieta', u'L-Erbg\u0127a', u'Il-\u0126amis', u'Il-\u0120img\u0127a', 'Is-Sibt', u'Il-\u0126add'] abbrDays=['Tne', 'Tli', 'Erb', u'\u0126am', u'\u0120im', 'Sib', u'\u0126ad'] dateFormats={'medium': '%d-%%(abbrmonthname)s-%Y', 'full': '%%(dayname)s, %d ta %%(monthname)s, %Y', 'long': '%d ta %%(monthname)s %Y', 'short': '%d/%m/%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6mŸ[[turbogears/i18n/data/mt_MT.pyc; AEc @s5hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddi<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNd;<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dNd;<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd***PKP6/RGGturbogears/i18n/data/nb.py# Formatting configuration for locale nb languages={'vi': 'vietnamesisk', 'el': 'gresk', 'eo': 'esperanto', 'en': 'engelsk', 'zh': 'kinesisk', 'af': 'afrikaans', 'sw': 'swahili', 'ca': 'katalansk', 'am': 'amharisk', 'gu': 'gujarati', 'sv': 'svensk', 'cs': 'tsjekkisk', 'ar': 'arabisk', 'ga': 'irsk', 'eu': 'baskisk', 'et': 'estisk', 'gl': 'galicisk', 'id': 'indonesisk', 'es': 'spansk', 'ru': 'russisk', 'nl': 'nederlandsk', 'nn': 'norsk nynorsk', 'no': 'norsk', 'nb': u'norsk bokm\xe5l', 'tr': 'tyrkisk', 'lv': 'latvisk', 'lt': 'litauisk', 'th': 'thai', 'ti': 'tigrinya', 'it': 'italiensk', 'so': 'somalisk', 'he': 'hebraisk', 'is': 'islandsk', 'pl': 'polsk', 'haw': 'hawaiisk', 'be': 'hviterussisk', 'fr': 'fransk', 'bg': 'bulgarsk', 'sl': 'slovensk', 'hr': 'kroatisk', 'iu': 'inuktitut', 'bn': 'bengali', 'de': 'tysk', 'da': 'dansk', 'fa': 'persisk', 'hi': 'hindi', 'fi': 'finsk', 'hy': 'armensk', 'hu': 'ungarsk', 'ja': 'japansk', 'fo': u'f\xe6r\xf8ysk', 'om': 'oromo', 'ro': 'rumensk', 'gv': 'manx', 'pt': 'portugisisk', 'sr': 'serbisk', 'sq': 'albansk', 'ko': 'koreansk', 'kn': 'kannada', 'mk': 'makedonsk', 'kl': 'kalaallisut', 'sk': 'slovakisk', 'mt': 'maltesisk', 'sh': 'serbokroatisk', 'kw': 'kornisk', 'uk': 'ukrainsk', 'mr': 'marathi', 'ta': 'tamil'} countries={'BD': 'Bangladesh', 'BE': 'Belgia', 'BF': 'Burkina Faso', 'BG': 'Bulgaria', 'BA': 'Bosnia og Hercegovina', 'BB': 'Barbados', 'WF': 'Wallis og Futuna', 'BM': 'Bermuda', 'BN': 'Brunei Darussalam', 'BO': 'Bolivia', 'BH': 'Bahrain', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamaica', 'BV': u'Bouvet\xf8ya', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brasil', 'BS': 'Bahamas', 'BY': 'Hviterussland', 'BZ': 'Belize', 'RU': u'Den russiske f\xf8derasjon', 'RW': 'Rwanda', 'TL': u'\xd8st-Timor', 'RE': 'Reunion', 'TM': 'Turkmenistan', 'TJ': 'Tadsjikistan', 'RO': 'Romania', 'TK': 'Tokelau', 'GW': 'Guinea-Bissau', 'GU': 'Guam', 'GT': 'Guatemala', 'GS': u'S\xf8r-Georgia og S\xf8r-Sandwich-\xf8yene', 'GR': 'Hellas', 'GQ': 'Ekvatorial-Guinea', 'GP': 'Guadeloupe', 'JP': 'Japan', 'GY': 'Guyana', 'GF': 'Fransk Guyana', 'GE': 'Georgia', 'GD': 'Grenada', 'GB': 'Storbritannia', 'GA': 'Gabon', 'SV': 'El Salvador', 'GN': 'Guinea', 'GM': 'Gambia', 'GL': u'Gr\xf8nland', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunisia', 'JO': 'Jordan', 'SP': 'Serbia', 'HR': 'Kroatia', 'HT': 'Haiti', 'HU': 'Ungarn', 'HK': 'Hong Kong S.A.R. (Kina)', 'HN': 'Honduras', 'HM': u'Heard- og McDonalds\xf8yene', 'VE': 'Venezuela', 'PR': 'Puerto Rico', 'PS': 'Palestinsk territorium', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard og Jan Mayen', 'PY': 'Paraguay', 'IQ': 'Irak', 'PA': 'Panama', 'PF': 'Fransk Polynesia', 'PG': 'Papua Ny-Guinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filippinene', 'PN': 'Pitcairn', 'PL': 'Polen', 'PM': 'St. Pierre og Miquelon', 'ZM': 'Zambia', 'EH': 'Vest-Sahara', 'EE': 'Estland', 'EG': 'Egypt', 'ZA': u'S\xf8r-Afrika', 'EC': 'Ecuador', 'IT': 'Italia', 'VN': 'Vietnam', 'SB': u'Salomon\xf8yene', 'ET': 'Etiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Saudi Arabia', 'ES': 'Spania', 'ER': 'Eritrea', 'MD': 'Moldova', 'MG': 'Madagaskar', 'MA': 'Marokko', 'MC': 'Monaco', 'UZ': 'Usbekistan', 'MM': 'Myanmar', 'ML': 'Mali', 'MO': 'Macao S.A.R. (Kina)', 'MN': 'Mongolia', 'MH': u'Marshall\xf8yene', 'MK': 'Makedonia, Republikken', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldivene', 'MQ': 'Martinique', 'MP': 'Nord-Marianene', 'MS': 'Montserrat', 'MR': 'Mauritania', 'UG': 'Uganda', 'MY': 'Malaysia', 'MX': 'Mexico', 'IL': 'Israel', 'FR': 'Frankrike', 'IO': u'Britiske omr\xe5der i det indiske hav', 'SH': 'Saint Helena', 'FI': 'Finland', 'FJ': 'Fiji', 'FK': u'Falklands\xf8yene (Malvinas)', 'FM': u'Mikronesiaf\xf8derasjonen', 'FO': u'F\xe6r\xf8yene', 'NI': 'Nicaragua', 'NL': 'Nederland', 'NO': 'Norge', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'Ny-Caledonia', 'NE': 'Niger', 'NF': u'Norfolk\xf8yene', 'NG': 'Nigeria', 'NZ': 'New Zealand', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': u'Cook\xf8yene', 'CI': 'Elfenbenskysten', 'CH': 'Sveits', 'CO': 'Colombia', 'CN': 'Kina', 'CM': 'Kamerun', 'CL': 'Chile', 'CC': u'Kokos\xf8yene (Keeling\xf8yene)', 'CA': 'Canada', 'CG': 'Kongo', 'CF': 'Den sentralafrikanske republikk', 'CD': 'Kongo, Den demokratiske republikken', 'CZ': 'Tsjekkia', 'CY': 'Kypros', 'CX': u'Christmas\xf8ya', 'CR': 'Costa Rica', 'Fallback': 'en', 'CV': 'Kapp Verde', 'CU': 'Cuba', 'SZ': 'Swaziland', 'SY': 'Syria', 'KG': 'Kirgisistan', 'KE': 'Kenya', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': 'Kambodsja', 'KN': 'St. Christopher og Nevis', 'KM': 'Komorene', 'ST': 'Sao Tome og Principe', 'SK': 'Slovakia', 'KR': u'Korea (S\xf8r)', 'SI': 'Slovenia', 'KP': 'Korea (Nord)', 'KW': 'Kuwait', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seychellene', 'KZ': 'Kasakhstan', 'KY': u'Cayman\xf8yene', 'SG': 'Singapore', 'SE': 'Sverige', 'SD': 'Sudan', 'DO': 'Den dominikanske republikk', 'DM': 'Dominica', 'DJ': 'Djibouti', 'DK': 'Danmark', 'VG': u'Jomfru\xf8yene (britisk)', 'DE': 'Tyskland', 'YE': 'Yemen', 'DZ': 'Algerie', 'US': 'Sambandsstatane', 'UY': 'Uruguay', 'YU': 'Jugoslavia', 'YT': 'Mayotte', 'UM': u'USAs mindre \xf8yer', 'LB': 'Libanon', 'LC': 'St. Lucia', 'LA': 'Laos, Den folkedemokratiske republikken', 'TV': 'Tuvalu', 'TW': 'Taiwan', 'TT': 'Trinidad og Tobago', 'TR': 'Tyrkia', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': 'Latvia', 'TO': 'Tonga', 'LT': 'Litauen', 'LU': 'Luxembourg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Thailand', 'TF': u'Franske s\xf8romr\xe5der', 'TG': 'Togo', 'TD': 'Tchad', 'TC': u'Turks- og Caicos\xf8yene', 'LY': 'Libya', 'VA': 'Vatikanstaten', 'VC': 'St. Vincent og Grenadinene', 'AE': 'De forente arabiske emiratene', 'AD': 'Andorra', 'AG': 'Antigua og Barbuda', 'AF': 'Afghanistan', 'AI': 'Anguilla', 'VI': 'U.S. Virgin Islands', 'IS': 'Island', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'De nederlandske antiller', 'AQ': 'Antarktis', 'AS': 'Amerikansk Samoa', 'AR': 'Argentina', 'AU': 'Australia', 'AT': u'\xd8sterrike', 'AW': 'Aruba', 'IN': 'India', 'TZ': 'Tanzania', 'AZ': 'Aserbajdsjan', 'IE': 'Irland', 'ID': 'Indonesia', 'UA': 'Ukraina', 'QA': 'Qatar', 'MZ': 'Mosambik'} months=['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'] abbrMonths=['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'] days=['mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', u'l\xf8rdag', u's\xf8ndag'] abbrDays=['ma', 'ti', 'on', 'to', 'fr', u'l\xf8', u's\xf8'] dateFormats={'medium': '%d. %%(abbrmonthname)s. %Y', 'full': '%%(dayname)s %d. %%(monthname)s %Y', 'long': '%d. %%(monthname)s %Y', 'short': '%d.%m.%y'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6;m*m*turbogears/i18n/data/nb.pyc; AEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdgd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdgd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdgd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdLd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdhd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdKd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdKd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdKS(?spauਪੰਜਾਬੀsINu ਭਾਰਤuਜਨਵਰੀuਫ਼ਰਵਰੀu ਮਾਰਚuਅਪ੍ਰੈਲuਮਈu ਜੂਨuਜੁਲਾਈu ਅਗਸਤuਸਤੰਬਰuਅਕਤੂਬਰuਨਵੰਬਰuਦਸੰਬਰuਸੋਮਵਾਰuਮੰਗਲਵਾਰuਬੁਧਵਾਰuਵੀਰਵਾਰuਸ਼ੁੱਕਰਵਾਰuਸ਼ਨੀਚਰਵਾਰuਐਤਵਾਰu ਸੋਮ.u ਮੰਗਲ.u ਬੁਧ.u ਵੀਰ.u ਸ਼ੁਕਰ.u ਸ਼ਨੀ.uਐਤ.smediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigitu੦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\pa.pys?s***PKP6Ċe..turbogears/i18n/data/pa_IN.py# Formatting configuration for locale pa_IN languages={'pa': u'\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40'} countries={'IN': u'\u0a2d\u0a3e\u0a30\u0a24'} months=[u'\u0a1c\u0a28\u0a35\u0a30\u0a40', u'\u0a5e\u0a30\u0a35\u0a30\u0a40', u'\u0a2e\u0a3e\u0a30\u0a1a', u'\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32', u'\u0a2e\u0a08', u'\u0a1c\u0a42\u0a28', u'\u0a1c\u0a41\u0a32\u0a3e\u0a08', u'\u0a05\u0a17\u0a38\u0a24', u'\u0a38\u0a24\u0a70\u0a2c\u0a30', u'\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30', u'\u0a28\u0a35\u0a70\u0a2c\u0a30', u'\u0a26\u0a38\u0a70\u0a2c\u0a30'] abbrMonths=[u'\u0a1c\u0a28\u0a35\u0a30\u0a40', u'\u0a5e\u0a30\u0a35\u0a30\u0a40', u'\u0a2e\u0a3e\u0a30\u0a1a', u'\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32', u'\u0a2e\u0a08', u'\u0a1c\u0a42\u0a28', u'\u0a1c\u0a41\u0a32\u0a3e\u0a08', u'\u0a05\u0a17\u0a38\u0a24', u'\u0a38\u0a24\u0a70\u0a2c\u0a30', u'\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30', u'\u0a28\u0a35\u0a70\u0a2c\u0a30', u'\u0a26\u0a38\u0a70\u0a2c\u0a30'] days=[u'\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30', u'\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30', u'\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30', u'\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30', u'\u0a36\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30', u'\u0a36\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30', u'\u0a10\u0a24\u0a35\u0a3e\u0a30'] abbrDays=[u'\u0a38\u0a4b\u0a2e.', u'\u0a2e\u0a70\u0a17\u0a32.', u'\u0a2c\u0a41\u0a27.', u'\u0a35\u0a40\u0a30.', u'\u0a36\u0a41\u0a15\u0a30.', u'\u0a36\u0a28\u0a40.', u'\u0a10\u0a24.'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': u'\u0a66', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6^TTturbogears/i18n/data/pa_IN.pyc; AEc @sHhddS(?spauਪੰਜਾਬੀsINu ਭਾਰਤuਜਨਵਰੀuਫ਼ਰਵਰੀu ਮਾਰਚuਅਪ੍ਰੈਲuਮਈu ਜੂਨuਜੁਲਾਈu ਅਗਸਤuਸਤੰਬਰuਅਕਤੂਬਰuਨਵੰਬਰuਦਸੰਬਰuਸੋਮਵਾਰuਮੰਗਲਵਾਰuਬੁਧਵਾਰuਵੀਰਵਾਰuਸ਼ੁੱਕਰਵਾਰuਸ਼ਨੀਚਰਵਾਰuਐਤਵਾਰu ਸੋਮ.u ਮੰਗਲ.u ਬੁਧ.u ਵੀਰ.u ਸ਼ੁਕਰ.u ਸ਼ਨੀ.uਐਤ.smediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigitu੦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\pa_IN.pys?s***PKP68$turbogears/i18n/data/pl.py# Formatting configuration for locale pl languages={'el': 'grecki', 'en': 'angielski', 'zh': u'chi\u0144ski', 'it': u'w\u0142oski', 'ar': 'arabski', 'cs': 'czeski', 'et': u'esto\u0144ski', 'es': u'hiszpa\u0144ski', 'ru': 'rosyjski', 'nl': 'holenderski', 'pt': 'portugalski', 'no': 'norweski', 'tr': 'turecki', 'lv': u'\u0142otewski', 'lt': 'litewski', 'ro': u'rumu\u0144ski', 'pl': 'polski', 'fr': 'francuski', 'bg': u'bu\u0142garski', 'hr': 'chorwacki', 'de': 'niemiecki', 'da': u'du\u0144ski', 'fi': u'fi\u0144ski', 'hu': u'w\u0119gierski', 'ja': u'japo\u0144ski', 'he': 'hebrajski', 'ko': u'korea\u0144ski', 'sv': 'szwedzki', 'sk': u's\u0142owacki', 'sl': u's\u0142owe\u0144ski'} countries={'BD': 'Bangladesz', 'BE': 'Belgia', 'BF': 'Burkina Faso', 'BG': u'Bu\u0142garia', 'BA': u'Bo\u015bnia i Hercegowina', 'BB': 'Barbados', 'WF': 'Wallis i Futuna', 'BM': 'Bermudy', 'BN': 'Brunei Darussalam', 'BO': 'Boliwia', 'BH': 'Bahrajn', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Bhutan', 'JM': 'Jamajka', 'BV': 'Wyspa Bouveta', 'BW': 'Botswana', 'WS': 'Samoa', 'BR': 'Brazylia', 'BS': 'Bahamy', 'BY': u'Bia\u0142oru\u015b', 'BZ': 'Belize', 'RU': 'Federacja Rosyjska', 'RW': 'Rwanda', 'TL': 'Timor Wschodni', 'RE': 'Reunion', 'TM': 'Turkmenia', 'TJ': u'Tad\u017cykistan', 'RO': 'Rumunia', 'TK': 'Tokelau', 'GW': 'Gwinea Bissau', 'GU': 'Guam', 'GT': 'Gwatemala', 'GS': u'Wyspy Georgia Po\u0142udniowa i Sandwich Po\u0142udniowy', 'GR': 'Grecja', 'GQ': u'Gwinea R\xf3wnikowa', 'GP': 'Gwadelupa', 'JP': 'Japonia', 'GY': 'Gujana', 'GF': 'Gujana Francuska', 'GE': 'Gruzja', 'GD': 'Grenada', 'GB': 'Wielka Brytania', 'GA': 'Gabon', 'SV': 'Salwador', 'GN': 'Gwinea', 'GM': 'Gambia', 'GL': 'Grenlandia', 'GI': 'Gibraltar', 'GH': 'Ghana', 'OM': 'Oman', 'TN': 'Tunezja', 'JO': 'Jordania', 'SP': 'Serbia', 'HR': 'Chorwacja', 'HT': 'Haiti', 'HU': u'W\u0119gry', 'HK': 'Hongkong, Specjalny Region Administracyjny Chin', 'HN': 'Honduras', 'HM': 'Wyspy Heard i McDonald', 'VE': 'Wenezuela', 'PR': 'Puerto Rico', 'PS': u'Terytoria Palesty\u0144skie', 'PW': 'Palau', 'PT': 'Portugalia', 'SJ': 'Svalbard i Wyspy Jan Mayen', 'PY': 'Paragwaj', 'IQ': 'Irak', 'PA': 'Panama', 'PF': 'Polinezja Francuska', 'PG': 'Papua Nowa Gwinea', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filipiny', 'PN': 'Pitcairn', 'PL': 'Polska', 'PM': 'St. Pierre i Miquelon', 'ZM': 'Zambia', 'EH': 'Sahara Zachodnia', 'EE': 'Estonia', 'EG': 'Egipt', 'ZA': u'Afryka Po\u0142udniowa', 'EC': 'Ekwador', 'IT': u'W\u0142ochy', 'VN': 'Wietnam', 'SB': 'Wyspy Salomona', 'ET': 'Etiopia', 'SO': 'Somalia', 'ZW': 'Zimbabwe', 'SA': 'Arabia Saudyjska', 'ES': 'Hiszpania', 'ER': 'Erytrea', 'MD': u'Mo\u0142dawia, Republika', 'MG': 'Madagaskar', 'MA': 'Maroko', 'MC': 'Monako', 'UZ': 'Uzbekistan', 'MM': 'Birma', 'ML': 'Mali', 'MO': 'Makau, Specjalny Region Administracyjny Chin', 'MN': 'Mongolia', 'MH': 'Wyspy Marshalla', 'MK': 'Macedonia, Republika', 'MU': 'Mauritius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Malediwy', 'MQ': 'Martynika', 'MP': u'Wsp\xf3lnota Marian\xf3w P\xf3\u0142nocnych', 'MS': 'Montserrat', 'MR': 'Mauretania', 'UG': 'Uganda', 'MY': 'Malezja', 'MX': 'Meksyk', 'IL': 'Izrael', 'FR': 'Francja', 'IO': 'Terytorium Brytyjskie Oceanu Indyjskiego', 'SH': u'Wyspa \u015awi\u0119tej Heleny', 'FI': 'Finlandia', 'FJ': u'Fid\u017ci', 'FK': 'Falklandy (Malwiny)', 'FM': 'Mikronezja, Stany Sfederowane', 'FO': 'Wyspy Owcze', 'NI': 'Nikaragua', 'NL': 'Holandia', 'NO': 'Norwegia', 'NA': 'Namibia', 'VU': 'Vanuatu', 'NC': 'Nowa Kaledonia', 'NE': 'Niger', 'NF': 'Wyspa Norfolk', 'NG': 'Nigeria', 'NZ': 'Nowa Zelandia', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Wyspy Cooka', 'CI': u'Wybrze\u017ce Ko\u015bci S\u0142oniowej', 'CH': 'Szwajcaria', 'CO': 'Kolumbia', 'CN': 'Chiny', 'CM': 'Kamerun', 'CL': 'Chile', 'CC': 'Wyspy Kokosowe (Keelinga)', 'CA': 'Kanada', 'CG': 'Kongo', 'CF': u'Republika \u015arodkowej Afryki', 'CD': 'Kongo, Republika Demokratyczna', 'CZ': 'Republika Czeska', 'CY': 'Cypr', 'CX': u'Wyspa Bo\u017cego Narodzenia', 'CR': 'Kostaryka', 'Fallback': 'en', 'CV': u'Wyspy Zielonego Przyl\u0105dka', 'CU': 'Kuba', 'SZ': 'Suazi', 'SY': 'Syria', 'KG': 'Kirgistan', 'KE': 'Kenia', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': u'Kambod\u017ca', 'KN': 'Saint Kitts i Nevis', 'KM': 'Komory', 'ST': u'Wyspy \u015awi\u0119tego Tomasza i Ksi\u0105\u017c\u0119ca', 'SK': u'S\u0142owacja', 'KR': u'Korea Po\u0142udniowa', 'SI': u'S\u0142owenia', 'KP': u'Korea P\xf3\u0142nocna', 'KW': 'Kuwejt', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sierra Leone', 'SC': 'Seszele', 'KZ': 'Kazachstan', 'KY': 'Kajmany', 'SG': 'Singapur', 'SE': 'Szwecja', 'SD': 'Sudan', 'DO': u'Republika Dominika\u0144ska', 'DM': 'Dominika', 'DJ': u'D\u017cibuti', 'DK': 'Dania', 'VG': 'Brytyjskie Wyspy Dziewicze', 'DE': 'Niemcy', 'YE': 'Jemen', 'DZ': 'Algieria', 'US': 'Stany Zjednoczone', 'UY': 'Urugwaj', 'YU': u'Jugos\u0142awia', 'YT': 'Majotta', 'UM': 'United States Minor Outlying Islands', 'LB': 'Liban', 'LC': 'Saint Lucia', 'LA': 'Laos (Demokratyczna Republika Ludowa)', 'TV': 'Tuvalu', 'TW': 'Tajwan', 'TT': 'Trinidad i Tobago', 'TR': 'Turcja', 'LK': 'Sri Lanka', 'LI': 'Liechtenstein', 'LV': u'\u0141otwa', 'TO': 'Tonga', 'LT': 'Litwa', 'LU': 'Luksemburg', 'LR': 'Liberia', 'LS': 'Lesotho', 'TH': 'Tajlandia', 'TF': u'Francuskie Terytoria Po\u0142udniowe', 'TG': 'Togo', 'TD': 'Czad', 'TC': 'Turks i Caicos', 'LY': 'Libijska', 'VA': u'Stolica Apostolska (Pa\u0144stwo Watyka\u0144skie)', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'Zjednoczone Emiraty Arabskie', 'AD': 'Andora', 'AG': 'Antigua i Barbuda', 'AF': 'Afganistan', 'AI': 'Anguilla', 'VI': u'Wyspy Dziewicze, Stan\xf3w Zjednoczonych', 'IS': 'Islandia', 'IR': 'Iran', 'AM': 'Armenia', 'AL': 'Albania', 'AO': 'Angola', 'AN': 'Antyle Holenderskie', 'AQ': 'Antarktyka', 'AS': u'Samoa Ameryka\u0144skie', 'AR': 'Argentyna', 'AU': 'Australia', 'AT': 'Austria', 'AW': 'Aruba', 'IN': 'Indie', 'TZ': 'Tanzania', 'AZ': u'Azerbejd\u017can', 'IE': 'Irlandia', 'ID': 'Indonezja', 'UA': 'Ukraina', 'QA': 'Katar', 'MZ': 'Mozambik'} months=[u'stycze\u0144', 'luty', 'marzec', u'kwiecie\u0144', 'maj', 'czerwiec', 'lipiec', u'sierpie\u0144', u'wrzesie\u0144', u'pa\u017adziernik', 'listopad', u'grudzie\u0144'] abbrMonths=['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', u'pa\u017a', 'lis', 'gru'] days=[u'poniedzia\u0142ek', 'wtorek', u'\u015broda', 'czwartek', u'pi\u0105tek', 'sobota', 'niedziela'] abbrDays=['Pn', 'Wt', u'\u015ar', 'Cz', 'Pt', 'So', 'N'] dateFormats={'medium': '%Y-%m-%d', 'full': '%%(dayname)s, %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%y-%m-%d'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6J&['['turbogears/i18n/data/pl.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAgZhdBdC<dDdE<dFdG<dHdId?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAgZhdBdC<dDdE<dFdG<dHdId?d?d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydzd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydzd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdDd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?d@dAdBgZhdCdD<dEdF<dGdF<dHdDd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddFFturbogears/i18n/data/sh.py# Formatting configuration for locale sh languages={'el': u'Gr\u010dki', 'en': 'Engleski', 'co': 'Korzikanski', 'af': 'Afrikanerski', 'sw': 'Svahili', 'ca': 'Katalonski', 'it': 'Italijanski', 'cs': u'\u010ce\u0161ki', 'ar': 'Arapski', 'mk': 'Makedonski', 'ga': 'Irski', 'eu': 'Baskijski', 'et': 'Estonski', 'zh': 'Kineski', 'id': 'Indonezijski', 'es': u'\u0160panski', 'ru': 'Ruski', 'nl': 'Holandski', 'pt': 'Portugalski', 'la': 'Latinski', 'tr': 'Turski', 'lv': 'Letonski', 'lt': 'Litvanski', 'vi': 'Vijetnamski', 'rm': 'Reto-Romanski', 'ro': 'Rumunski', 'is': 'Islandski', 'pl': 'Poljski', 'yi': u'Jidi\u0161', 'be': 'Beloruski', 'fr': 'Francuski', 'bg': 'Bugarski', 'uk': 'Ukrajnski', 'hr': 'Hrvatski', 'de': u'Nema\u010dki', 'da': 'Danski', 'fa': 'Persijski', 'no': u'Norve\u0161ki', 'br': 'Bretonski', 'fi': 'Finski', 'hy': 'Armenski', 'hu': u'Ma\u0111arski', 'ja': 'Japanski', 'he': 'Hebrejski', 'ka': 'Gruzijski', 'sr': 'Srpski', 'mo': 'Moldavski', 'mn': 'Mongolski', 'ko': 'Korejski', 'sv': u'\u0160vedski', 'km': u'Kambod\u017eanski', 'sk': u'Slova\u010dki', 'sh': 'Srpsko-Hrvatski', 'ku': 'Kurdski', 'sl': u'Slovena\u010dki', 'ky': 'Kirgiski', 'my': 'Burmanski', 'sq': 'Albanski'} countries={'BD': u'Banglade\u0161', 'BE': 'Belgija', 'BF': 'Burkina Faso', 'BG': 'Bugarska', 'BA': 'Bosna i Hercegovina', 'BB': 'Barbados', 'WF': 'Wallis and Futuna', 'BM': 'Bermuda', 'BN': 'Brunej', 'BO': 'Bolivija', 'BH': 'Bahrein', 'BI': 'Burundi', 'BJ': 'Benin', 'BT': 'Butan', 'JM': 'Jamajka', 'BV': 'Bouvet Island', 'BW': 'Bocvana', 'WS': 'Samoa', 'BR': 'Brazil', 'BS': 'Bahami', 'BY': 'Belorusija', 'BZ': 'Belise', 'RU': 'Rusija', 'RW': 'Ruanda', 'TL': 'Timor-Leste', 'RE': u'R\xe9union', 'TM': 'Turkmenistan', 'TJ': u'Tad\u017eikistan', 'RO': 'Rumunija', 'TK': 'Tokelau', 'GW': 'Gvineja-Bisao', 'GU': 'Guam', 'GT': 'Gvatemala', 'GS': 'South Georgia and South Sandwich Islands', 'GR': u'Gr\u010dka', 'GQ': 'Ekvatorijalna Gvineja', 'GP': 'Gvadelupe', 'JP': 'Japan', 'GY': 'Gvajana', 'GF': 'Francuska Gvajana', 'GE': 'Gruzija', 'GD': 'Grenada', 'GB': 'Velika Britanija', 'GA': 'Gabon', 'SV': 'Salvador', 'GN': 'Gvineja', 'GM': 'Gambija', 'GL': 'Greenland', 'GI': 'Gibraltar', 'GH': 'Gana', 'OM': 'Oman', 'TN': 'Tunis', 'JO': 'Jordan', 'SP': 'Srbija', 'HR': 'Hrvatska', 'HT': 'Haiti', 'HU': u'Ma\u0111arska', 'HK': 'Hong Kong S.A.R., China', 'HN': 'Honduras', 'HM': 'Heard Island and McDonald Islands', 'VE': 'Venecuela', 'PR': 'Porto Riko', 'PS': 'Palestinian Territory', 'PW': 'Palau', 'PT': 'Portugal', 'SJ': 'Svalbard and Jan Mayen', 'PY': 'Paragvaj', 'IQ': 'Irak', 'PA': 'Panama', 'PF': 'Francuska Polinezija', 'PG': 'Papua Nova Gvineja', 'PE': 'Peru', 'PK': 'Pakistan', 'PH': 'Filipini', 'PN': 'Pitcairn', 'PL': 'Poljska', 'PM': 'Saint Pierre and Miquelon', 'ZM': 'Zambija', 'EH': 'Zapadna Sahara', 'EE': 'Estonija', 'EG': 'Egipat', 'ZA': u'Ju\u017ena Afrika', 'EC': 'Ekvador', 'IT': 'Italija', 'VN': 'Vijetnam', 'SB': 'Solomon Islands', 'ET': 'Etiopija', 'SO': 'Somalija', 'ZW': 'Zimbabve', 'SA': 'Saudijska Arabija', 'ES': u'\u0160panija', 'ER': 'Eritreja', 'MD': 'Moldavija', 'MG': 'Madagaskar', 'MA': 'Maroko', 'MC': 'Monako', 'UZ': 'Uzbekistan', 'MM': 'Mijnamar', 'ML': 'Mali', 'MO': 'Macao S.A.R. China', 'MN': 'Mongolija', 'MH': 'Marshall Islands', 'MK': 'Makedonija', 'MU': 'Mauricius', 'MT': 'Malta', 'MW': 'Malawi', 'MV': 'Maldives', 'MQ': 'Martinik', 'MP': 'Northern Mariana Islands', 'MS': 'Montserrat', 'MR': 'Mauritanija', 'UG': 'Uganda', 'MY': 'Malezija', 'MX': 'Meksiko', 'IL': 'Izrael', 'FR': 'Francuska', 'IO': 'British Indian Ocean Territory', 'SH': 'Saint Helena', 'FI': 'Finska', 'FJ': u'Fid\u017ei', 'FK': 'Falkland Islands', 'FM': 'Mikronezija', 'FO': 'Faroe Islands', 'NI': 'Nikaragva', 'NL': 'Holandija', 'NO': u'Norve\u0161ka', 'NA': 'Namibija', 'VU': 'Vanuatu', 'NC': 'Nova Kaledonija', 'NE': 'Niger', 'NF': 'Norfolk Island', 'NG': 'Nigerija', 'NZ': 'Novi Zeland', 'NP': 'Nepal', 'NR': 'Nauru', 'NU': 'Niue', 'CK': 'Cook Islands', 'CI': u'Obala Slonova\u010de', 'CH': u'\u0160vajcarska', 'CO': 'Kolumbija', 'CN': 'Kina', 'CM': 'Kamerun', 'CL': u'\u010cile', 'CC': 'Cocos Islands', 'CA': 'Kanada', 'CG': 'Kongo', 'CF': u'Centralno Afri\u010dka Republika', 'CD': 'Democratic Republic of the Congo', 'CZ': u'\u010ce\u0161ka', 'CY': 'Kipar', 'CX': 'Christmas Island', 'CR': 'Kostarika', 'Fallback': 'en', 'CV': 'Cape Verde', 'CU': 'Kuba', 'SZ': 'Svazilend', 'SY': 'Sirija', 'KG': 'Kirgistan', 'KE': 'Kenija', 'SR': 'Surinam', 'KI': 'Kiribati', 'KH': u'Kambod\u017ea', 'KN': 'Saint Kitts and Nevis', 'KM': 'Comoros', 'ST': 'Sao Tome and Principe', 'SK': u'Slova\u010dka', 'KR': u'Ju\u017ena Koreja', 'SI': 'Slovenija', 'KP': 'Severna Koreja', 'KW': 'Kuvajt', 'SN': 'Senegal', 'SM': 'San Marino', 'SL': 'Sijera Leone', 'SC': u'Sej\u0161eli', 'KZ': 'Kazahstan', 'KY': 'Cayman Islands', 'SG': 'Singapur', 'SE': u'\u0160vedska', 'SD': 'Sudan', 'DO': 'Dominikanska Republika', 'DM': 'Dominika', 'DJ': u'D\u017eibuti', 'DK': 'Danska', 'VG': u'Britanska Devi\u010danska Ostrva', 'DE': u'Nema\u010dka', 'YE': 'Jemen', 'DZ': u'Al\u017eir', 'US': u'Sjedinjene Ameri\u010dke Dr\u017eave', 'UY': 'Urugvaj', 'YU': 'Jugoslavija', 'YT': 'Mayotte', 'UM': 'United States Minor Outlying Islands', 'LB': 'Liban', 'LC': 'Saint Lucia', 'LA': 'Laos', 'TV': 'Tuvalu', 'TW': 'Tajvan', 'TT': 'Trinidad i Tobago', 'TR': 'Turska', 'LK': u'\u0160rilanka', 'LI': u'Lihen\u0161tajn', 'LV': 'Letonija', 'TO': 'Tonga', 'LT': 'Litvanija', 'LU': 'Luksemburg', 'LR': 'Liberija', 'LS': 'Lesoto', 'TH': 'Tajland', 'TF': u'Francuske Ju\u017ene Teritorije', 'TG': 'Togo', 'TD': u'\u010cad', 'TC': 'Turks and Caicos Islands', 'LY': 'Libija', 'VA': 'Vatikan', 'VC': 'Saint Vincent and the Grenadines', 'AE': 'Ujedinjeni Arapski Emirati', 'AD': 'Andora', 'AG': 'Antigua and Barbuda', 'AF': 'Avganistan', 'AI': 'Anguilla', 'VI': u'S.A.D. Devi\u010danska Ostrva', 'IS': 'Island', 'IR': 'Iran', 'AM': 'Armenija', 'AL': 'Albanija', 'AO': 'Angola', 'AN': 'Holandski Antili', 'AQ': 'Antarctica', 'AS': 'American Samoa', 'AR': 'Argentina', 'AU': 'Australija', 'AT': 'Austrija', 'AW': 'Aruba', 'IN': 'Indija', 'TZ': 'Tanzanija', 'AZ': u'Azerbejd\u017ean', 'IE': 'Irska', 'ID': 'Indonezija', 'UA': 'Ukrajina', 'QA': 'Katar', 'MZ': 'Mozambik'} months=['januar', 'februar', 'mart', 'april', 'maj', 'juni', 'juli', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'] abbrMonths=['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'] days=['ponedeljak', 'utorak', 'sreda', u'\u010detvrtak', 'petak', 'subota', 'nedelja'] abbrDays=['pon', 'uto', 'sre', u'\u010det', 'pet', 'sub', 'ned'] dateFormats={'medium': '%d.%m.%Y.', 'full': '%%(dayname)s, %d. %%(monthname)s %Y.', 'long': '%%(dayname)s, %d.%m.%Y.', 'short': '%d.%m.%y.'} numericSymbols={'group': '.', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6S{x))turbogears/i18n/data/sh.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdsd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdTd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drdsd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdTd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?gZhd@dA<dBdC<dDdE<dFdAd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dld<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<ddd?gZhd@dA<dBdC<dDdE<dFdAd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBd?<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkd<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?d@gZhdAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBd?<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkd<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?d@gZhdAdB<dCdD<dEdF<dGdHd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdGd?<d@dA<dBdC<dDdE<dFdGd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdwd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dud<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdK<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dud<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdK<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dud<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdK<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djd'<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d-<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_ஐக்கிய அரபு கூட்டாட்சிsADuஅன்டோராsAGu4ஆன்டிகுவா பார்புடாsAFu'ஆப்கானிஸ்தான்sIQuஇராக்sISuஐஸ்லாந்துsIRuஈரான்sAMuஆர்மீனியாsALuஅல்பேனியாsAOuஅங்கோலாsARu!அர்ஜெண்டினாsAUu!ஆஸ்திரேலியாsATuஆஸ்திரியாsINuஇந்தியாsAZuஅஜர்பைஜான்sIEuஅயர்லாந்துsIDu!இந்தோனேஷியாsUAuஉக்ரைன்sQAuகாடார்uஜனவரிuபிப்ரவரிuமார்ச்uஏப்ரல்uமேu ஜூன்u ஜூலைuஆகஸ்ட்uசெப்டம்பர்uஅக்டோபர்uநவம்பர்uடிசம்பர்uஜன.u பிப்.u மார்.u ஏப்.uஆக.u செப்.u அக்.uநவ.u டிச.uதிங்கள்uசெவ்வாய்uபுதன்uவியாழன்uவெள்ளிu சனிuஞாயிறுuதிuசெuபுuவிuவெuசuஞாsmediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\ta.pys?s ***PKP6\6,P,Pturbogears/i18n/data/ta_IN.py# Formatting configuration for locale ta_IN languages={'gu': u'\u0b95\u0bc1\u0b9c\u0bb0\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf', 'gd': u'\u0bb8\u0bcd\u0b95\u0bbe\u0b9f\u0bcd\u0bb8\u0bcd \u0b95\u0bbe\u0bb2\u0bc6\u0b95\u0bcd', 'ga': u'\u0b90\u0bb0\u0bbf\u0bb7\u0bcd', 'gn': u'\u0b95\u0bc1\u0bb0\u0bbe\u0ba9\u0bbf', 'gl': u'\u0b95\u0bc6\u0bb2\u0bbf\u0bb8\u0bbf\u0baf\u0ba9\u0bcd', 'la': u'\u0bb2\u0bbe\u0ba4\u0bbf\u0ba9\u0bcd', 'ln': u'\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bbe\u0bb2\u0bbe', 'lo': u'\u0bb2\u0bcb\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0ba9\u0bcd', 'tt': u'\u0b9f\u0bbe\u0b9f\u0bb0\u0bcd', 'tr': u'\u0b9f\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd', 'ts': u'\u0bb8\u0bcb\u0b99\u0bcd\u0b95\u0bbe', 'lv': u'\u0bb2\u0bc7\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0ba9\u0bcd (\u0bb2\u0bc7\u0b9f\u0bcd\u0b9f\u0bbf\u0bb7\u0bcd)', 'to': u'\u0b9f\u0bcb\u0b99\u0bcd\u0b95\u0bbe', 'lt': u'\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'tk': u'\u0b9f\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bcd', 'th': u'\u0ba4\u0bbe\u0baf\u0bcd', 'ti': u'\u0b9f\u0bbf\u0b95\u0bcd\u0bb0\u0bbf\u0ba9\u0bcd\u0baf\u0bbe', 'tg': u'\u0ba4\u0bbe\u0b9c\u0bbf\u0b95\u0bcd', 'te': u'\u0ba4\u0bc6\u0bb2\u0bc1\u0b99\u0bcd\u0b95\u0bc1', 'ta': u'\u0ba4\u0bae\u0bbf\u0bb4\u0bcd', 'yi': u'\u0b88\u0ba4\u0bcd\u0ba4\u0bbf\u0bb7', 'yo': u'\u0baf\u0bcb\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bbe', 'de': u'\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bcd', 'da': u'\u0b9f\u0bbe\u0ba9\u0bbf\u0bb7\u0bcd', 'dz': u'\u0baa\u0bc1\u0b9f\u0bbe\u0ba9\u0bbf', 'st': u'\u0bb7\u0bc6\u0bb8\u0bcd\u0bb8\u0bcb\u0ba4\u0bcb', 'qu': u'\u0b95\u0bbf\u0baf\u0bc1\u0b9a\u0bbe', 'el': u'\u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd', 'eo': u'\u0b8e\u0bb8\u0bcd\u0baa\u0bb0\u0bc7\u0ba9\u0bcd\u0b9f\u0bcb', 'en': u'\u0b86\u0b99\u0bcd\u0b95\u0bbf\u0bb2\u0bae\u0bcd', 'zh': u'\u0b9a\u0bc0\u0ba9\u0bae\u0bcd', 'za': u'\u0b9c\u0bc1\u0bb5\u0bbe\u0b99\u0bcd', 'uk': u'\u0b89\u0b95\u0bcd\u0bb0\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'eu': u'\u0baa\u0bb8\u0bcd\u0b95\u0bcd', 'et': u'\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'es': u'\u0bb8\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0bb7\u0bcd', 'ru': u'\u0bb0\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'rw': u'\u0b95\u0bbf\u0ba9\u0bcd\u0baf\u0bb0\u0bcd\u0bb5\u0bc6\u0ba9\u0bcd\u0b9f\u0bbe', 'rm': u'\u0bb0\u0bc8\u0b9f\u0bcd\u0b9f\u0bcb-\u0bb0\u0bcb\u0bae\u0bc6\u0ba9\u0bcd\u0bb8\u0bcd', 'rn': u'\u0b95\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbf', 'ro': u'\u0bb0\u0bcb\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'bn': u'\u0bb5\u0b99\u0bcd\u0b95\u0bbe\u0bb3\u0bae\u0bcd', 'be': u'\u0baa\u0bc8\u0bb2\u0bcb\u0bb0\u0bc1\u0bb7\u0bcd\u0ba9\u0bcd', 'bg': u'\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'ba': u'\u0baa\u0bbe\u0bb7\u0bcd\u0b95\u0bbf\u0bb0\u0bcd0', 'wo': u'\u0b92\u0bb2\u0bcb\u0baa\u0bcd', 'jv': u'\u0b9c\u0bbe\u0bb5\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'bo': u'\u0ba4\u0bbf\u0baa\u0bc6\u0ba4\u0bcd\u0ba4\u0bc1', 'bh': u'\u0baa\u0bbf\u0bb9\u0bbe\u0bb0\u0bbf', 'bi': u'\u0baa\u0bbf\u0bb8\u0bcd\u0bb2\u0bbe\u0bae\u0bbe', 'br': u'\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0ba9\u0bcd', 'ja': u'\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'om': u'\u0b92\u0bb0\u0bcb\u0bae (\u0b85\u0baa\u0ba9\u0bcd)', 'root': u'\u0ba4\u0bae\u0bbf\u0bb4\u0bcd', 'oc': u'\u0b86\u0b95\u0bbf\u0b9f\u0bbf\u0baf\u0ba9\u0bcd', 'tw': u'\u0ba4\u0bcd\u0ba4\u0bbf\u0bb5\u0bbf', 'or': u'\u0b92\u0bb0\u0bbf\u0baf\u0bbe', 'xh': u'\u0bb9\u0bcb\u0bb7\u0bbe', 'co': u'\u0b95\u0bbe\u0bb0\u0bcd\u0b9a\u0bbf\u0baf\u0ba9\u0bcd', 'ca': u'\u0b95\u0bbe\u0b9f\u0bb2\u0bbe\u0ba9\u0bcd', 'cy': u'\u0bb5\u0bc6\u0bb2\u0bcd\u0bb7\u0bcd', 'cs': u'\u0b9a\u0bc6\u0b95\u0bcd', 'ps': u'\u0baa\u0bc7\u0bb7\u0bcd\u0b9f\u0bcb (\u0baa\u0bc1\u0bb7\u0bcd\u0b9f\u0bcb)', 'kok': u'\u0b95\u0bca\u0b99\u0bcd\u0b95\u0ba9\u0bbf', 'pt': u'\u0baa\u0bcb\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bc0\u0bb8\u0bcd', 'tl': u'\u0b9f\u0bbe\u0b95\u0bbe\u0bb2\u0bcb\u0b95\u0bcd', 'pa': u'\u0baa\u0b9e\u0bcd\u0b9a\u0bbe\u0baa\u0bbf', 'vi': u'\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bbf\u0bb8\u0bcd', 'pl': u'\u0baa\u0bcb\u0bb2\u0bbf\u0bb7\u0bcd', 'hy': u'\u0b86\u0bb0\u0bcd\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'hr': u'\u0b95\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'iu': u'\u0b87\u0ba9\u0bc1\u0b95\u0bbf\u0b9f\u0b9f\u0bcd', 'hu': u'\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'hi': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bbf', 'ha': u'\u0bb9\u0bca\u0bb8\u0bbe', 'he': u'\u0bb9\u0bc1\u0baa\u0bcd\u0bb0\u0bc1', 'mg': u'\u0bae\u0bb2\u0b95\u0bc6\u0bb8\u0bbf', 'uz': u'\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bcd', 'ml': u'\u0bae\u0bb2\u0bc8\u0baf\u0bbe\u0bb3\u0bae\u0bcd', 'mo': u'\u0bae\u0bcb\u0bb2\u0bcd\u0b9f\u0bc7\u0bb5\u0bbf\u0baf\u0ba9\u0bcd', 'mn': u'\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0ba9\u0bcd', 'mi': u'\u0bae\u0bcb\u0bb0\u0bbf', 'ik': u'\u0b87\u0ba9\u0bc1\u0baa\u0bc6\u0b95\u0bcd', 'mk': u'\u0bae\u0bc6\u0b95\u0bcd\u0b95\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'ur': u'\u0b89\u0bb0\u0bc1\u0ba4\u0bc1', 'mt': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbf\u0bb8\u0bcd', 'ms': u'\u0bae\u0bb2\u0bbe\u0baf\u0bcd', 'mr': u'\u0bae\u0bb0\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf', 'ug': u'\u0baf\u0bc1\u0b95\u0bc1\u0bb0\u0bcd', 'my': u'\u0baa\u0bb0\u0bcd\u0bae\u0bbf\u0bb8\u0bcd', 'aa': u'\u0b85\u0baa\u0bbe\u0bb0\u0bcd', 'ab': u'\u0b85\u0baa\u0bcd\u0b95\u0bbe\u0bb8\u0bbf\u0ba9\u0bcd', 'ss': u'\u0bb7\u0bbf\u0bb8\u0bcd\u0bb5\u0bbe\u0ba4\u0bbf', 'af': u'\u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0ba9\u0bcd\u0bb8\u0bcd', 'tn': u'\u0bb8\u0bc6\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe', 'sw': u'\u0b9a\u0bc1\u0bb5\u0bbe\u0bb9\u0bbf\u0bb2\u0bbf', 'is': u'\u0b90\u0bb8\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd', 'am': u'\u0b85\u0bae\u0bcd\u0bb9\u0bbe\u0bb0\u0bbf\u0b95\u0bcd', 'it': u'\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf\u0baf\u0ba9\u0bcd', 'sv': u'\u0bb7\u0bc0\u0bb5\u0bbf\u0b9f\u0bbf\u0bb8\u0bcd', 'ia': u'\u0b87\u0ba9\u0bcd\u0b9f\u0bb0\u0bcd\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0bbe', 'as': u'\u0b85\u0bb8\u0bcd\u0bb8\u0bbe\u0bae\u0bbf', 'ar': u'\u0b85\u0bb0\u0baa\u0bc1', 'su': u'\u0b9a\u0bc1\u0b9f\u0bbe\u0ba9\u0bc0\u0bb8\u0bcd', 'zu': u'\u0b9c\u0bc2\u0bb2\u0bc2', 'ay': u'\u0b85\u0baf\u0bae\u0bb0\u0bbe', 'az': u'\u0b85\u0b9a\u0bb0\u0bcd\u0baa\u0bbe\u0baf\u0bcd\u0b9c\u0bbe\u0ba9\u0bbf', 'ie': u'\u0b87\u0ba9\u0bcd\u0b9f\u0bb0\u0bcd\u0bb2\u0bbf\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0bbe', 'id': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'sk': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc6\u0b95\u0bcd', 'nl': u'\u0b9f\u0b9a\u0bcd\u0b9a\u0bc1', 'no': u'\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7\u0b95\u0bbf\u0baf\u0ba9\u0bcd', 'na': u'\u0ba8\u0bbe\u0bb0\u0bc2', 'ne': u'\u0ba8\u0bc7\u0baa\u0bcd\u0baa\u0bbe\u0bb2\u0bbf', 'vo': u'\u0b92\u0bb2\u0baa\u0bc1\u0b95\u0bcd', 'fr': u'\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1', 'sm': u'\u0bb8\u0bc6\u0bae\u0bcb\u0ba9\u0bcd', 'fy': u'\u0baa\u0bbf\u0bb0\u0bbf\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'fa': u'\u0baa\u0bb0\u0bcd\u0bb8\u0bbf\u0baf\u0ba9\u0bcd', 'fi': u'\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0bbf\u0bb7\u0bcd', 'fj': u'\u0baa\u0bbf\u0b9c\u0bbf', 'sa': u'\u0b9a\u0bae\u0bb8\u0bcd\u0b95\u0bbf\u0bb0\u0bc1\u0ba4\u0bae\u0bcd', 'fo': u'\u0baa\u0bc8\u0bb0\u0bcb\u0bb8\u0bbf', 'ka': u'\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bae\u0bcd', 'kk': u'\u0b95\u0b9a\u0bbe\u0b95\u0bcd', 'sr': u'\u0b9a\u0bb0\u0bcd\u0baa\u0bbf\u0baf\u0ba9\u0bcd', 'sq': u'\u0b85\u0bb2\u0bcd\u0baa\u0bc6\u0ba9\u0bbf\u0baf\u0ba9\u0bcd', 'ko': u'\u0b95\u0bca\u0bb0\u0bbf\u0baf\u0ba9\u0bcd', 'kn': u'\u0b95\u0ba9\u0bcd\u0ba9\u0b9f\u0bbe', 'km': u'\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0ba9\u0bcd', 'kl': u'\u0b95\u0bbf\u0bb0\u0bbf\u0ba9\u0bcd\u0bb2\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bcd', 'ks': u'\u0b95\u0bbe\u0bb7\u0bcd\u0bae\u0bbf\u0bb0\u0bbf', 'si': u'\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bae\u0bcd', 'sh': u'\u0b9a\u0bc6\u0bb0\u0bcd\u0baa\u0bcb-\u0b95\u0bcd\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0ba9\u0bcd', 'so': u'\u0b9a\u0bcb\u0bae\u0bbe\u0bb2\u0bbf', 'sn': u'\u0bb7\u0bcb\u0ba9\u0bbe', 'ku': u'\u0b95\u0bc1\u0bb0\u0bcd\u0ba4\u0bbf\u0bb7\u0bcd', 'sl': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbf\u0ba9\u0bc7\u0baf\u0bbf\u0ba9\u0bcd', 'ky': u'\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb7\u0bcd', 'sg': u'\u0b9a\u0bc6\u0ba9\u0bcd\u0b95\u0bcd\u0bb0\u0bcb', 'sd': u'\u0b9a\u0bbf\u0ba8\u0bcd\u0ba4\u0bbf'} countries={'BD': u'\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bbe\u0ba4\u0bc7\u0bb7\u0bcd', 'BE': u'\u0baa\u0bc6\u0bb2\u0bcd\u0b9c\u0bbf\u0baf\u0bae\u0bcd', 'BF': u'\u0baa\u0bb0\u0bcd\u0b95\u0bbf\u0ba9\u0bcb \u0baa\u0bbe\u0bb8\u0bcb', 'BG': u'\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0bbe', 'BA': u'\u0baa\u0bcb\u0bb8\u0bcd\u0ba9\u0bbf\u0baf\u0bbe \u0bb9\u0bc6\u0bb0\u0bcd\u0bb8\u0bbf\u0b95\u0bcb\u0bb5\u0bbf\u0ba9\u0bbe', 'BB': u'\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0b9f\u0bcb\u0bb8\u0bcd', 'BN': u'\u0baa\u0bc1\u0bb0\u0bc2\u0ba9\u0bc7\u0baf\u0bcd', 'BO': u'\u0baa\u0bca\u0bb2\u0bbf\u0bb5\u0bbf\u0baf\u0bbe', 'BH': u'\u0baa\u0bb9\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd', 'BI': u'\u0baa\u0bc1\u0bb0\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf', 'BJ': u'\u0baa\u0bc6\u0ba9\u0bbf\u0ba9\u0bcd', 'BT': u'\u0baa\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd', 'JM': u'\u0b9c\u0bae\u0bbe\u0baf\u0bcd\u0b95\u0bcd\u0b95\u0bbe', 'BW': u'\u0baa\u0bcb\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe', 'WS': u'\u0b9a\u0bae\u0bcb\u0bb5\u0bbe', 'BR': u'\u0baa\u0bbf\u0bb0\u0bc7\u0bb8\u0bbf\u0bb2\u0bcd', 'BS': u'\u0baa\u0bb9\u0bbe\u0bae\u0bbe\u0bb8\u0bcd', 'BY': u'\u0baa\u0bc6\u0bb2\u0bbe\u0bb0\u0bc2\u0bb8\u0bcd', 'BZ': u'\u0baa\u0bc6\u0bb2\u0bbf\u0bb8\u0bcd', 'RU': u'\u0bb0\u0bb7\u0bcd\u0baf\u0bbe', 'TM': u'\u0ba4\u0bc1\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'TJ': u'\u0ba4\u0bbe\u0b9c\u0bbf\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'RO': u'\u0bb0\u0bc1\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'GW': u'\u0b95\u0bbf\u0ba9\u0bbf-\u0baa\u0bbf\u0bb8\u0bcd\u0bb8\u0bbe\u0bb5\u0bcd', 'GT': u'\u0b95\u0bc1\u0bb5\u0bbe\u0ba4\u0bcd\u0ba4\u0bbe\u0bae\u0bbe\u0bb2\u0bbe', 'GR': u'\u0b95\u0bbf\u0bb0\u0bc0\u0bb8\u0bcd', 'GQ': u'\u0b88\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bbf\u0b9f\u0bcb\u0bb0\u0bbf\u0baf\u0bb2\u0bcd \u0b95\u0bbf\u0ba9\u0bbf', 'JP': u'\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bcd', 'GY': u'\u0b95\u0baf\u0bbe\u0ba9\u0bbe', 'GE': u'\u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe', 'GD': u'\u0b95\u0bbf\u0bb0\u0ba9\u0bc6\u0b9f\u0bbe', 'GB': u'\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bbf\u0bb7\u0bcd \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bb0\u0b9a\u0bc1', 'GA': u'\u0b95\u0bbe\u0baa\u0bcb\u0ba9\u0bcd', 'GN': u'\u0b95\u0bbf\u0ba9\u0bbf', 'GM': u'\u0b95\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'GH': u'\u0b95\u0bbe\u0ba9\u0bbe', 'OM': u'\u0b93\u0bae\u0bbe\u0ba9\u0bcd', 'TN': u'\u0ba4\u0bc1\u0ba9\u0bbf\u0b9a\u0bbf\u0baf\u0bbe', 'JO': u'\u0b9c\u0bca\u0bb0\u0bcd\u0b9f\u0bbe\u0ba9\u0bcd', 'HR': u'\u0b95\u0bc1\u0bb0\u0bcb\u0b9a\u0bbf\u0baf\u0bbe', 'HT': u'\u0bb9\u0bc6\u0baf\u0bcd\u0ba4\u0bbf', 'HU': u'\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf', 'HN': u'\u0bb9\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1\u0bb0\u0bbe\u0bb8\u0bcd', 'VE': u'\u0bb5\u0bc6\u0ba9\u0b9c\u0bc1\u0bb5\u0bc7\u0bb2\u0bbe', 'PT': u'\u0baa\u0bcb\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bc1\u0b95\u0bcd\u0b95\u0bb2\u0bcd', 'PY': u'\u0baa\u0bbe\u0bb0\u0b95\u0bc1\u0bb5\u0bc7', 'PA': u'\u0baa\u0ba3\u0bbe\u0bae\u0bbe', 'PG': u'\u0baa\u0bbe\u0baa\u0bcd\u0baa\u0bc1\u0bb5\u0bbe-\u0ba8\u0bbf\u0baf\u0bc2\u0b95\u0bbf\u0ba9\u0bbf', 'PE': u'\u0baa\u0bc6\u0bb0\u0bc1', 'PK': u'\u0baa\u0bbe\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'PH': u'\u0baa\u0bbf\u0bb2\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd', 'PL': u'\u0baa\u0bcb\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1', 'EE': u'\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe', 'EG': u'\u0b8e\u0b95\u0bbf\u0baa\u0bcd\u0ba4\u0bc1', 'ZA': u'\u0ba4\u0bc6\u0ba9\u0bcd \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe', 'EC': u'\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd', 'IT': u'\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf', 'VN': u'\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bcd', 'SB': u'\u0b9a\u0bbe\u0bb2\u0bae\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd', 'ET': u'\u0b8e\u0ba4\u0bbf\u0baf\u0bcb\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'ZW': u'\u0b9c\u0bbf\u0bae\u0bcd\u0baa\u0bbe\u0baa\u0bcd\u0bb5\u0bc7', 'ES': u'\u0bb8\u0bcd\u0baa\u0bc6\u0baf\u0bbf\u0ba9\u0bcd', 'MD': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bcb\u0bb5\u0bbe', 'MA': u'\u0bae\u0bca\u0bb0\u0bcb\u0b95\u0bcd\u0b95\u0bcb', 'MC': u'\u0bae\u0bca\u0ba9\u0bbe\u0b95\u0bcd\u0b95\u0bcb', 'UZ': u'\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'MM': u'\u0bae\u0bbf\u0baf\u0bbe\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd', 'ML': u'\u0bae\u0bbe\u0bb2\u0bc0', 'MN': u'\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0bbe', 'MK': u'\u0bae\u0b9a\u0bc6\u0b9f\u0bcb\u0ba3\u0bbf\u0baf\u0bbe', 'MT': u'\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbe', 'MW': u'\u0bae\u0bb2\u0bbe\u0bb5\u0bc0', 'MV': u'\u0bae\u0bbe\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0bb5\u0bc1', 'MY': u'\u0bae\u0bb2\u0bc7\u0bb7\u0bbf\u0baf\u0bbe', 'MX': u'\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb', 'IL': u'\u0b87\u0bb8\u0bcd\u0bb0\u0bc7\u0bb2\u0bcd', 'FR': u'\u0baa\u0bbf\u0bb0\u0bbe\u0ba9\u0bcd\u0bb8\u0bcd', 'FI': u'\u0baa\u0bbf\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'FJ': u'\u0baa\u0bbf\u0b9c\u0bbf', 'NI': u'\u0ba8\u0bbf\u0b95\u0bbe\u0bb0\u0bbe\u0b95\u0bc1\u0bb5\u0bbe', 'NL': u'\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'NO': u'\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7', 'NA': u'\u0ba9\u0bbe\u0bae\u0bc0\u0baa\u0bbf\u0baf\u0bbe', 'VU': u'\u0bb5\u0ba9\u0bc1\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1', 'NZ': u'\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'NP': u'\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd', 'NR': u'\u0ba8\u0bcc\u0bb0\u0bc1', 'CI': u'\u0b90\u0bb5\u0bb0\u0bbf \u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bcd', 'CH': u'\u0bb8\u0bcd\u0bb5\u0bbf\u0b9f\u0bcd\u0b9a\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'CO': u'\u0b95\u0bca\u0bb2\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe', 'CN': u'\u0b9a\u0bc0\u0ba9', 'CM': u'\u0b95\u0bc7\u0bae\u0bb0\u0bc2\u0ba9\u0bcd', 'CL': u'\u0b9a\u0bbf\u0bb2\u0bbf', 'CA': u'\u0b95\u0ba9\u0b9f\u0bbe', 'CG': u'\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb', 'CF': u'\u0bae\u0ba4\u0bcd\u0ba4\u0bbf\u0baf \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'CZ': u'\u0b9a\u0bc6\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'CY': u'\u0b9a\u0bc8\u0baa\u0bcd\u0bb0\u0bb8\u0bcd', 'CR': u'\u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bbf\u0b95\u0bbe', 'CV': u'\u0b95\u0bc7\u0baa\u0bcd \u0bb5\u0bc6\u0bb0\u0bcd\u0b9f\u0bc7', 'CU': u'\u0b95\u0bbf\u0baf\u0bc2\u0baa\u0bbe', 'SY': u'\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe', 'KG': u'\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'KE': u'\u0b95\u0bc6\u0ba9\u0bcd\u0baf\u0bbe', 'SR': u'\u0b9a\u0bc2\u0bb0\u0bbf\u0ba9\u0bbe\u0bae\u0bcd', 'KI': u'\u0b95\u0bbf\u0bb0\u0bbf\u0baa\u0b9f\u0bbf', 'KH': u'\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0bbe', 'SV': u'\u0b8e\u0bb2\u0bcd \u0b9a\u0bbe\u0bb2\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd', 'KM': u'\u0b95\u0bcb\u0bae\u0bb0\u0bcb\u0bb8\u0bcd', 'SK': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbe\u0b95\u0bbf\u0baf\u0bbe', 'KR': u'\u0ba4\u0bc6\u0ba9\u0bcd \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe', 'SI': u'\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'KP': u'\u0bb5\u0b9f \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe', 'KW': u'\u0b95\u0bc1\u0bb5\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1', 'SM': u'\u0b9a\u0bbe\u0ba9\u0bcd\u0bae\u0bc6\u0bb0\u0bbf\u0ba9\u0bcb', 'KZ': u'\u0b95\u0b9c\u0b95\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'SA': u'\u0b9a\u0bb5\u0bc2\u0ba4\u0bbf \u0b85\u0bb0\u0bc7\u0baa\u0bbf\u0baf\u0bbe', 'SG': u'\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd', 'SE': u'\u0bb8\u0bcd\u0bb5\u0bc0\u0b9f\u0ba9\u0bcd', 'DO': u'\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0ba9\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'DM': u'\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0bbe', 'DJ': u'\u0b9c\u0bbf\u0baa\u0bcc\u0b9f\u0bbf', 'DK': u'\u0b9f\u0bc6\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd\u0b95\u0bcd', 'DE': u'\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bcd', 'YE': u'\u0baf\u0bc7\u0bae\u0ba9\u0bcd', 'DZ': u'\u0b85\u0bb2\u0bcd\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe', 'US': u'\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1', 'UY': u'\u0b89\u0bb0\u0bc1\u0b95\u0bc1\u0bb5\u0bc7', 'LB': u'\u0bb2\u0bc6\u0baa\u0ba9\u0bbe\u0ba9\u0bcd', 'LA': u'\u0bb2\u0bbe\u0bb5\u0bcb\u0bb8\u0bcd', 'TV': u'\u0ba4\u0bc1\u0bb5\u0bbe\u0bb2\u0bc2', 'TW': u'\u0ba4\u0bc8\u0bb5\u0bbe\u0ba9\u0bcd', 'TT': u'\u0ba4\u0bbf\u0bb0\u0bbf\u0ba9\u0bbf\u0b9f\u0bbe\u0b9f\u0bcd \u0ba4\u0bca\u0baa\u0bbe\u0b95\u0bcb', 'TR': u'\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bbf', 'LK': u'\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8', 'LI': u'\u0bb2\u0bbf\u0b9a\u0bcd\u0b9f\u0bc6\u0ba3\u0bcd\u0bb8\u0bcd\u0b9f\u0bc0\u0ba9\u0bcd', 'LV': u'\u0bb2\u0bbe\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0bbe', 'TO': u'\u0ba4\u0bca\u0b99\u0bcd\u0b95\u0bbe', 'LT': u'\u0bb2\u0bbf\u0ba4\u0bc1\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'LU': u'\u0bb2\u0b95\u0bcd\u0bb8\u0bcd\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd\u0b95\u0bcd', 'LR': u'\u0bb2\u0bc8\u0baa\u0bc0\u0bb0\u0bbf\u0baf\u0bbe', 'LS': u'\u0bb2\u0bc6\u0b9a\u0bcb\u0ba4\u0bcb', 'TH': u'\u0ba4\u0bbe\u0baf\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'TD': u'\u0b9a\u0bbe\u0b9f\u0bcd', 'LY': u'\u0bb2\u0bbf\u0baa\u0bcd\u0baf\u0bbe', 'VA': u'\u0bb5\u0bbe\u0b9f\u0bbf\u0b95\u0ba9\u0bcd', 'AE': u'\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bb0\u0baa\u0bc1 \u0b95\u0bc2\u0b9f\u0bcd\u0b9f\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf', 'AD': u'\u0b85\u0ba9\u0bcd\u0b9f\u0bcb\u0bb0\u0bbe', 'AG': u'\u0b86\u0ba9\u0bcd\u0b9f\u0bbf\u0b95\u0bc1\u0bb5\u0bbe \u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bc1\u0b9f\u0bbe', 'AF': u'\u0b86\u0baa\u0bcd\u0b95\u0bbe\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd', 'IQ': u'\u0b87\u0bb0\u0bbe\u0b95\u0bcd', 'IS': u'\u0b90\u0bb8\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'IR': u'\u0b88\u0bb0\u0bbe\u0ba9\u0bcd', 'AM': u'\u0b86\u0bb0\u0bcd\u0bae\u0bc0\u0ba9\u0bbf\u0baf\u0bbe', 'AL': u'\u0b85\u0bb2\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0baf\u0bbe', 'AO': u'\u0b85\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbe', 'AR': u'\u0b85\u0bb0\u0bcd\u0b9c\u0bc6\u0ba3\u0bcd\u0b9f\u0bbf\u0ba9\u0bbe', 'AU': u'\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe', 'AT': u'\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bbf\u0baf\u0bbe', 'IN': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe', 'AZ': u'\u0b85\u0b9c\u0bb0\u0bcd\u0baa\u0bc8\u0b9c\u0bbe\u0ba9\u0bcd', 'IE': u'\u0b85\u0baf\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1', 'ID': u'\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0bbe', 'UA': u'\u0b89\u0b95\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd', 'QA': u'\u0b95\u0bbe\u0b9f\u0bbe\u0bb0\u0bcd'} months=[u'\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf', u'\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf', u'\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd', u'\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd', u'\u0bae\u0bc7', u'\u0b9c\u0bc2\u0ba9\u0bcd', u'\u0b9c\u0bc2\u0bb2\u0bc8', u'\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd', u'\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd', u'\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd', u'\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd', u'\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd'] abbrMonths=[u'\u0b9c\u0ba9.', u'\u0baa\u0bbf\u0baa\u0bcd.', u'\u0bae\u0bbe\u0bb0\u0bcd.', u'\u0b8f\u0baa\u0bcd.', u'\u0bae\u0bc7', u'\u0b9c\u0bc2\u0ba9\u0bcd', u'\u0b9c\u0bc2\u0bb2\u0bc8', u'\u0b86\u0b95.', u'\u0b9a\u0bc6\u0baa\u0bcd.', u'\u0b85\u0b95\u0bcd.', u'\u0ba8\u0bb5.', u'\u0b9f\u0bbf\u0b9a.'] days=[u'\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd', u'\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd', u'\u0baa\u0bc1\u0ba4\u0ba9\u0bcd', u'\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd', u'\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf', u'\u0b9a\u0ba9\u0bbf', u'\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1'] abbrDays=[u'\u0ba4\u0bbf', u'\u0b9a\u0bc6', u'\u0baa\u0bc1', u'\u0bb5\u0bbf', u'\u0bb5\u0bc6', u'\u0b9a', u'\u0b9e\u0bbe'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6b==turbogears/i18n/data/ta_IN.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djd'<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d-<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_ஐக்கிய அரபு கூட்டாட்சிsADuஅன்டோராsAGu4ஆன்டிகுவா பார்புடாsAFu'ஆப்கானிஸ்தான்sIQuஇராக்sISuஐஸ்லாந்துsIRuஈரான்sAMuஆர்மீனியாsALuஅல்பேனியாsAOuஅங்கோலாsARu!அர்ஜெண்டினாsAUu!ஆஸ்திரேலியாsATuஆஸ்திரியாsINuஇந்தியாsAZuஅஜர்பைஜான்sIEuஅயர்லாந்துsIDu!இந்தோனேஷியாsUAuஉக்ரைன்sQAuகாடார்uஜனவரிuபிப்ரவரிuமார்ச்uஏப்ரல்uமேu ஜூன்u ஜூலைuஆகஸ்ட்uசெப்டம்பர்uஅக்டோபர்uநவம்பர்uடிசம்பர்uஜன.u பிப்.u மார்.u ஏப்.uஆக.u செப்.u அக்.uநவ.u டிச.uதிங்கள்uசெவ்வாய்uபுதன்uவியாழன்uவெள்ளிu சனிuஞாயிறுuதிuசெuபுuவிuவெuசuஞாsmediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigits0s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\ta_IN.pys?s ***PKP6Kqqturbogears/i18n/data/te.py# Formatting configuration for locale te languages={'te': u'\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41'} countries={'IN': u'\u0c2d\u0c3e\u0c30\u0c24 \u0c26\u0c47\u0c33\u0c66'} months=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] abbrMonths=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] days=[u'\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02', u'\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02', u'\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02', u'\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02', u'\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02'] abbrDays=[u'\u0c38\u0c4b\u0c2e', u'\u0c2e\u0c02\u0c17\u0c33', u'\u0c2c\u0c41\u0c27', u'\u0c17\u0c41\u0c30\u0c41', u'\u0c36\u0c41\u0c15\u0c4d\u0c30', u'\u0c36\u0c28\u0c3f', u'\u0c06\u0c26\u0c3f'] dateFormats={'medium': '%Y %%(abbrmonthname)s %d ', 'full': '%%(dayname)s, %Y %%(monthname)s %d ', 'long': '%Y %%(monthname)s %d ', 'short': '%y/%m/%d'} numericSymbols={'group': ',', 'nativeZeroDigit': u'\u0c66', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6Āturbogears/i18n/data/te.pyc; BEc @sHhddS(?steuతెలుగుsINuభారత దేళ౦uజనవరిuఫిబ్రవరిuమార్చిuఏప్రిల్uమేu జూన్u జూలైuఆగస్టుuసెప్టెంబర్uఅక్టోబర్uనవంబర్uడిసెంబర్uసోమవారంuమంగళవారంuబుధవారంuగురువారంuశుక్రవారంuశనివారంuఆదివారంu సోమu మంగళu బుధu గురుuశుక్రu శనిu ఆదిsmediums%Y %%(abbrmonthname)s %d sfulls#%%(dayname)s, %Y %%(monthname)s %d slongs%Y %%(monthname)s %d sshorts%y/%m/%dsgroups,snativeZeroDigitu౦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s0build\bdist.win32\egg\turbogears\i18n\data\te.pys?s***PKP6Y̥``turbogears/i18n/data/te_IN.py# Formatting configuration for locale te_IN languages={'te': u'\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41'} countries={'IN': u'\u0c2d\u0c3e\u0c30\u0c24 \u0c26\u0c47\u0c33\u0c66'} months=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] abbrMonths=[u'\u0c1c\u0c28\u0c35\u0c30\u0c3f', u'\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f', u'\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f', u'\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d', u'\u0c2e\u0c47', u'\u0c1c\u0c42\u0c28\u0c4d', u'\u0c1c\u0c42\u0c32\u0c48', u'\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41', u'\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d', u'\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d', u'\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d', u'\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d'] days=[u'\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02', u'\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02', u'\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02', u'\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02', u'\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02', u'\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02'] abbrDays=[u'\u0c38\u0c4b\u0c2e', u'\u0c2e\u0c02\u0c17\u0c33', u'\u0c2c\u0c41\u0c27', u'\u0c17\u0c41\u0c30\u0c41', u'\u0c36\u0c41\u0c15\u0c4d\u0c30', u'\u0c36\u0c28\u0c3f', u'\u0c06\u0c26\u0c3f'] dateFormats={'medium': '%d-%m-%Y', 'full': '%%(dayname)s %d %%(monthname)s %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d-%m-%y'} numericSymbols={'group': ',', 'nativeZeroDigit': u'\u0c66', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg6c౱turbogears/i18n/data/te_IN.pyc; BEc @sHhddS(?steuతెలుగుsINuభారత దేళ౦uజనవరిuఫిబ్రవరిuమార్చిuఏప్రిల్uమేu జూన్u జూలైuఆగస్టుuసెప్టెంబర్uఅక్టోబర్uనవంబర్uడిసెంబర్uసోమవారంuమంగళవారంuబుధవారంuగురువారంuశుక్రవారంuశనివారంuఆదివారంu సోమu మంగళu బుధu గురుuశుక్రu శనిu ఆదిsmediums%d-%m-%Ysfulls!%%(dayname)s %d %%(monthname)s %Yslongs%d %%(monthname)s %Ysshorts%d-%m-%ysgroups,snativeZeroDigitu౦s exponentialsEsperMilleu‰snanu�sdecimals.s percentSigns%slists;s patternDigits#splusSigns+sinfinityu∞s minusSigns-N(s languagess countriessmonthss abbrMonthssdayssabbrDayss dateFormatssnumericSymbols(sabbrDayssnumericSymbolss countriessmonthssdayss abbrMonthss languagess dateFormats((s3build\bdist.win32\egg\turbogears\i18n\data\te_IN.pys?s***PKP6Μ&UUturbogears/i18n/data/th.py# Formatting configuration for locale th languages={'gu': u'\u0e01\u0e39\u0e08\u0e32\u0e23\u0e32\u0e15\u0e34', 'gd': u'\u0e2a\u0e01\u0e47\u0e2d\u0e15\u0e2a\u0e4c\u0e40\u0e01\u0e25\u0e34\u0e04', 'ga': u'\u0e44\u0e2d\u0e23\u0e34\u0e0a', 'gn': u'\u0e01\u0e31\u0e27\u0e23\u0e32\u0e19\u0e35', 'gl': u'\u0e01\u0e30\u0e25\u0e35\u0e40\u0e0a\u0e35\u0e22', 'la': u'\u0e25\u0e30\u0e15\u0e34\u0e19', 'ln': u'\u0e25\u0e34\u0e07\u0e01\u0e32\u0e25\u0e32', 'lo': u'\u0e25\u0e32\u0e27', 'tt': u'\u0e15\u0e32\u0e14', 'tr': u'\u0e15\u0e38\u0e23\u0e01\u0e35', 'ts': u'\u0e0b\u0e2d\u0e07\u0e01\u0e32', 'lv': u'\u0e41\u0e25\u0e15\u0e40\u0e27\u0e35\u0e22 (\u0e40\u0e25\u0e17\u0e17\u0e34\u0e2a\u0e0a\u0e4c)', 'to': u'\u0e17\u0e2d\u0e07\u0e01\u0e49\u0e32', 'lt': u'\u0e25\u0e34\u0e18\u0e31\u0e27\u0e40\u0e19\u0e35\u0e22', 'tk': u'\u0e40\u0e15\u0e34\u0e23\u0e4c\u0e01\u0e40\u0e21\u0e19', 'th': u'\u0e44\u0e17\u0e22', 'ti': u'\u0e17\u0e34\u0e01\u0e23\u0e34\u0e19\u0e22\u0e32', 'tg': u'\u0e17\u0e32\u0e08\u0e34\u0e04', 'te': u'\u0e17\u0e34\u0e25\u0e39\u0e01\u0e39', 'ta': u'\u0e17\u0e21\u0e34\u0e2c', 'yi': u'\u0e22\u0e35\u0e14\u0e34\u0e0a', 'yo': u'\u0e42\u0e22\u0e23\u0e39\u0e1a\u0e32', 'de': u'\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e31\u0e19', 'da': u'\u0e40\u0e14\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e01', 'dz': u'\u0e20\u0e39\u0e10\u0e32\u0e19\u0e35', 'st': u'\u0e40\u0e0b\u0e42\u0e2a\u0e42\u0e17', 'qu': u'\u0e04\u0e34\u0e27\u0e0a\u0e31\u0e27', 'el': u'\u0e01\u0e23\u0e35\u0e01', 'eo': u'\u0e40\u0e2d\u0e2a\u0e40\u0e1b\u0e2d\u0e23\u0e31\u0e19\u0e42\u0e15', 'en': u'\u0e2d\u0e31\u0e07\u0e01\u0e24\u0e29', 'zh': u'\u0e08\u0e35\u0e19', 'za': u'\u0e08\u0e27\u0e07', 'uk': u'\u0e22\u0e39\u0e40\u0e04\u0e23\u0e19', 'eu': u'\u0e41\u0e1a\u0e2a\u0e01\u0e4c', 'et': u'\u0e40\u0e2d\u0e2a\u0e42\u0e15\u0e40\u0e19\u0e35\u0e22', 'es': u'\u0e2a\u0e40\u0e1b\u0e19', 'ru': u'\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22', 'rw': u'\u0e04\u0e34\u0e19\u0e22\u0e32\u0e27\u0e31\u0e19\u0e14\u0e32', 'rm': u'\u0e40\u0e23\u0e42\u0e15-\u0e42\u0e23\u0e41\u0e21\u0e19\u0e0b\u0e4c', 'rn': u'\u0e04\u0e34\u0e23\u0e31\u0e19\u0e14\u0e35', 'ro': u'\u0e42\u0e23\u0e21\u0e31\u0e19', 'bn': u'\u0e40\u0e1a\u0e19\u0e01\u0e32\u0e23\u0e35', 'be': u'\u0e1a\u0e32\u0e22\u0e42\u0e25\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22', 'bg': u'\u0e1a\u0e31\u0e25\u0e41\u0e01\u0e40\u0e23\u0e35\u0e22', 'ba': u'\u0e1a\u0e32\u0e2a\u0e0a\u0e4c\u0e01\u0e35\u0e23\u0e4c', 'wo': u'\u0e27\u0e39\u0e25\u0e2d\u0e1f', 'jv': u'\u0e0a\u0e27\u0e32', 'bo': u'\u0e17\u0e34\u0e40\u0e1a\u0e15', 'bh': u'\u0e1a\u0e34\u0e2e\u0e32\u0e23\u0e35', 'bi': u'\u0e1a\u0e34\u0e2a\u0e25\u0e32\u0e21\u0e32', 'br': u'\u0e1a\u0e23\u0e35\u0e17\u0e31\u0e19', 'ja': u'\u0e0d\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e19', 'om': u'\u0e42\u0e2d\u0e42\u0e23\u0e42\u0e21 (\u0e2d\u0e32\u0e1f\u0e32\u0e19)', 'oc': u'\u0e2d\u0e2d\u0e01\u0e0b\u0e34\u0e17\u0e31\u0e19', 'tw': u'\u0e17\u0e27\u0e35', 'or': u'\u0e42\u0e2d\u0e23\u0e34\u0e22\u0e32', 'xh': u'\u0e42\u0e0b\u0e2a\u0e32', 'co': u'\u0e04\u0e2d\u0e23\u0e4c\u0e0b\u0e34\u0e01\u0e32', 'ca': u'\u0e41\u0e04\u0e15\u0e32\u0e41\u0e25\u0e19', 'cy': u'\u0e40\u0e27\u0e25\u0e2a\u0e4c', 'cs': u'\u0e40\u0e0a\u0e47\u0e04', 'ps': u'\u0e1e\u0e32\u0e2a\u0e0a\u0e4c\u0e42\u0e15 (\u0e1e\u0e38\u0e2a\u0e0a\u0e4c\u0e42\u0e15)', 'pt': u'\u0e42\u0e1b\u0e23\u0e15\u0e38\u0e40\u0e01\u0e2a', 'tl': u'\u0e15\u0e32\u0e01\u0e32\u0e25\u0e47\u0e2d\u0e01', 'pa': u'\u0e1b\u0e31\u0e0d\u0e08\u0e32\u0e1b', 'vi': u'\u0e40\u0e27\u0e35\u0e22\u0e14\u0e19\u0e32\u0e21', 'pl': u'\u0e42\u0e1b\u0e41\u0e25\u0e19\u0e14\u0e4c', 'hy': u'\u0e2d\u0e32\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e19\u0e35\u0e22', 'hr': u'\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e17\u0e35\u0e22', 'iu': u'\u0e44\u0e2d\u0e19\u0e38\u0e01\u0e15\u0e34\u0e15\u0e31\u0e17', 'hu': u'\u0e2e\u0e31\u0e07\u0e01\u0e32\u0e23\u0e35', 'hi': u'\u0e2e\u0e35\u0e19\u0e14\u0e34', 'ha': u'\u0e42\u0e2e\u0e0b\u0e32', 'he': u'\u0e22\u0e34\u0e27', 'mg': u'\u0e21\u0e32\u0e25\u0e32\u0e01\u0e32\u0e0b\u0e35', 'uz': u'\u0e2d\u0e38\u0e2a\u0e40\u0e1a\u0e04', 'ml': u'\u0e41\u0e21\u0e25\u0e30\u0e22\u0e32\u0e25\u0e31\u0e21', 'mo': u'\u0e42\u0e21\u0e14\u0e32\u0e40\u0e27\u0e35\u0e22', 'mn': u'\u0e21\u0e2d\u0e07\u0e42\u0e01\u0e25', 'mi': u'\u0e40\u0e21\u0e32\u0e23\u0e35', 'ik': u'\u0e44\u0e2d\u0e19\u0e39\u0e40\u0e1b\u0e35\u0e22\u0e01', 'mk': u'\u0e41\u0e21\u0e0b\u0e35\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22', 'ur': u'\u0e2d\u0e34\u0e23\u0e14\u0e39', 'mt': u'\u0e21\u0e2d\u0e25\u0e15\u0e32', 'ms': u'\u0e21\u0e25\u0e32\u0e22\u0e39', 'mr': u'\u0e21\u0e32\u0e23\u0e32\u0e17\u0e35', 'ug': u'\u0e2d\u0e38\u0e22\u0e01\u0e31\u0e27', 'my': u'\u0e1e\u0e21\u0e48\u0e32', 'aa': u'\u0e2d\u0e32\u0e1f\u0e32', 'ab': u'\u0e41\u0e2d\u0e1a\u0e01\u0e32\u0e40\u0e0b\u0e35\u0e22', 'ss': u'\u0e0b\u0e35\u0e2a\u0e27\u0e32\u0e15\u0e34', 'af': u'\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e31\u0e19', 'tn': u'\u0e40\u0e0b\u0e15\u0e2a\u0e27\u0e32\u0e19\u0e32', 'sw': u'\u0e0b\u0e27\u0e32\u0e2e\u0e34\u0e23\u0e35', 'is': u'\u0e44\u0e2d\u0e0b\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e14\u0e34\u0e04', 'am': u'\u0e2d\u0e31\u0e21\u0e2e\u0e32\u0e23\u0e34\u0e04', 'it': u'\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35', 'sv': u'\u0e2a\u0e27\u0e35\u0e40\u0e14\u0e19', 'ia': u'\u0e2d\u0e34\u0e19\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e25\u0e34\u0e07\u0e01\u0e27\u0e32', 'as': u'\u0e2d\u0e31\u0e2a\u0e2a\u0e31\u0e21\u0e21\u0e34\u0e2a', 'ar': u'\u0e2d\u0e32\u0e23\u0e30\u0e1a\u0e34\u0e04', 'su': u'\u0e0b\u0e31\u0e19\u0e14\u0e32\u0e19\u0e35\u0e2a', 'zu': u'\u0e0b\u0e39\u0e25\u0e39', 'ay': u'\u0e44\u0e2d\u0e21\u0e32\u0e23\u0e32', 'az': u'\u0e2d\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e1a\u0e08\u0e32\u0e19\u0e35', 'ie': u'\u0e2d\u0e34\u0e19\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e25\u0e34\u0e07\u0e04\u0e4c', 'id': u'\u0e2d\u0e34\u0e19\u0e42\u0e14\u0e19\u0e35\u0e40\u0e0a\u0e35\u0e22', 'sk': u'\u0e2a\u0e42\u0e25\u0e27\u0e31\u0e04', 'nl': u'\u0e2e\u0e2d\u0e25\u0e31\u0e19\u0e14\u0e32', 'no': u'\u0e19\u0e2d\u0e23\u0e4c\u0e40\u0e27\u0e22\u0e4c', 'na': u'\u0e19\u0e2d\u0e23\u0e39', 'ne': u'\u0e40\u0e19\u0e1b\u0e32\u0e25', 'vo': u'\u0e42\u0e27\u0e25\u0e32\u0e1e\u0e38\u0e01', 'fr': u'\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a', 'sm': u'\u0e0b\u0e32\u0e21\u0e31\u0e27', 'fy': u'\u0e1f\u0e23\u0e35\u0e2a\u0e41\u0e25\u0e19\u0e14\u0e4c', 'fa': u'\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e35\u0e22', 'fi': u'\u0e1f\u0e34\u0e19', 'fj': u'\u0e1f\u0e34\u0e08\u0e34', 'sa': u'\u0e2a\u0e31\u0e19\u0e2a\u0e01\u0e24\u0e15', 'fo': u'\u0e1f\u0e32\u0e42\u0e23\u0e2a', 'ka': u'\u0e08\u0e2d\u0e23\u0e4c\u0e40\u0e08\u0e35\u0e22\u0e19', 'kk': u'\u0e04\u0e32\u0e0b\u0e31\u0e04', 'sr': u'\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e40\u0e1a\u0e35\u0e22', 'sq': u'\u0e41\u0e2d\u0e25\u0e40\u0e1a\u0e40\u0e19\u0e35\u0e22', 'ko': u'\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35', 'kn': u'\u0e01\u0e32\u0e19\u0e32\u0e14\u0e32', 'km': u'\u0e40\u0e02\u0e21\u0e23', 'kl': u'\u0e01\u0e23\u0e35\u0e19\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e14\u0e34\u0e04', 'ks': u'\u0e04\u0e31\u0e0a\u0e21\u0e35\u0e23\u0e35', 'si': u'\u0e2a\u0e34\u0e07\u0e2b\u0e25', 'sh': u'\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e42\u0e1a-\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e17\u0e35\u0e22\u0e19', 'so': u'\u0e42\u0e0b\u0e21\u0e32\u0e25\u0e35', 'sn': u'\u0e42\u0e0b\u0e19\u0e32', 'ku': u'\u0e40\u0e04\u0e34\u0e14', 'sl': u'\u0e2a\u0e42\u0e25\u0e40\u0e27\u0e40\u0e19\u0e35\u0e22', 'ky': u'\u0e40\u0e04\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e0b', 'sg': u'\u0e2a\u0e31\u0e19\u0e42\u0e04', 'sd': u'\u0e0b\u0e34\u0e19\u0e14\u0e34'} countries={'BD': u'\u0e1a\u0e31\u0e07\u0e04\u0e25\u0e32\u0e40\u0e17\u0e28', 'BE': u'\u0e40\u0e1a\u0e25\u0e40\u0e22\u0e35\u0e48\u0e22\u0e21', 'BF': u'\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e19\u0e32\u0e1f\u0e32\u0e42\u0e0b', 'BG': u'\u0e1a\u0e31\u0e25\u0e41\u0e01\u0e40\u0e23\u0e35\u0e22', 'BA': u'\u0e1a\u0e2d\u0e2a\u0e40\u0e19\u0e35\u0e22 \u0e41\u0e25\u0e30 \u0e40\u0e2e\u0e34\u0e23\u0e4c\u0e0b\u0e42\u0e01\u0e27\u0e34\u0e40\u0e19\u0e35\u0e22', 'BB': u'\u0e1a\u0e32\u0e23\u0e4c\u0e1a\u0e32\u0e14\u0e2d\u0e2a', 'BM': u'\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e27\u0e14\u0e49\u0e32', 'BN': u'\u0e1a\u0e23\u0e39\u0e44\u0e19', 'BO': u'\u0e42\u0e1a\u0e25\u0e34\u0e40\u0e27\u0e35\u0e22', 'BH': u'\u0e1a\u0e32\u0e2b\u0e4c\u0e40\u0e23\u0e19', 'BI': u'\u0e1a\u0e39\u0e23\u0e31\u0e19\u0e14\u0e34', 'BJ': u'\u0e40\u0e1a\u0e19\u0e34\u0e19', 'BT': u'\u0e20\u0e39\u0e10\u0e32\u0e19', 'JM': u'\u0e08\u0e32\u0e44\u0e21\u0e01\u0e49\u0e32', 'BW': u'\u0e1a\u0e2d\u0e15\u0e2a\u0e27\u0e32\u0e19\u0e32', 'BR': u'\u0e1a\u0e23\u0e32\u0e0b\u0e34\u0e25', 'BS': u'\u0e1a\u0e32\u0e2e\u0e32\u0e21\u0e32\u0e2a', 'BY': u'\u0e40\u0e1a\u0e25\u0e25\u0e32\u0e23\u0e31\u0e2a', 'BZ': u'\u0e40\u0e1a\u0e25\u0e34\u0e0b', 'RU': u'\u0e23\u0e31\u0e2a\u0e40\u0e0b\u0e35\u0e22', 'RW': u'\u0e23\u0e32\u0e27\u0e31\u0e25\u0e14\u0e32', 'TL': u'\u0e15\u0e34\u0e21\u0e2d\u0e23\u0e4c\u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01', 'TM': u'\u0e40\u0e15\u0e34\u0e23\u0e4c\u0e01\u0e40\u0e21\u0e19\u0e34\u0e2a\u0e16\u0e32\u0e19', 'TJ': u'\u0e17\u0e32\u0e08\u0e34\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19', 'RO': u'\u0e23\u0e39\u0e40\u0e21\u0e40\u0e19\u0e35\u0e22', 'TK': u'\u0e42\u0e17\u0e01\u0e34\u0e42\u0e25', 'GW': u'\u0e01\u0e34\u0e27\u0e19\u0e35-\u0e1a\u0e34\u0e2a\u0e42\u0e0b', 'GT': u'\u0e01\u0e31\u0e27\u0e40\u0e15\u0e21\u0e32\u0e25\u0e32', 'GR': u'\u0e01\u0e23\u0e35\u0e0b', 'GQ': u'\u0e40\u0e2d\u0e04\u0e27\u0e32\u0e42\u0e17\u0e40\u0e23\u0e35\u0e22\u0e25\u0e01\u0e34\u0e19\u0e35', 'GP': u'\u0e01\u0e31\u0e27\u0e40\u0e14\u0e2d\u0e25\u0e39\u0e1b', 'JP': u'\u0e0d\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e19', 'GY': u'\u0e01\u0e39\u0e22\u0e32\u0e19\u0e48\u0e32', 'GF': u'\u0e40\u0e1f\u0e23\u0e47\u0e19\u0e0a\u0e01\u0e34\u0e27\u0e19\u0e48\u0e32', 'GE': u'\u0e08\u0e2d\u0e23\u0e4c\u0e40\u0e08\u0e35\u0e22', 'GB': u'\u0e2a\u0e2b\u0e23\u0e32\u0e0a\u0e2d\u0e32\u0e13\u0e32\u0e08\u0e31\u0e01\u0e23', 'GA': u'\u0e01\u0e32\u0e1a\u0e2d\u0e19', 'GN': u'\u0e01\u0e34\u0e27\u0e19\u0e35', 'GM': u'\u0e41\u0e01\u0e21\u0e40\u0e1a\u0e35\u0e22', 'GH': u'\u0e01\u0e32\u0e19\u0e48\u0e32', 'OM': u'\u0e42\u0e2d\u0e21\u0e32\u0e19', 'TN': u'\u0e15\u0e39\u0e19\u0e34\u0e40\u0e0b\u0e35\u0e22', 'JO': u'\u0e08\u0e2d\u0e23\u0e4c\u0e41\u0e14\u0e19', 'SP': u'\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e40\u0e1a\u0e35\u0e22', 'HR': u'\u0e42\u0e04\u0e23\u0e40\u0e2d\u0e40\u0e0a\u0e35\u0e22', 'HT': u'\u0e44\u0e2e\u0e15\u0e35', 'HU': u'\u0e2e\u0e31\u0e07\u0e01\u0e32\u0e23\u0e35', 'HK': u'\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07', 'HN': u'\u0e2e\u0e2d\u0e19\u0e14\u0e39\u0e23\u0e31\u0e2a', 'VE': u'\u0e40\u0e27\u0e40\u0e19\u0e0b\u0e39\u0e40\u0e2d\u0e25\u0e48\u0e32', 'PR': u'\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e42\u0e15\u0e23\u0e34\u0e42\u0e01', 'PT': u'\u0e42\u0e1b\u0e15\u0e38\u0e01\u0e31\u0e25', 'PY': u'\u0e1b\u0e32\u0e23\u0e32\u0e01\u0e27\u0e31\u0e22', 'IQ': u'\u0e2d\u0e34\u0e23\u0e31\u0e01', 'PA': u'\u0e1b\u0e32\u0e19\u0e32\u0e21\u0e32', 'PF': u'\u0e40\u0e1f\u0e23\u0e47\u0e19\u0e0a\u0e42\u0e1e\u0e25\u0e34\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22', 'PG': u'\u0e1b\u0e32\u0e1b\u0e31\u0e27\u0e19\u0e34\u0e27\u0e01\u0e35\u0e19\u0e35', 'PE': u'\u0e40\u0e1b\u0e23\u0e39', 'PK': u'\u0e1b\u0e32\u0e01\u0e35\u0e2a\u0e16\u0e32\u0e19', 'PH': u'\u0e1f\u0e34\u0e25\u0e34\u0e1b\u0e1b\u0e34\u0e19\u0e2a\u0e4c', 'PL': u'\u0e42\u0e1b\u0e41\u0e25\u0e19\u0e14\u0e4c', 'ZM': u'\u0e41\u0e0b\u0e21\u0e40\u0e1a\u0e35\u0e22', 'EH': u'\u0e0b\u0e32\u0e2e\u0e32\u0e23\u0e48\u0e32\u0e15\u0e30\u0e27\u0e31\u0e19\u0e15\u0e01', 'EE': u'\u0e40\u0e2d\u0e2a\u0e42\u0e15\u0e40\u0e19\u0e35\u0e22', 'EG': u'\u0e2d\u0e35\u0e22\u0e34\u0e1b\u0e15\u0e4c', 'ZA': u'\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e43\u0e15\u0e49', 'EC': u'\u0e40\u0e2d\u0e01\u0e27\u0e32\u0e14\u0e2d\u0e23\u0e4c', 'IT': u'\u0e2d\u0e34\u0e15\u0e32\u0e25\u0e35', 'VN': u'\u0e40\u0e27\u0e35\u0e22\u0e14\u0e19\u0e32\u0e21', 'ET': u'\u0e40\u0e2d\u0e18\u0e34\u0e42\u0e2d\u0e40\u0e1b\u0e35\u0e22', 'SO': u'\u0e42\u0e0b\u0e21\u0e32\u0e40\u0e25\u0e35\u0e22', 'ZW': u'\u0e0b\u0e34\u0e21\u0e1a\u0e32\u0e1a\u0e40\u0e27', 'ES': u'\u0e2a\u0e40\u0e1b\u0e19', 'ER': u'\u0e2d\u0e34\u0e23\u0e34\u0e17\u0e23\u0e35', 'MD': u'\u0e42\u0e21\u0e25\u0e42\u0e14\u0e27\u0e32', 'MG': u'\u0e21\u0e32\u0e14\u0e32\u0e01\u0e32\u0e2a\u0e01\u0e49\u0e32', 'MA': u'\u0e42\u0e21\u0e23\u0e2d\u0e04\u0e42\u0e04', 'MC': u'\u0e42\u0e21\u0e19\u0e32\u0e42\u0e04', 'UZ': u'\u0e2d\u0e38\u0e0b\u0e40\u0e1a\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19', 'MM': u'\u0e2a\u0e2b\u0e20\u0e32\u0e1e\u0e1e\u0e21\u0e48\u0e32', 'ML': u'\u0e21\u0e32\u0e25\u0e35', 'MO': u'\u0e21\u0e32\u0e40\u0e01\u0e4a\u0e32', 'MN': u'\u0e21\u0e2d\u0e07\u0e42\u0e01\u0e40\u0e25\u0e35\u0e22', 'MK': u'\u0e41\u0e21\u0e0b\u0e35\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22', 'MU': u'\u0e21\u0e2d\u0e23\u0e34\u0e40\u0e15\u0e35\u0e22\u0e2a', 'MT': u'\u0e21\u0e31\u0e25\u0e15\u0e49\u0e32', 'MQ': u'\u0e21\u0e32\u0e23\u0e4c\u0e15\u0e34\u0e19\u0e34\u0e01', 'MS': u'\u0e21\u0e2d\u0e19\u0e15\u0e4c\u0e40\u0e0b\u0e2d\u0e23\u0e32\u0e15', 'MR': u'\u0e21\u0e2d\u0e23\u0e34\u0e17\u0e32\u0e40\u0e19\u0e35\u0e22', 'UG': u'\u0e2d\u0e39\u0e01\u0e32\u0e19\u0e14\u0e32', 'MY': u'\u0e21\u0e32\u0e40\u0e25\u0e40\u0e0b\u0e35\u0e22', 'MX': u'\u0e41\u0e21\u0e47\u0e01\u0e0b\u0e34\u0e42\u0e01', 'IL': u'\u0e2d\u0e34\u0e2a\u0e23\u0e32\u0e40\u0e2d\u0e25', 'FR': u'\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a', 'FI': u'\u0e1f\u0e34\u0e19\u0e41\u0e25\u0e19\u0e14\u0e4c', 'FJ': u'\u0e1f\u0e34\u0e08\u0e34', 'FM': u'\u0e44\u0e21\u0e42\u0e04\u0e23\u0e19\u0e34\u0e40\u0e0b\u0e35\u0e22', 'NI': u'\u0e19\u0e34\u0e04\u0e32\u0e23\u0e32\u0e01\u0e31\u0e27', 'NL': u'\u0e40\u0e19\u0e40\u0e18\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'NO': u'\u0e19\u0e2d\u0e23\u0e4c\u0e40\u0e27\u0e22\u0e4c', 'NA': u'\u0e19\u0e32\u0e21\u0e34\u0e40\u0e1a\u0e35\u0e22', 'VU': u'\u0e27\u0e32\u0e19\u0e31\u0e27\u0e15\u0e39', 'NC': u'\u0e19\u0e34\u0e27\u0e04\u0e32\u0e25\u0e34\u0e42\u0e14\u0e40\u0e19\u0e35\u0e22', 'NE': u'\u0e44\u0e19\u0e40\u0e08\u0e2d\u0e23\u0e4c', 'NG': u'\u0e44\u0e19\u0e08\u0e35\u0e40\u0e23\u0e35\u0e22', 'NZ': u'\u0e19\u0e34\u0e27\u0e0b\u0e35\u0e41\u0e25\u0e19\u0e14\u0e4c', 'NP': u'\u0e40\u0e19\u0e1b\u0e32\u0e25', 'NU': u'\u0e19\u0e35\u0e22\u0e39', 'CI': u'\u0e1d\u0e31\u0e48\u0e07\u0e17\u0e30\u0e40\u0e25\u0e44\u0e2d\u0e27\u0e2d\u0e23\u0e34', 'CH': u'\u0e2a\u0e27\u0e34\u0e2a\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'CO': u'\u0e42\u0e04\u0e25\u0e31\u0e21\u0e40\u0e1a\u0e35\u0e22', 'CN': u'\u0e08\u0e35\u0e19', 'CM': u'\u0e04\u0e32\u0e40\u0e21\u0e23\u0e39\u0e19', 'CL': u'\u0e0a\u0e34\u0e25\u0e35', 'CA': u'\u0e41\u0e04\u0e19\u0e32\u0e14\u0e32', 'CG': u'\u0e04\u0e2d\u0e07\u0e42\u0e01', 'CF': u'\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e41\u0e2d\u0e1f\u0e23\u0e34\u0e01\u0e32\u0e01\u0e25\u0e32\u0e07', 'CZ': u'\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e40\u0e0a\u0e47\u0e04', 'CY': u'\u0e44\u0e0b\u0e1b\u0e23\u0e31\u0e2a', 'CR': u'\u0e04\u0e2d\u0e2a\u0e15\u0e32\u0e23\u0e34\u0e01\u0e49\u0e32', 'CV': u'\u0e40\u0e04\u0e1e\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e14', 'CU': u'\u0e04\u0e34\u0e27\u0e1a\u0e32', 'SZ': u'\u0e2a\u0e27\u0e32\u0e0b\u0e34\u0e41\u0e25\u0e19\u0e14\u0e4c', 'SY': u'\u0e0b\u0e35\u0e40\u0e23\u0e35\u0e22', 'KG': u'\u0e40\u0e04\u0e2d\u0e23\u0e4c\u0e01\u0e34\u0e2a\u0e16\u0e32\u0e19', 'KE': u'\u0e40\u0e04\u0e19\u0e22\u0e48\u0e32', 'SR': u'\u0e0b\u0e39\u0e23\u0e34\u0e19\u0e32\u0e21\u0e34', 'KI': u'\u0e04\u0e34\u0e23\u0e35\u0e1a\u0e32\u0e15\u0e34', 'KH': u'\u0e01\u0e31\u0e21\u0e1e\u0e39\u0e0a\u0e32', 'SV': u'\u0e40\u0e2d\u0e25\u0e0b\u0e32\u0e27\u0e32\u0e14\u0e2d\u0e23\u0e4c', 'KM': u'\u0e42\u0e04\u0e42\u0e21\u0e23\u0e2d\u0e2a', 'SK': u'\u0e2a\u0e42\u0e25\u0e27\u0e32\u0e40\u0e01\u0e35\u0e22', 'KR': u'\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35\u0e43\u0e15\u0e49', 'SI': u'\u0e2a\u0e42\u0e25\u0e27\u0e34\u0e40\u0e19\u0e35\u0e22', 'KP': u'\u0e40\u0e01\u0e32\u0e2b\u0e25\u0e35\u0e40\u0e2b\u0e19\u0e37\u0e2d', 'KW': u'\u0e04\u0e39\u0e40\u0e27\u0e15', 'SN': u'\u0e0b\u0e34\u0e19\u0e35\u0e01\u0e31\u0e25', 'SL': u'\u0e40\u0e0b\u0e35\u0e22\u0e23\u0e4c\u0e23\u0e48\u0e32\u0e25\u0e35\u0e2d\u0e2d\u0e19', 'SC': u'\u0e40\u0e0b\u0e22\u0e4c\u0e41\u0e0a\u0e25\u0e25\u0e4c', 'KZ': u'\u0e04\u0e32\u0e0b\u0e31\u0e04\u0e2a\u0e16\u0e32\u0e19', 'SA': u'\u0e0b\u0e32\u0e2d\u0e38\u0e14\u0e34\u0e2d\u0e32\u0e23\u0e30\u0e40\u0e1a\u0e35\u0e22', 'SG': u'\u0e2a\u0e34\u0e07\u0e04\u0e42\u0e1b\u0e23\u0e4c', 'SE': u'\u0e2a\u0e27\u0e35\u0e40\u0e14\u0e19', 'SD': u'\u0e0b\u0e39\u0e14\u0e32\u0e19', 'DO': u'\u0e2a\u0e32\u0e18\u0e32\u0e23\u0e13\u0e23\u0e31\u0e10\u0e42\u0e14\u0e21\u0e34\u0e19\u0e34\u0e01\u0e31\u0e19', 'DM': u'\u0e42\u0e14\u0e21\u0e34\u0e19\u0e34\u0e01\u0e49\u0e32', 'DJ': u'\u0e14\u0e34\u0e42\u0e1a\u0e15\u0e34', 'DK': u'\u0e40\u0e14\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e01', 'VG': u'\u0e1a\u0e23\u0e34\u0e17\u0e34\u0e0a\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e08\u0e34\u0e19\u0e44\u0e2d\u0e2a\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'DE': u'\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e19\u0e35', 'YE': u'\u0e40\u0e22\u0e40\u0e21\u0e19', 'DZ': u'\u0e41\u0e2d\u0e25\u0e08\u0e35\u0e40\u0e23\u0e35\u0e22', 'US': u'\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2d\u0e40\u0e21\u0e23\u0e34\u0e01\u0e32', 'UY': u'\u0e2d\u0e38\u0e23\u0e39\u0e01\u0e27\u0e31\u0e22', 'YU': u'\u0e22\u0e39\u0e42\u0e01\u0e2a\u0e25\u0e32\u0e40\u0e27\u0e35\u0e22', 'YT': u'\u0e21\u0e32\u0e22\u0e2d\u0e15', 'LB': u'\u0e40\u0e25\u0e1a\u0e32\u0e19\u0e2d\u0e19', 'LA': u'\u0e25\u0e32\u0e27', 'TW': u'\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19', 'TT': u'\u0e17\u0e23\u0e34\u0e19\u0e34\u0e41\u0e14\u0e14 \u0e41\u0e25\u0e30\u0e42\u0e17\u0e1a\u0e32\u0e42\u0e01', 'TR': u'\u0e15\u0e38\u0e23\u0e01\u0e35', 'LK': u'\u0e28\u0e23\u0e35\u0e25\u0e31\u0e07\u0e01\u0e32', 'LI': u'\u0e44\u0e25\u0e40\u0e17\u0e19\u0e2a\u0e44\u0e15\u0e19\u0e4c', 'LV': u'\u0e25\u0e32\u0e15\u0e40\u0e27\u0e35\u0e22', 'TO': u'\u0e17\u0e2d\u0e07\u0e01\u0e49\u0e32', 'LT': u'\u0e25\u0e34\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e35\u0e22', 'LU': u'\u0e25\u0e31\u0e01\u0e0b\u0e4c\u0e40\u0e0b\u0e21\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e01', 'LR': u'\u0e25\u0e34\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e40\u0e25\u0e35\u0e22', 'LS': u'\u0e40\u0e25\u0e42\u0e0b\u0e42\u0e17', 'TH': u'\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22', 'TF': u'\u0e2d\u0e32\u0e13\u0e32\u0e40\u0e02\u0e15\u0e17\u0e32\u0e07\u0e43\u0e15\u0e49\u0e02\u0e2d\u0e07\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a', 'TG': u'\u0e42\u0e15\u0e42\u0e01', 'TD': u'\u0e0a\u0e32\u0e14', 'LY': u'\u0e25\u0e34\u0e40\u0e1a\u0e35\u0e22', 'VA': u'\u0e27\u0e32\u0e15\u0e34\u0e01\u0e31\u0e19', 'AE': u'\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2d\u0e32\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e21\u0e34\u0e40\u0e23\u0e15\u0e2a\u0e4c', 'AD': u'\u0e2d\u0e31\u0e19\u0e14\u0e2d\u0e23\u0e4c\u0e23\u0e32', 'AF': u'\u0e2d\u0e31\u0e1f\u0e01\u0e32\u0e19\u0e34\u0e2a\u0e16\u0e32\u0e19', 'AI': u'\u0e2d\u0e31\u0e19\u0e01\u0e34\u0e25\u0e48\u0e32', 'VI': u'\u0e22\u0e39\u0e40\u0e2d\u0e2a\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e08\u0e34\u0e19\u0e44\u0e2d\u0e2a\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'IS': u'\u0e44\u0e2d\u0e0b\u0e41\u0e25\u0e19\u0e14\u0e4c', 'IR': u'\u0e2d\u0e34\u0e2b\u0e23\u0e48\u0e32\u0e19', 'AM': u'\u0e2d\u0e32\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e19\u0e35\u0e22', 'AL': u'\u0e41\u0e2d\u0e25\u0e40\u0e1a\u0e40\u0e19\u0e35\u0e22', 'AO': u'\u0e2d\u0e31\u0e19\u0e42\u0e01\u0e25\u0e32', 'AN': u'\u0e40\u0e19\u0e40\u0e18\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c\u0e41\u0e2d\u0e19\u0e17\u0e34\u0e25\u0e25\u0e4c', 'AR': u'\u0e2d\u0e32\u0e23\u0e4c\u0e40\u0e08\u0e19\u0e15\u0e34\u0e19\u0e48\u0e32', 'AU': u'\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e40\u0e25\u0e35\u0e22', 'AT': u'\u0e2d\u0e2d\u0e2a\u0e40\u0e15\u0e23\u0e35\u0e22', 'AW': u'\u0e2d\u0e32\u0e23\u0e39\u0e1a\u0e32', 'IN': u'\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22', 'TZ': u'\u0e17\u0e32\u0e19\u0e0b\u0e32\u0e40\u0e19\u0e35\u0e22', 'AZ': u'\u0e2d\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e1a\u0e08\u0e31\u0e19', 'IE': u'\u0e44\u0e2d\u0e23\u0e4c\u0e41\u0e25\u0e19\u0e14\u0e4c', 'ID': u'\u0e2d\u0e34\u0e19\u0e42\u0e14\u0e19\u0e35\u0e40\u0e0b\u0e35\u0e22', 'UA': u'\u0e22\u0e39\u0e40\u0e04\u0e23\u0e19', 'QA': u'\u0e01\u0e32\u0e15\u0e32\u0e23\u0e4c', 'MZ': u'\u0e42\u0e21\u0e41\u0e0b\u0e21\u0e1a\u0e34\u0e04'} months=[u'\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21', u'\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c', u'\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21', u'\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19', u'\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21', u'\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19', u'\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21', u'\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21', u'\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19', u'\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21', u'\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19', u'\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21'] abbrMonths=[u'\u0e21.\u0e04.', u'\u0e01.\u0e1e.', u'\u0e21\u0e35.\u0e04.', u'\u0e40\u0e21.\u0e22.', u'\u0e1e.\u0e04.', u'\u0e21\u0e34.\u0e22.', u'\u0e01.\u0e04.', u'\u0e2a.\u0e04.', u'\u0e01.\u0e22.', u'\u0e15.\u0e04.', u'\u0e1e.\u0e22.', u'\u0e18.\u0e04.'] days=[u'\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c', u'\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23', u'\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18', u'\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35', u'\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c', u'\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c', u'\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c'] abbrDays=[u'\u0e08.', u'\u0e2d.', u'\u0e1e.', u'\u0e1e\u0e24.', u'\u0e28.', u'\u0e2a.', u'\u0e2d\u0e32.'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': u'%%(dayname)s\u0e17\u0e35\u0e48 %d %%(monthname)s G %Y', 'long': '%d %%(monthname)s %Y', 'short': '%d/%m/%Y'} numericSymbols={'group': ',', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': '.', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKg64@4@turbogears/i18n/data/th.pyc; BEc @s hdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdg<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<did<djdk<dldm<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<ddE<dd<dd<dd<dd<dd<dd<dd<dd<ddG<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd=<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d<d#d$<d%d&<d'd(<d)d*<d+d/<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d<d?d@<dAdB<dCd<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmd<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<ddA<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdg<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<did<djdk<dldm<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<ddE<dd<dd<dd<dd<dd<dd<dd<dd<ddG<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd=<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d<d#d$<d%d&<d'd(<d)d*<d+d/<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d<d?d@<dAdB<dCd<dDdE<dFdG<dHdI<dJd<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmd<dnd<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<ddA<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dAd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd/<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<d?d@<dAdBd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDd:<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2006-10-03 10:24+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" "Generated-By: pygettext.py 1.5\n" #: validators.py:29 msgid "Invalid number format" msgstr "" #: validators.py:30 validators.py:80 msgid "Empty values not allowed" msgstr "" #: validators.py:79 msgid "Invalid datetime format" msgstr "" #: validators.py:125 msgid "Invalid data or incorrect encoding" msgstr "" #: validators.py:169 msgid "Please select at least a value" msgstr "" PKP6$Biiturbogears/i18n/data/uk.py# Formatting configuration for locale uk languages={'gu': u'\u0413\u0443\u044f\u0440\u0430\u0442\u0456', 'gd': u'\u0413\u0430\u0435\u043b\u044c\u0441\u044c\u043a\u0430', 'ga': u'\u0406\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430', 'gn': u'\u0413\u0443\u0430\u0440\u0430\u043d\u0456', 'gl': u'\u0413\u0430\u043b\u0456\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'la': u'\u041b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0430', 'ln': u'\u041b\u0456\u043d\u0433\u0430\u043b\u0430', 'lo': u'\u041b\u0430\u043e\u0441\u044c\u043a\u0430', 'tt': u'\u0422\u0430\u0442\u0430\u0440\u0441\u044c\u043a\u0430', 'tr': u'\u0422\u0443\u0440\u0435\u0446\u044c\u043a\u0430', 'ts': u'\u0422\u0441\u043e\u043d\u0433\u043e', 'lv': u'\u041b\u0430\u0442\u0432\u0456\u0439\u0441\u044c\u043a\u0430', 'to': u'\u0422\u043e\u043d\u0433\u0430', 'lt': u'\u041b\u0438\u0442\u043e\u0432\u0441\u044c\u043a\u0430', 'tk': u'\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0441\u044c\u043a\u0430', 'th': u'\u0422\u0430\u0439\u0441\u044c\u043a\u0430', 'ti': u'\u0422\u0438\u0433\u0440\u0456\u043d\u0456', 'tg': u'\u0422\u0430\u0434\u0436\u0438\u0446\u044c\u043a\u0430', 'te': u'\u0422\u0435\u043b\u0443\u0433\u0443', 'ta': u'\u0422\u0430\u043c\u0456\u043b\u044c\u0441\u044c\u043a\u0430', 'yi': u'\u0406\u0434\u0438\u0448', 'yo': u'\u0419\u043e\u0440\u0443\u0431\u0430', 'de': u'\u041d\u0456\u043c\u0435\u0446\u044c\u043a\u0430', 'da': u'\u0414\u0430\u0442\u0441\u044c\u043a\u0430', 'dz': u'\u0411\u0445\u0443\u0442\u0430\u043d\u0456', 'st': u'\u0421\u0435\u0441\u043e\u0442\u0445\u043e', 'qu': u'\u041a\u0435\u0447\u0443\u0430', 'el': u'\u0413\u0440\u0435\u0446\u044c\u043a\u0430', 'eo': u'\u0415\u0441\u043f\u0435\u0440\u0430\u043d\u0442\u043e', 'en': u'\u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0430', 'zh': u'\u041a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0430', 'za': u'\u0417\u0443\u0430\u043d\u0433', 'uk': u'\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430', 'eu': u'\u0411\u0430\u0441\u043a\u0432\u0430', 'et': u'\u0415\u0441\u0442\u043e\u043d\u0441\u044c\u043a\u0430', 'es': u'\u0406\u0441\u043f\u0430\u043d\u0441\u044c\u043a\u0430', 'ru': u'\u0420\u043e\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'rw': u'\u041a\u0456\u043d\u0430\u0440\u0443\u0430\u043d\u0434\u0430', 'rm': u'\u0420\u0435\u0442\u043e\u0440\u043e\u043c\u0430\u043d\u0441\u044c\u043a\u0430', 'rn': u'\u041a\u0456\u0440\u0443\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u0430', 'ro': u'\u0420\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0430', 'bn': u'\u0411\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'be': u'\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c\u043a\u0430', 'bg': u'\u0411\u043e\u043b\u0433\u0430\u0440\u0441\u044c\u043a\u0430', 'ba': u'\u0411\u0430\u0448\u043a\u0438\u0440\u0441\u044c\u043a\u0430', 'wo': u'\u0412\u043e\u043b\u043e\u0444', 'jv': u'\u042f\u0432\u0430\u043d\u0441\u044c\u043a\u0430', 'bo': u'\u0422\u0456\u0431\u0435\u0442\u0441\u044c\u043a\u0430', 'bh': u'\u0411\u0456\u0445\u0430\u0440\u0456\u0439\u0441\u044c\u043a\u0430', 'bi': u'\u0411\u0456\u0441\u043b\u0430\u043c\u0456\u0439\u0441\u044c\u043a\u0430', 'br': u'\u0411\u0440\u0435\u0442\u043e\u043d\u0441\u044c\u043a\u0430', 'ja': u'\u042f\u043f\u043e\u043d\u0441\u044c\u043a\u0430', 'om': u'\u041e\u0440\u043e\u043c\u043e', 'oc': u'\u041e\u043a\u0438\u0442\u0430\u043d', 'tw': u'\u0422\u0432\u0456', 'or': u'\u041e\u0440\u0456\u044f', 'xh': u'\u041a\u0445\u043e\u0441\u0430', 'co': u'\u041a\u043e\u0440\u0441\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430', 'ca': u'\u041a\u0430\u0442\u0430\u043b\u043e\u043d\u0441\u044c\u043a\u0430', 'cy': u'\u0412\u0430\u043b\u043b\u0456\u0439\u0441\u044c\u043a\u0430', 'cs': u'\u0427\u0435\u0441\u044c\u043a\u0430', 'ps': u'\u041f\u0430\u0448\u0442\u043e', 'pt': u'\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'tl': u'\u0422\u0430\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'pa': u'\u041f\u0430\u043d\u0434\u0436\u0430\u0431\u0456', 'vi': u"\u0412'\u0454\u0442\u043d\u0430\u043c\u0441\u044c\u043a\u0430", 'pl': u'\u041f\u043e\u043b\u044c\u0441\u044c\u043a\u0430', 'hy': u'\u0412\u0456\u0440\u043c\u0435\u043d\u0441\u044c\u043a\u0430', 'hr': u'\u0425\u043e\u0440\u0432\u0430\u0442\u0441\u044c\u043a\u0430', 'hu': u'\u0423\u0433\u043e\u0440\u0441\u044c\u043a\u0430', 'hi': u'\u0425\u0456\u043d\u0434\u0456', 'ha': u'\u0425\u0430\u0443\u0441\u0430', 'he': u'\u0406\u0432\u0440\u0438\u0442', 'mg': u'\u041c\u0430\u043b\u0430\u0433\u0430\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'uz': u'\u0423\u0437\u0431\u0435\u0446\u044c\u043a\u0430', 'ml': u'\u041c\u0430\u043b\u0430\u0439\u044f\u043b\u0430\u043c', 'mo': u'\u041c\u043e\u043b\u0434\u0430\u0432\u0441\u044c\u043a\u0430', 'mn': u'\u041c\u043e\u043d\u0433\u043e\u043b\u044c\u0441\u044c\u043a\u0430', 'mi': u'\u041c\u0430\u043e\u0440\u0456', 'ik': u'\u0406\u043d\u0443\u043f\u0456\u0430\u043a', 'mk': u'\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u044c\u043a\u0430', 'ur': u'\u0423\u0440\u0434\u0443', 'mt': u'\u041c\u0430\u043b\u044c\u0442\u0456\u0439\u0441\u044c\u043a\u0430', 'ms': u'\u041c\u0430\u043b\u0430\u0439\u0441\u044c\u043a\u0430', 'mr': u'\u041c\u0430\u0440\u0430\u0442\u0445\u0456', 'ug': u'\u0423\u0439\u0433\u0443\u0440\u0441\u044c\u043a\u0430', 'my': u'\u0411\u0443\u0440\u043c\u0456\u0441\u0456\u0439\u0441\u044c\u043a\u0430', 'aa': u'\u0410\u0444\u0430\u0440\u0441\u044c\u043a\u0430', 'ab': u'\u0410\u0431\u0445\u0430\u0437\u044c\u043a\u0430', 'ss': u'\u0421\u0456\u0441\u0432\u0430\u0442\u0456', 'af': u'\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441', 'tn': u'\u0421\u0435\u0442\u0441\u0432\u0430\u043d\u0441\u044c\u043a\u0430', 'sw': u'\u0421\u0443\u0430\u0445\u0456\u043b\u0456', 'is': u'\u0406\u0441\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430', 'am': u'\u0410\u043c\u0445\u0430\u0440\u0456\u043a', 'it': u'\u0406\u0442\u0430\u043b\u0456\u0439\u0441\u044c\u043a\u0430', 'sv': u'\u0428\u0432\u0435\u0434\u0441\u044c\u043a\u0430', 'ia': u'\u0406\u043d\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0432\u0430', 'as': u'\u0410\u0441\u0441\u0430\u043c\u0441\u044c\u043a\u0430', 'ar': u'\u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430', 'su': u'\u0421\u0443\u0434\u0430\u043d\u0441\u044c\u043a\u0430', 'zu': u'\u0417\u0443\u043b\u0443\u0441\u044c\u043a\u0430', 'ay': u'\u0410\u0443\u043c\u0430\u0440\u0430', 'az': u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d\u0441\u044c\u043a\u0430', 'ie': u'\u0406\u043d\u0442\u0435\u0440\u043b\u0456\u043d\u0433\u0432\u0430', 'id': u'\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u0439\u0441\u044c\u043a\u0430', 'sk': u'\u0421\u043b\u043e\u0432\u0430\u0446\u044c\u043a\u0430', 'nl': u'\u0413\u043e\u043b\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0430', 'no': u'\u041d\u043e\u0440\u0432\u0435\u0437\u044c\u043a\u0430', 'na': u'\u041d\u0430\u0443\u0440\u0443', 'ne': u'\u041d\u0435\u043f\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'vo': u'\u0412\u043e\u043b\u0430\u043f\u0430\u043a', 'fr': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430', 'sm': u'\u0421\u0430\u043c\u043e\u0430\u043d\u0441\u044c\u043a\u0430', 'fy': u'\u0424\u0440\u0438\u0437\u044c\u043a\u0430', 'fa': u'\u041f\u0435\u0440\u0441\u044c\u043a\u0430', 'fi': u'\u0424\u0456\u043d\u0441\u044c\u043a\u0430', 'fj': u'\u0424\u0456\u0434\u0436\u0456', 'sa': u'\u0421\u0430\u043d\u0441\u043a\u0440\u0438\u0442', 'fo': u'\u0424\u0430\u0440\u0435\u0440\u0441\u044c\u043a\u0430', 'ka': u'\u0413\u0440\u0443\u0437\u0438\u043d\u0441\u044c\u043a\u0430', 'kk': u'\u041a\u0430\u0437\u0430\u0445\u0441\u044c\u043a\u0430', 'sr': u'\u0421\u0435\u0440\u0431\u0441\u044c\u043a\u0430', 'sq': u'\u0410\u043b\u0431\u0430\u043d\u0441\u044c\u043a\u0430', 'ko': u'\u041a\u043e\u0440\u0435\u0439\u0441\u044c\u043a\u0430', 'kn': u'\u0414\u0440\u0430\u0432\u0456\u0434\u0456\u0439\u0441\u044c\u043a\u0430', 'km': u'\u041a\u0430\u043c\u043f\u0443\u0447\u0456\u0439\u0441\u044c\u043a\u0430', 'kl': u'\u0413\u0440\u0438\u043d\u043b\u0430\u043d\u0434\u0456\u043a', 'ks': u'\u041a\u0430\u0448\u043c\u0456\u0440\u0441\u044c\u043a\u0430', 'si': u'\u0421\u0438\u043d\u0433\u0430\u043b\u044c\u0441\u044c\u043a\u0430', 'sh': u'\u0421\u0435\u0440\u0431\u0441\u044c\u043a\u043e-\u0445\u043e\u0440\u0432\u0430\u0442\u0441\u044c\u043a\u0430', 'so': u'\u0421\u043e\u043c\u0430\u043b\u0456', 'sn': u'\u0428\u043e\u043d\u0430', 'ku': u'\u041a\u0443\u0440\u0434\u0441\u044c\u043a\u0430', 'sl': u'\u0421\u043b\u043e\u0432\u0435\u043d\u0441\u044c\u043a\u0430', 'ky': u'\u041a\u0438\u0440\u0433\u0438\u0437\u044c\u043a\u0430', 'sg': u'\u0421\u0430\u043d\u0433\u0440\u043e', 'sd': u'\u0421\u0456\u043d\u0434\u0442\u0445\u0456'} countries={'BD': u'\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448', 'BE': u'\u0411\u0435\u043b\u044c\u0433\u0456\u044f', 'BF': u'\u0411\u0443\u0440\u043a\u0456\u043d\u0430-\u0424\u0430\u0441\u043e', 'BG': u'\u0411\u043e\u043b\u0433\u0430\u0440\u0456\u044f', 'BA': u'\u0411\u043e\u0441\u043d\u0456\u044f \u0456 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430', 'BB': u'\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441', 'WF': u'\u0412\u0430\u043b\u043b\u0456\u0441 \u0456 \u0424\u0443\u0442\u0443\u043d\u0430, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'BM': u'\u0411\u0435\u0440\u043c\u0443\u0434\u0438', 'BN': u'\u0411\u0440\u0443\u043d\u0435\u0439', 'BO': u'\u0411\u043e\u043b\u0456\u0432\u0456\u044f', 'BH': u'\u0411\u0430\u0445\u0440\u0435\u0439\u043d', 'BI': u'\u0411\u0443\u0440\u0443\u043d\u0434\u0456', 'BJ': u'\u0411\u0435\u043d\u0456\u043d', 'BT': u'\u0411\u0443\u0442\u0430\u043d', 'JM': u'\u042f\u043c\u0430\u0439\u043a\u0430', 'BV': u'\u0411\u0443\u0432\u0435, \u043e\u0441\u0442\u0440\u0456\u0432', 'BW': u'\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430', 'WS': u'\u0421\u0430\u043c\u043e\u0430', 'BR': u'\u0411\u0440\u0430\u0437\u0438\u043b\u0456\u044f', 'BS': u'\u0411\u0430\u0433\u0430\u043c\u0438', 'BY': u'\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c', 'BZ': u'\u0411\u0435\u043b\u0456\u0437', 'RU': u'\u0420\u043e\u0441\u0456\u044f', 'RW': u'\u0420\u0443\u0430\u043d\u0434\u0430', 'TL': u'\u0421\u0445\u0456\u0434\u043d\u0438\u0439 \u0422\u0438\u043c\u043e\u0440', 'RE': u'\u0420\u0435\u044e\u043d\u044c\u0439\u043e\u043d', 'TM': u'\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d', 'TJ': u'\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d', 'RO': u'\u0420\u0443\u043c\u0443\u043d\u0456\u044f', 'TK': u'\u0422\u043e\u043a\u0435\u043b\u0430\u0443', 'GW': u'\u0413\u0432\u0456\u043d\u0435\u044f-\u0411\u0456\u0441\u0441\u0430\u0443', 'GU': u'\u0413\u0443\u0430\u043c', 'GT': u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430', 'GS': u'\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0414\u0436\u043e\u0440\u0436\u0456\u044f \u0442\u0430 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0438\u0439 \u0421\u0430\u043d\u0434\u0432\u0456\u0447', 'GR': u'\u0413\u0440\u0435\u0446\u0456\u044f', 'GQ': u'\u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0456\u0430\u043b\u044c\u043d\u0430 \u0413\u0432\u0456\u043d\u0435\u044f', 'GP': u'\u0413\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0430', 'JP': u'\u042f\u043f\u043e\u043d\u0456\u044f', 'GY': u'\u0413\u0443\u0430\u043d\u0430', 'GF': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430 \u0413\u0432\u0456\u0430\u043d\u0430', 'GE': u'\u0413\u0440\u0443\u0437\u0456\u044f', 'GD': u'\u0413\u0440\u0435\u043d\u0430\u0434\u0430', 'GB': u'\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0456\u044f', 'GA': u'\u0413\u0430\u0431\u043e\u043d', 'SV': u'\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440', 'GN': u'\u0413\u0432\u0456\u043d\u0435\u044f', 'GM': u'\u0413\u0430\u043c\u0431\u0456\u044f', 'GL': u'\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0456\u044f', 'GI': u'\u0413\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440', 'GH': u'\u0413\u0430\u043d\u0430', 'OM': u'\u041e\u043c\u0430\u043d', 'TN': u'\u0422\u0443\u043d\u0456\u0441', 'JO': u'\u0419\u043e\u0440\u0434\u0430\u043d\u0456\u044f', 'HR': u'\u0425\u043e\u0440\u0432\u0430\u0442\u0456\u044f', 'HT': u'\u0413\u0430\u0457\u0442\u0456', 'HU': u'\u0423\u0433\u043e\u0440\u0449\u0438\u043d\u0430', 'HK': u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433', 'HN': u'\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441', 'HM': u'\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u0425\u0435\u0440\u0434\u0430 \u0456 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u044c\u0434\u0441\u0430', 'VE': u'\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u0430', 'PR': u'\u041f\u0443\u0435\u0440\u0442\u043e-\u0420\u0456\u043a\u043e', 'PS': u'\u041f\u0430\u043b\u0435\u0441\u0442\u0438\u043d\u0430', 'PW': u'\u041f\u0430\u043b\u0430\u0443', 'PT': u'\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0456\u044f', 'SJ': u'\u0421\u0432\u0430\u043b\u0431\u0430\u0440\u0434 \u0456 \u042f\u043d \u041c\u0430\u0439\u0454\u043d, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'PY': u'\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439', 'IQ': u'\u0406\u0440\u0430\u043a', 'PA': u'\u041f\u0430\u043d\u0430\u043c\u0430', 'PF': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430 \u041f\u043e\u043b\u0456\u043d\u0435\u0437\u0456\u044f', 'PG': u'\u041f\u0430\u043f\u0443\u0430 \u041d\u043e\u0432\u0430 \u0413\u0432\u0456\u043d\u0435\u044f', 'PE': u'\u041f\u0435\u0440\u0443', 'PK': u'\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d', 'PH': u'\u0424\u0456\u043b\u0456\u043f\u043f\u0456\u043d\u0438', 'PN': u'\u041f\u0456\u0442\u043a\u0430\u0457\u0440\u043d', 'PL': u'\u041f\u043e\u043b\u044c\u0449\u0430', 'PM': u"\u0421\u0432. \u041f'\u0454\u0440 \u0456 \u041c\u0456\u043a\u0443\u043b\u043e\u043d", 'ZM': u'\u0417\u0430\u043c\u0431\u0456\u044f', 'EH': u'\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430', 'EE': u'\u0415\u0441\u0442\u043e\u043d\u0456\u044f', 'EG': u'\u0404\u0433\u0438\u043f\u0435\u0442', 'ZA': u'\u041f\u0410\u0420', 'EC': u'\u0415\u043a\u0432\u0430\u0434\u043e\u0440', 'IT': u'\u0406\u0442\u0430\u043b\u0456\u044f', 'VN': u"\u0412'\u0454\u0442\u043d\u0430\u043c", 'SB': u'\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'ET': u'\u0415\u0444\u0456\u043e\u043f\u0456\u044f', 'SO': u'\u0421\u043e\u043c\u0430\u043b\u0456', 'ZW': u'\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u0435', 'SA': u'\u0421\u0430\u0443\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0432\u0456\u044f', 'ES': u'\u0406\u0441\u043f\u0430\u043d\u0456\u044f', 'ER': u'\u0415\u0440\u0456\u0442\u0440\u0435\u044f', 'MD': u'\u041c\u043e\u043b\u0434\u043e\u0432\u0430', 'MG': u'\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440', 'MA': u'\u041c\u0430\u0440\u043e\u043a\u043a\u043e', 'MC': u'\u041c\u043e\u043d\u0430\u043a\u043e', 'UZ': u'\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d', 'MM': u"\u041c'\u044f\u043d\u043c\u0430\u0440", 'ML': u'\u041c\u0430\u043b\u0456', 'MO': u'\u041c\u0430\u043a\u0430\u043e', 'MN': u'\u041c\u043e\u043d\u0433\u043e\u043b\u0456\u044f', 'MH': u'\u041c\u0430\u0440\u0448\u0430\u043b\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'MK': u'\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f', 'MU': u'\u041c\u0430\u0432\u0440\u0438\u043a\u0456\u0439', 'MT': u'\u041c\u0430\u043b\u044c\u0442\u0430', 'MW': u'\u041c\u0430\u043b\u0430\u0432\u0438', 'MV': u'\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0438', 'MQ': u'\u041c\u0430\u0440\u0442\u0438\u043d\u0456\u043a\u0430', 'MP': u'\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u041c\u0430\u0440\u0456\u0430\u043d\u0430, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'MS': u'\u041c\u043e\u043d\u0441\u0435\u0440\u0440\u0430\u0442', 'MR': u'\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0456\u044f', 'UG': u'\u0423\u0433\u0430\u043d\u0434\u0430', 'MY': u'\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u044f', 'MX': u'\u041c\u0435\u043a\u0441\u0438\u043a\u0430', 'IL': u'\u0406\u0437\u0440\u0430\u0457\u043b\u044c', 'FR': u'\u0424\u0440\u0430\u043d\u0446\u0456\u044f', 'IO': u'\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0456 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0457 \u0406\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u043e\u0433\u043e \u043e\u043a\u0435\u0430\u043d\u0443', 'SH': u'\u0421\u0432. \u0404\u043b\u0435\u043d\u0430', 'FI': u'\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0456\u044f', 'FJ': u'\u0424\u0456\u0434\u0436\u0456', 'FK': u'\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 (\u041c\u0430\u043b\u044c\u0432\u0456\u043d\u0438)', 'FM': u'\u041c\u0456\u043a\u0440\u043e\u043d\u0435\u0437\u0456\u044f', 'FO': u'\u0424\u0430\u0440\u043e, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'NI': u'\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430', 'NL': u'\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438', 'NO': u'\u041d\u043e\u0440\u0432\u0435\u0433\u0456\u044f', 'NA': u'\u041d\u0430\u043c\u0456\u0431\u0456\u044f', 'VU': u'\u0412\u0430\u043d\u0443\u0430\u0442\u0443', 'NC': u'\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0456\u044f', 'NE': u'\u041d\u0456\u0433\u0435\u0440\u0456\u044f', 'NF': u'\u041d\u043e\u0440\u0444\u043e\u043b\u044c\u043a\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'NG': u'\u041d\u0456\u0433\u0435\u0440\u0456\u044f', 'NZ': u'\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0456\u044f', 'NP': u'\u041d\u0435\u043f\u0430\u043b', 'NR': u'\u041d\u0430\u0443\u0440\u0443', 'NU': u'\u041d\u0456\u044f', 'CK': u'\u041a\u0443\u043a\u0430, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'CI': u"\u041a\u043e\u0442-\u0434'\u0406\u0432\u0443\u0430\u0440", 'CH': u'\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0456\u044f', 'CO': u'\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u044f', 'CN': u'\u041a\u0438\u0442\u0430\u0439', 'CM': u'\u041a\u0430\u043c\u0435\u0440\u0443\u043d', 'CL': u'\u0427\u0438\u043b\u0456', 'CC': u'\u041a\u043e\u043a\u043e\u0441\u043e\u0432\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'CA': u'\u041a\u0430\u043d\u0430\u0434\u0430', 'CG': u'\u041a\u043e\u043d\u0433\u043e', 'CF': u'\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'CD': u'\u041a\u043e\u043d\u0433\u043e', 'CZ': u'\u0427\u0435\u0445\u0456\u044f', 'CY': u'\u041a\u0456\u043f\u0440', 'CX': u'\u0420\u0456\u0437\u0434\u0432\u044f\u043d\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438', 'CR': u'\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430', 'CV': u'\u0417\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u041c\u0438\u0441\u0443, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'CU': u'\u041a\u0443\u0431\u0430', 'SZ': u'\u0421\u0432\u0430\u0437\u0456\u043b\u0435\u043d\u0434', 'SY': u'\u0421\u0438\u0440\u0456\u0439\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'KG': u'\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u0442\u0430\u043d', 'KE': u'\u041a\u0435\u043d\u0456\u044f', 'SR': u'\u0421\u0443\u0440\u0456\u043d\u0430\u043c', 'KI': u'\u041a\u0456\u0440\u0438\u0431\u0430\u0442\u0456', 'KH': u'\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430', 'KN': u'\u0421\u0432. \u041a\u0456\u0442\u0442\u0441 \u0456 \u041d\u0435\u0432\u0456\u0441', 'KM': u'\u041a\u043e\u043c\u043e\u0440\u043e\u0441', 'ST': u'\u0421\u0430\u043e \u0422\u043e\u043c \u0456 \u041f\u0440\u0456\u043d\u0441\u0456\u043f', 'SK': u'\u0421\u043b\u043e\u0432\u0430\u043a\u0456\u044f', 'KR': u'\u041a\u043e\u0440\u0435\u044f, \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'SI': u'\u0421\u043b\u043e\u0432\u0435\u043d\u0456\u044f', 'KP': u'\u041a\u043e\u0440\u0435\u044f, \u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'KW': u'\u041a\u0443\u0432\u0435\u0439\u0442', 'SN': u'\u0421\u0435\u043d\u0435\u0433\u0430\u043b', 'SM': u'\u0421\u0430\u043d-\u041c\u0430\u0440\u0456\u043d\u043e', 'SL': u'\u0421\u044c\u0454\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435', 'SC': u'\u0421\u0435\u0439\u0448\u0435\u043b\u0438', 'KZ': u'\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d', 'KY': u'\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'SG': u'\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440', 'SE': u'\u0428\u0432\u0435\u0446\u0456\u044f', 'SD': u'\u0421\u0443\u0434\u0430\u043d', 'DO': u'\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'DM': u'\u0414\u043e\u043c\u0456\u043d\u0456\u043a', 'DJ': u'\u0414\u0436\u0438\u0431\u0443\u0442\u0456', 'DK': u'\u0414\u0430\u043d\u0456\u044f', 'VG': u'\u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 (\u0411\u0440\u0438\u0442\u0430\u043d\u0456\u044f)', 'DE': u'\u041d\u0456\u043c\u0435\u0447\u0447\u0438\u043d\u0430', 'YE': u'\u0419\u0454\u043c\u0435\u043d', 'DZ': u'\u0410\u043b\u0436\u0438\u0440', 'US': u'\u0421\u0428\u0410', 'UY': u'\u0423\u0440\u0443\u0433\u0432\u0430\u0439', 'YU': u'\u042e\u0433\u043e\u0441\u043b\u0430\u0432\u0456\u044f', 'YT': u'\u041c\u0430\u0439\u043e\u0442', 'UM': u'\u0412\u0456\u0434\u0434\u0430\u043b\u0435\u043d\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u0421\u0428\u0410', 'LB': u'\u041b\u0456\u0432\u0430\u043d', 'LC': u'\u0421\u0430\u043d\u0442\u0430 \u041b\u044e\u0447\u0456\u044f', 'LA': u'\u041b\u0430\u043e\u0441\u044c\u043a\u0430 \u041d\u0430\u0440\u043e\u0434\u043d\u043e-\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430', 'TV': u'\u0422\u0443\u0432\u0430\u043b\u0443', 'TW': u'\u0422\u0430\u0439\u0432\u0430\u043d\u044c', 'TT': u'\u0422\u0440\u0438\u043d\u0456\u0434\u0430\u0434 \u0456 \u0422\u0430\u0431\u0430\u0433\u043e', 'TR': u'\u0422\u0443\u0440\u0435\u0447\u0447\u0438\u043d\u0430', 'LK': u'\u0428\u0440\u0456-\u041b\u0430\u043d\u043a\u0430', 'LI': u'\u041b\u0456\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d', 'LV': u'\u041b\u0430\u0442\u0432\u0456\u044f', 'TO': u'\u0422\u043e\u043d\u0433\u0430', 'LT': u'\u041b\u0438\u0442\u0432\u0430', 'LU': u'\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433', 'LR': u'\u041b\u0456\u0431\u0435\u0440\u0456\u044f', 'LS': u'\u041b\u0435\u0441\u043e\u0442\u043e', 'TH': u'\u0422\u0430\u0439\u043b\u0430\u043d\u0434', 'TF': u'\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0456 \u0422\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0457', 'TG': u'\u0422\u043e\u0433\u043e', 'TD': u'\u0427\u0430\u0434', 'TC': u'\u0422\u0443\u0440\u043e\u043a \u0442\u0430 \u041a\u0430\u043a\u0456\u043e\u0441, \u043e\u0441\u0442\u0440\u043e\u0432\u0438', 'LY': u'\u041b\u0456\u0432\u0456\u0439\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0430 \u0414\u0436\u0430\u043c\u0430\u0445\u0456\u0440\u0456\u044f', 'VA': u'\u0412\u0430\u0442\u0438\u043a\u0430\u043d', 'VC': u'\u0421\u0432. \u0412\u0456\u043d\u0441\u0435\u043d\u0442 \u0456 \u0413\u0440\u0435\u043d\u0430\u0434\u0438\u043d\u0438', 'AE': u'\u0421\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0456 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0456 \u0415\u043c\u0456\u0440\u0430\u0442\u0438', 'AD': u'\u0410\u043d\u0434\u043e\u0440\u0440\u0430', 'AG': u'\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0456 \u0411\u0430\u0440\u0431\u0443\u0434\u0430', 'AF': u'\u0410\u0444\u0433\u0430\u043d\u0456\u0441\u0442\u0430\u043d', 'AI': u'\u0410\u043d\u0433\u0456\u043b\u044c\u044f', 'VI': u'\u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 (\u0421\u0428\u0410)', 'IS': u'\u0406\u0441\u043b\u0430\u043d\u0434\u0456\u044f', 'IR': u'\u0406\u0440\u0430\u043d', 'AM': u'\u0412\u0456\u0440\u043c\u0435\u043d\u0456\u044f', 'AL': u'\u0410\u043b\u0431\u0430\u043d\u0456\u044f', 'AO': u'\u0410\u043d\u0433\u043e\u043b\u0430', 'AN': u'\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0456 \u0410\u043d\u0442\u0456\u043b\u0438', 'AQ': u'\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430', 'AS': u'\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0456 \u0421\u0430\u043c\u043e\u0430', 'AR': u'\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430', 'AU': u'\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f', 'AT': u'\u0410\u0432\u0441\u0442\u0440\u0456\u044f', 'AW': u'\u0410\u0440\u0443\u0431\u0430', 'IN': u'\u0406\u043d\u0434\u0456\u044f', 'TZ': u"\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u044f, \u041e\u0431'\u0454\u0434\u043d\u0430\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", 'AZ': u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d', 'IE': u'\u0406\u0440\u043b\u0430\u043d\u0434\u0456\u044f', 'ID': u'\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u044f', 'UA': u'\u0423\u043a\u0440\u0430\u0457\u043d\u0430', 'QA': u'\u041a\u0430\u0442\u0430\u0440', 'MZ': u'\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u043a'} months=[u'\u0441\u0456\u0447\u043d\u044f', u'\u043b\u044e\u0442\u043e\u0433\u043e', u'\u0431\u0435\u0440\u0435\u0437\u043d\u044f', u'\u043a\u0432\u0456\u0442\u043d\u044f', u'\u0442\u0440\u0430\u0432\u043d\u044f', u'\u0447\u0435\u0440\u0432\u043d\u044f', u'\u043b\u0438\u043f\u043d\u044f', u'\u0441\u0435\u0440\u043f\u043d\u044f', u'\u0432\u0435\u0440\u0435\u0441\u043d\u044f', u'\u0436\u043e\u0432\u0442\u043d\u044f', u'\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430', u'\u0433\u0440\u0443\u0434\u043d\u044f'] abbrMonths=[u'\u0441\u0456\u0447', u'\u043b\u044e\u0442', u'\u0431\u0435\u0440', u'\u043a\u0432\u0456\u0442', u'\u0442\u0440\u0430\u0432', u'\u0447\u0435\u0440\u0432', u'\u043b\u0438\u043f', u'\u0441\u0435\u0440\u043f', u'\u0432\u0435\u0440', u'\u0436\u043e\u0432\u0442', u'\u043b\u0438\u0441\u0442', u'\u0433\u0440\u0443\u0434'] days=[u'\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a', u'\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a', u'\u0421\u0435\u0440\u0435\u0434\u0430', u'\u0427\u0435\u0442\u0432\u0435\u0440', u"\u041f'\u044f\u0442\u043d\u0438\u0446\u044f", u'\u0421\u0443\u0431\u043e\u0442\u0430', u'\u041d\u0435\u0434\u0456\u043b\u044f'] abbrDays=[u'\u041f\u043d', u'\u0412\u0442', u'\u0421\u0440', u'\u0427\u0442', u'\u041f\u0442', u'\u0421\u0431', u'\u041d\u0434'] dateFormats={'medium': '%d %%(abbrmonthname)s %Y', 'full': u'%%(dayname)s, %d %%(monthname)s %Y \u0440.', 'long': '%d %%(monthname)s %Y', 'short': '%d.%m.%y'} numericSymbols={'group': u'\xa0', 'nativeZeroDigit': '0', 'exponential': 'E', 'perMille': u'\u2030', 'nan': u'\ufffd', 'decimal': ',', 'percentSign': '%', 'list': ';', 'patternDigit': '#', 'plusSign': '+', 'infinity': u'\u221e', 'minusSign': '-'}PKh6{D@@turbogears/i18n/data/uk.pyc; AEc @swhdd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d0<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d0<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdOd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdOd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdMd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddd?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdq<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: utf-8 Generated-By: pygettext.py 1.5 Leere Werte sind nicht erlaubtUngültige Daten oder falsche ZeichenkodierungUngültiges DatumsformatUngültiges NummernformatBitte mindestens einen Wert auswählenPKs6nh1turbogears/i18n/data/de/LC_MESSAGES/TurboGears.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , 2006. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2006-10-03 10:24+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Gregor Horvath \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" "Generated-By: pygettext.py 1.5\n" #: validators.py:29 msgid "Invalid number format" msgstr "Ungültiges Nummernformat" #: validators.py:30 validators.py:80 msgid "Empty values not allowed" msgstr "Leere Werte sind nicht erlaubt" #: validators.py:79 msgid "Invalid datetime format" msgstr "Ungültiges Datumsformat" #: validators.py:125 msgid "Invalid data or incorrect encoding" msgstr "Ungültige Daten oder falsche Zeichenkodierung" #: validators.py:169 msgid "Please select at least a value" msgstr "Bitte mindestens einen Wert auswählen" PK5h  1turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.moL |"H2{'"Empty values not allowedInvalid data or incorrect encodingInvalid datetime formatInvalid number formatPlease select at least a valueProject-Id-Version: 1.0 POT-Creation-Date: 2006-10-03 10:24+CET PO-Revision-Date: 2006-12-11 20:48+CET Last-Translator: Matej Barič Language-Team: Slovenian MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: utf-8 Generated-By: pygettext.py 1.5 Prazne vrednosti niso dovoljeneNeveljaven podatek ali napačna abecedaNeveljavna oblika datuma/časaNeveljavna oblika številaProsim, izberite vsaj eno vrednostPK5L1turbogears/i18n/data/sl/LC_MESSAGES/TurboGears.po# SOME DESCRIPTIVE TITLE. # Copyright (C) 2006 Matej Barič # Matej Barič , 2006. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "POT-Creation-Date: 2006-10-03 10:24+CET\n" "PO-Revision-Date: 2006-12-11 20:48+CET\n" "Last-Translator: Matej Barič \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" "Generated-By: pygettext.py 1.5\n" #: validators.py:29 msgid "Invalid number format" msgstr "Neveljavna oblika števila" #: validators.py:30 validators.py:80 msgid "Empty values not allowed" msgstr "Prazne vrednosti niso dovoljene" #: validators.py:79 msgid "Invalid datetime format" msgstr "Neveljavna oblika datuma/časa" #: validators.py:125 msgid "Invalid data or incorrect encoding" msgstr "Neveljaven podatek ali napačna abeceda" #: validators.py:169 msgid "Please select at least a value" msgstr "Prosim, izberite vsaj eno vrednost" PKP6֫"turbogears/i18n/sogettext/model.pytry: from sqlobject import * from datetime import * from turbogears.database import PackageHub # create a PackageHub hub = PackageHub("turbogears.i18n.sogettext") __connection__ = hub class TG_Domain(SQLObject): name = StringCol(alternateID=True) messages = MultipleJoin("TG_Message") class sqlmeta: table="tg_i18n_domain" defaultOrder="name" class TG_Message(SQLObject): name = UnicodeCol() text = UnicodeCol(default="") domain = ForeignKey("TG_Domain") locale = StringCol(length=15) created= DateTimeCol(default=datetime.now) updated=DateTimeCol(default=None) def _set_text(self, text): self._SO_set_text(text) self.updated = datetime.now() class sqlmeta: table="tg_i18n_message" defaultOrder="name" except ImportError: pass PKh6㞈#turbogears/i18n/sogettext/model.pyc; 8Ec@swy]dkTdkTdklZedZeZdefdYZdefdYZWne j onXdS((s*(s PackageHubsturbogears.i18n.sogettexts TG_DomaincBs6tZedeZedZdfdYZRS(Ns alternateIDs TG_MessagessqlmetacBstZdZdZRS(Nstg_i18n_domainsname(s__name__s __module__stables defaultOrder(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pyssqlmetas(s__name__s __module__s StringColsTruesnames MultipleJoinsmessagesssqlmeta(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys TG_Domain s s TG_MessagecBsxtZeZeddZedZeddZe de i Z e de ZdZdfdYZRS( Nsdefaultss TG_DomainslengthicCs |i|ti|_dS(N(sselfs _SO_set_textstextsdatetimesnowsupdated(sselfstext((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys _set_texts ssqlmetacBstZdZdZRS(Nstg_i18n_messagesname(s__name__s __module__stables defaultOrder(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pyssqlmeta"s(s__name__s __module__s UnicodeColsnamestexts ForeignKeysdomains StringColslocales DateTimeColsdatetimesnowscreatedsNonesupdateds _set_textssqlmeta(((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys TG_Messages   N( s sqlobjectsdatetimesturbogears.databases PackageHubshubs__connection__s SQLObjects TG_Domains TG_Messages ImportError(shubs PackageHubs TG_Messages TG_Domains__connection__((s8build\bdist.win32\egg\turbogears\i18n\sogettext\model.pys?s   PK60 %turbogears/i18n/sogettext/__init__.py""" SQLObject-based version of gettext """ import turbogears from turbogears.i18n.sogettext.model import TG_Message, TG_Domain from turbogears.i18n.utils import get_locale try: from sqlobject import SQLObjectNotFound except ImportError: pass from gettext import translation import codecs _catalogs = {} def so_gettext(key, locale=None, domain=None): """ SQLObject-based version of gettext. Messages are stored in database instead. """ locale = get_locale(locale) messages = get_so_catalog(domain).get(locale) if not messages: messages = get_so_catalog(domain).get(locale[:2], {}) return unicode(messages.get(key, key)) def get_so_catalog(domain): """ Retrieves all translations for locale and domain from database and stores in thread data. """ if domain is None:domain = turbogears.config.get("i18n.domain", "messages") catalog = _catalogs.get(domain) if not catalog: catalog = {} try: domain = TG_Domain.byName(domain) except SQLObjectNotFound: return catalog results = TG_Message.selectBy(domain=domain) for message in results: locale = message.locale messages = catalog.get(locale, {}) messages[message.name] = message.text catalog[locale] = messages _catalogs[domain.name] = catalog return catalog def create_so_catalog(locales, domain): """ Creates a message catalog based on list of locales from existing GNU message catalog """ TG_Message.dropTable(ifExists=True) TG_Domain.dropTable(ifExists=True) TG_Domain.createTable(ifNotExists=True) TG_Message.createTable(ifNotExists=True) localedir = turbogears.config.get("i18n.locale_dir", "locales") try: domain = TG_Domain.byName(domain) return except SQLObjectNotFound: domain = TG_Domain(name=domain) for locale in locales: translations = translation( domain=domain.name, localedir=localedir, languages=[locale]) catalog = translations._catalog for k, v in catalog.items(): TG_Message(domain=domain, locale=locale, name=k, text=v) def dump_so_catalogs(locales): """Takes all domains and messages and creates message catalogs """ localedir = turbogears.config.get("i18n.locale_dir", "locales") for locale in locales: messages_dir = os.path.join(localedir, locale, "LC_MESSAGES") for domain in TG_Domain.select(): pofile=os.path.join(messages_dir, "%s.po" %domain.name) f = codecs.open(pofile, "w", "UTF-8") f.write(""" # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\\n" "POT-Creation-Date: CREATION_DATE\\n" "PO-Revision-Date: REVISION_DATE\\n" "Last-Translator: TRANSLATOR \\n" "Language-Team: LANGUAGE \\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=UTF-8\\n" "Content-Transfer-Encoding: 8bit\\n" "Generated-By: turbogears\\n" """) for message in TG_Message.selectBy(domain=domain, locale=locale): if message.name == "":continue # descriptive text f.write(u""" msgid "%s" msgstr "%s" """%(message.name, message.text)) f.close() PKh6a=6&turbogears/i18n/sogettext/__init__.pyc; hFc@sdZdkZdklZlZdklZydklZWne j onXdk l Z dk Z hZ eedZdZdZd ZdS( s$ SQLObject-based version of gettext N(s TG_Messages TG_Domain(s get_locale(sSQLObjectNotFound(s translationcCsct|}t|i|}| o t|i|d h}nt|i||SdS(sZ SQLObject-based version of gettext. Messages are stored in database instead. iN(s get_localeslocalesget_so_catalogsdomainsgetsmessagessunicodeskey(skeyslocalesdomainsmessages((s;build\bdist.win32\egg\turbogears\i18n\sogettext\__init__.pys so_gettexts   cCs|tjotiidd}nti|}| oh}yti|}Wnt j o |SnXt i d|}xC|D];}|i}|i|h}|i||i<|||, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: CREATION_DATE\n" "PO-Revision-Date: REVISION_DATE\n" "Last-Translator: TRANSLATOR \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: turbogears\n" sdomainslocalesu( msgid "%s" msgstr "%s" N(s turbogearssconfigsgets localedirslocalesslocalesosspathsjoins messages_dirs TG_Domainsselectsdomainsnamespofilescodecssopensfswrites TG_MessagesselectBysmessagestextsclose(slocalessdomains messages_dirsfslocalespofiles localedirsmessage((s;build\bdist.win32\egg\turbogears\i18n\sogettext\__init__.pysdump_so_catalogsYs   !(s__doc__s turbogearssturbogears.i18n.sogettext.models TG_Messages TG_Domainsturbogears.i18n.utilss get_locales sqlobjectsSQLObjectNotFounds ImportErrorsgettexts translationscodecss _catalogssNones so_gettextsget_so_catalogscreate_so_catalogsdump_so_catalogs( screate_so_catalogsSQLObjectNotFounds get_locales turbogearssget_so_catalogs _catalogss TG_Messages TG_Domainsdump_so_catalogsscodecss translations so_gettext((s;build\bdist.win32\egg\turbogears\i18n\sogettext\__init__.pys?s      PKP6/b $turbogears/i18n/tests/test_format.py from datetime import datetime from turbogears.i18n.format import * #from turbogears.i18n.tests import setup_module dt = datetime(2005, 2, 5) # Saturday, 5rd Feb 2005 def test_get_countries(): print get_countries() print get_countries("eo") print get_countries("en_US") def test_get_languages(): print get_languages() print get_languages("eo") print get_countries("en_US") def test_get_month_names(): print get_month_names() print get_abbr_month_names() print get_month_names("eo") print get_abbr_month_names("eo") print get_month_names("en_US") print get_abbr_month_names("en_US") def test_get_weekday_names(): print get_weekday_names() print get_abbr_weekday_names() print get_weekday_names("eo") print get_abbr_weekday_names("eo") print get_weekday_names("en_US") print get_abbr_weekday_names("en_US") def test_format_numbers(): assert format_number(50, "en_US")=="50" assert format_number(50, "de")=="50" assert format_number(500, "en_US")=="500" assert format_number(500, "de")=="500" assert format_number(5000, "en_US")=="5,000" assert format_number(5000, "de")=="5.000" assert format_number(50000, "en_US")=="50,000" assert format_number(50000, "de")=="50.000" assert format_number(500000, "en_US")=="500,000" assert format_number(500000, "de")=="500.000" assert format_number(5000000, "en_US")=="5,000,000" assert format_number(5000000, "de")=="5.000.000" assert format_decimal(5000000.78781, 5, "en_US")=="5,000,000.78781" assert format_decimal(5000000.78781, 5, "de")=="5.000.000,78781" assert format_currency(5000000.78781, "en_US")=="5,000,000.79" assert format_currency(5000000.78781, "de")=="5.000.000,79" def test_format_date(): assert format_date(dt, "long", "eo") == u"2005-februaro-05" assert format_date(dt, "medium", "eo") == u"2005-feb-05" assert format_date(dt, "short", "eo") == u"05-02-05" assert format_date(dt, "full", "eo") == u"sabato, 05-a de februaro 2005" assert format_date(dt, "short", "en", date_format='day %d of %%(monthname)s') == u"day 05 of February" def test_parse_numbers(): assert parse_number("5,000,000", "en_US") == 5000000 assert parse_number("5.000.000", "de") == 5000000 assert parse_decimal("5,000,000.78781", "en_US") == 5000000.78781 assert parse_decimal("5.000.000,78781", "de") == 5000000.78781 try: parse_number("5.000.000", "en_US") parse_number("5.000.000,78781", "en_US") assert False except ValueError: assert True def test_diff_locale_format_date(): assert format_date(dt, "short", "en_US") == "02/05/05" assert format_date(dt, "short", "en_GB") == "05/02/2005" def test_invalid_locale_format(): assert get_abbr_weekday_names("fubar")==[] PKh6zv%turbogears/i18n/tests/test_format.pyc; 8Ec@s{dklZdkTedddZdZdZdZdZd Zd Zd Z d Z d Z dS((sdatetime(s*iiicCs"tGHtdGHtdGHdS(Nseosen_US(s get_countries(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_countries s cCs"tGHtdGHtdGHdS(Nseosen_US(s get_languagess get_countries(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_languagess cCs@tGHtGHtdGHtdGHtdGHtdGHdS(Nseosen_US(sget_month_namessget_abbr_month_names(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_month_namess    cCs@tGHtGHtdGHtdGHtdGHtdGHdS(Nseosen_US(sget_weekday_namessget_abbr_weekday_names(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_get_weekday_namess    cCstdddjpttdddjpttdddjpttdddjpttdddjpttddd jpttd dd jpttd dd jpttd ddjpttd ddjpttdddjpttdddjpttddddjpttddddjpttdddjpttdddjptdS(Ni2sen_USs50sdeis500is5,000s5.000iPs50,000s50.000i s500,000s500.000i@KLs 5,000,000s 5.000.000f5000000.7878099997is5,000,000.78781s5.000.000,78781s 5,000,000.79s 5.000.000,79(s format_numbersAssertionErrorsformat_decimalsformat_currency(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_format_numbers's   cCsttdddjptttdddjptttdddjptttddd jptttdd d d d jptdS(Nslongseou2005-februaro-05smediumu 2005-feb-05sshortu05-02-05sfullusabato, 05-a de februaro 2005sens date_formatsday %d of %%(monthname)suday 05 of February(s format_datesdtsAssertionError(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_format_date@s      cCstdddjpttdddjpttdddjpttdddjpty,tddtddtptWn!tj otptnXdS( Ns 5,000,000sen_USi@KLs 5.000.000sdes5,000,000.78781f5000000.7878099997s5.000.000,78781(s parse_numbersAssertionErrors parse_decimalsFalses ValueErrorsTrue(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_parse_numbersIs  cCsDttdddjptttdddjptdS(Nsshortsen_USs02/05/05sen_GBs 05/02/2005(s format_datesdtsAssertionError(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_diff_locale_format_dateVs cCstdgjptdS(Nsfubar(sget_abbr_weekday_namessAssertionError(((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pystest_invalid_locale_formatZsN( sdatetimesturbogears.i18n.formatsdtstest_get_countriesstest_get_languagesstest_get_month_namesstest_get_weekday_namesstest_format_numbersstest_format_datestest_parse_numbersstest_diff_locale_format_datestest_invalid_locale_format( stest_parse_numberssdatetimestest_diff_locale_format_datestest_format_datestest_get_languagesstest_get_weekday_namesstest_format_numbersstest_invalid_locale_formatstest_get_countriessdtstest_get_month_names((s:build\bdist.win32\egg\turbogears\i18n\tests\test_format.pys?s     PKP6[<&turbogears/i18n/tests/test_kidutils.py import kid from turbogears.i18n.kidutils import * from turbogears.i18n.tests import setup_module def test_match_template(): template = """ Welcome

Welcome

Welcome

Welcome

""" t = kid.Template(source = template) output = t.serialize() print output assert '

Welcome

' in output assert '

Tervetuloa

' in output def test_i18n_filter(): template = """ Welcome, guest!

Welcome

Welcome

WelcomeWelcome

""" t = kid.Template(source = template) t._filters+=[i18n_filter] output = t.serialize() print output PKh6BB'turbogears/i18n/tests/test_kidutils.pyc; 8Ec@s3dkZdkTdklZdZdZdS(N(s*(s setup_modulecCsUd}tid|}|i}|GHd|jptd|jptdS(Ns Welcome

Welcome

Welcome

Welcome

ssources

Welcome

s

Tervetuloa

(stemplateskidsTemplatests serializesoutputsAssertionError(soutputststemplate((s<build\bdist.win32\egg\turbogears\i18n\tests\test_kidutils.pystest_match_templates  cCs?d}tid|}|itg7_|i}|GHdS(Ns Welcome, guest!

Welcome

Welcome

WelcomeWelcome

ssource(stemplateskidsTemplatests_filterss i18n_filters serializesoutput(soutputststemplate((s<build\bdist.win32\egg\turbogears\i18n\tests\test_kidutils.pystest_i18n_filters   (skidsturbogears.i18n.kidutilssturbogears.i18n.testss setup_modulestest_match_templatestest_i18n_filter(stest_i18n_filters setup_modulestest_match_templateskid((s<build\bdist.win32\egg\turbogears\i18n\tests\test_kidutils.pys?s   PKP6'(turbogears/i18n/tests/test_so_gettext.py import turbogears from turbogears.i18n import sogettext from turbogears.i18n.tg_gettext import tg_gettext from turbogears.i18n.tests import setup_module as basic_setup_module from turbogears.i18n.tests.test_tg_gettext import test_gettext, test_ngettext from turbogears.i18n.tests.test_tg_gettext import test_invalid_domain from turbogears.i18n.tests.test_kidutils import test_match_template, test_i18n_filter def setup_module(): turbogears.config.update({"i18n.gettext":sogettext.so_gettext}) basic_setup_module() def teardown_module(): turbogears.config.update({"i18n.gettext":tg_gettext}) def test_so_gettext(): test_gettext() test_ngettext() test_match_template() test_i18n_filter() test_invalid_domain() PKh6?oxx)turbogears/i18n/tests/test_so_gettext.pyc; 8Ec@sdkZdklZdklZdklZdkl Z l Z dkl Z dk l Z lZdZdZd ZdS( N(s sogettext(s tg_gettext(s setup_module(s test_gettexts test_ngettext(stest_invalid_domain(stest_match_templatestest_i18n_filtercCs'tiihdti<tdS(Ns i18n.gettext(s turbogearssconfigsupdates sogettexts so_gettextsbasic_setup_module(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pys setup_module scCstiihdt<dS(Ns i18n.gettext(s turbogearssconfigsupdates tg_gettext(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pysteardown_modulescCs'tttttdS(N(s test_gettexts test_ngettextstest_match_templatestest_i18n_filterstest_invalid_domain(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pystest_so_gettexts (s turbogearssturbogears.i18ns sogettextsturbogears.i18n.tg_gettexts tg_gettextsturbogears.i18n.testss setup_modulesbasic_setup_modules%turbogears.i18n.tests.test_tg_gettexts test_gettexts test_ngettextstest_invalid_domains#turbogears.i18n.tests.test_kidutilsstest_match_templatestest_i18n_filtersteardown_modulestest_so_gettext( s test_gettexts turbogearss sogettextstest_i18n_filtersbasic_setup_modules setup_modulestest_match_templates tg_gettextsteardown_modules test_ngettextstest_invalid_domainstest_so_gettext((s>build\bdist.win32\egg\turbogears\i18n\tests\test_so_gettext.pys?s       PKP6PxBB(turbogears/i18n/tests/test_tg_gettext.py from turbogears.i18n.tg_gettext import * from turbogears.i18n.tests import setup_module def test_gettext(): assert unicode(gettext("Welcome")) == "Welcome" assert unicode(gettext("Welcome", "en")) == "Welcome" assert unicode(gettext("Welcome", "fi")) == "Tervetuloa" assert unicode(gettext("Welcome", "fi_FI")) == "Tervetuloa" def test_invalid_domain(): assert gettext("Welcome", "fi", "fubar") != "Tervetuloa" def test_is_unsupported_locale(): assert is_locale_supported("en") == True assert is_locale_supported("en-gb") == False assert is_locale_supported("de") == False assert is_locale_supported("en", "fubar") == False def test_gettext_unsupported_locale(): assert unicode(gettext("Welcome", "en-gb")) == "Welcome" assert unicode(gettext("Welcome", "de")) == "Welcome" def test_ngettext(): assert ngettext("You have %i apple", \ "You have %i apples", 1) %1 == "You have 1 apple" assert ngettext("You have %i apple", \ "You have %i apples", 1, "fi") %1 == "Sinulla on 1 omena" assert ngettext("You have %i apple", \ "You have %i apples", 3) %3 == "You have 3 apples" assert ngettext("You have %i apple", \ "You have %i apples", 3, "fi") %3== "Sinulla on 3 omenaa" def test_lazystring(): s1 = lazystring("simple".upper) assert s1 == 'SIMPLE' assert s1 != 'HARD' assert s1 > 'HARD' or s1 < 'HARD' # should lazystring support string concatenation? # assert s1 + '!' == 'SIMPLE!' # assert 'TOO ' + s1 == 'TOO SIMPLE' PKh6C{H )turbogears/i18n/tests/test_tg_gettext.pyc; 8Ec@sNdkTdklZdZdZdZdZdZdZdS( (s*(s setup_modulecCsttddjptttdddjptttdddjptttdddjptdS(NsWelcomesensfis Tervetuloasfi_FI(sunicodesgettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pys test_gettexts ##cCs$tddddjptdS(NsWelcomesfisfubars Tervetuloa(sgettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_invalid_domain scCsotdtjpttdtjpttdtjpttddtjptdS(Nsensen-gbsdesfubar(sis_locale_supportedsTruesAssertionErrorsFalse(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_is_unsupported_localescCsJttdddjptttdddjptdS(NsWelcomesen-gbsde(sunicodesgettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_gettext_unsupported_locales#cCstdddddjpttddddddjpttdddddjpttdddddd jptdS( NsYou have %i applesYou have %i applesisYou have 1 applesfisSinulla on 1 omenaisYou have 3 applessSinulla on 3 omenaa(sngettextsAssertionError(((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pys test_ngettexts!cCs\tdi}|djpt|djpt|djp |djptdS(NssimplesSIMPLEsHARD(s lazystringsupperss1sAssertionError(ss1((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pystest_lazystring"sN( sturbogears.i18n.tg_gettextsturbogears.i18n.testss setup_modules test_gettextstest_invalid_domainstest_is_unsupported_localestest_gettext_unsupported_locales test_ngettextstest_lazystring(s test_gettextstest_is_unsupported_localestest_gettext_unsupported_locales setup_modulestest_lazystrings test_ngettextstest_invalid_domain((s>build\bdist.win32\egg\turbogears\i18n\tests\test_tg_gettext.pys?s      PKP6q#turbogears/i18n/tests/test_utils.py from turbogears.i18n.utils import * def test_get_accept_languages(): assert get_accept_languages("da, en-gb;q=0.8, en;q=0.7") == ["da", "en_GB", "en"] assert get_accept_languages("da;q=0.6, en-gb;q=1.0, en;q=0.7") == ["en_GB", "en", "da"] PKh6o{ee$turbogears/i18n/tests/test_utils.pyc; 8Ec@sdkTdZdS((s*cCsJtddddgjpttddddgjptdS(Nsda, en-gb;q=0.8, en;q=0.7sdasen_GBsensda;q=0.6, en-gb;q=1.0, en;q=0.7(sget_accept_languagessAssertionError(((s9build\bdist.win32\egg\turbogears\i18n\tests\test_utils.pystest_get_accept_languagess#N(sturbogears.i18n.utilsstest_get_accept_languages(stest_get_accept_languages((s9build\bdist.win32\egg\turbogears\i18n\tests\test_utils.pys?sPKP6iKԣ!turbogears/i18n/tests/__init__.py import os.path import tempfile from turbogears.i18n import sogettext import turbogears def setup_module(): basedir = os.path.join(os.path.dirname(os.path.dirname( os.path.dirname(os.path.abspath(__file__)))), "tests") locale_dir = os.path.join(basedir, 'locale') turbogears.config.update({ 'i18n.locale_dir':locale_dir, 'i18n.domain':'messages', 'i18n.default_locale':'en', 'i18n.get_locale':lambda: 'en', 'i18n.run_template_filter':False, 'sqlobject.dburi':"sqlite:///" + tempfile.gettempdir() + "/testlocaledb" }) sogettext.create_so_catalog(["en","fi"], "messages") PKh6W)"turbogears/i18n/tests/__init__.pyc; 8Ec@s5dkZdkZdklZdkZdZdS(N(s sogettextcCstiitiitiitiitiitd}tii|d}ti i hd|<dd<dd<dd <d t <d d t i d <tiddgddS(Nstestsslocalesi18n.locale_dirs i18n.domainsmessagessi18n.default_localesensi18n.get_localecCsdS(Nsen((((s7build\bdist.win32\egg\turbogears\i18n\tests\__init__.pysssi18n.run_template_filterssqlobject.dburis sqlite:///s /testlocaledbsfi(sosspathsjoinsdirnamesabspaths__file__sbasedirs locale_dirs turbogearssconfigsupdatesFalsestempfiles gettempdirs sogettextscreate_so_catalog(sbasedirs locale_dir((s7build\bdist.win32\egg\turbogears\i18n\tests\__init__.pys setup_modules < W(sos.pathsosstempfilesturbogears.i18ns sogettexts turbogearss setup_module(stempfiles setup_modulesoss turbogearss sogettext((s7build\bdist.win32\egg\turbogears\i18n\tests\__init__.pys?s    PKs6@t/)/)!turbogears/identity/conditions.pyimport cherrypy import socket import struct import threading import types import turbogears from turbogears.identity.exceptions import * from turbogears.identity import * from turbogears.decorator import weak_signature_decorator class Predicate(object): ''' Generic base class for testing true or false for a condition. ''' def eval_with_object( self, obj, errors=None ): ''' Determine whether the predicate is True or False for the given object. ''' raise NotImplementedError def append_error_message( self, errors=None ): if errors is None: return errors.append( self.error_message % self.__dict__ ) class CompoundPredicate(Predicate): ''' A predicate composed of other predicates. ''' def __init__(self, *predicates): self.predicates= predicates class All(CompoundPredicate): ''' A compound predicate that evaluates to true only if all sub-predicates evaluate to true for the given input. ''' def eval_with_object( self, obj, errors=None ): ''' Return true if all sub-predicates evaluate to true. ''' for p in self.predicates: if not p.eval_with_object( obj, errors ): return False return True class Any(CompoundPredicate): ''' A compound predicate that evaluates to true if any one of its sub-predicates evaluates to true. ''' error_message= "No predicates were able to grant access" def eval_with_object( self, obj, errors=None ): ''' Return true if any sub-predicate evaluates to true. ''' for p in self.predicates: if p.eval_with_object( obj, None ): return True self.append_error_message( errors ) return False class IdentityPredicateHelper(object): ''' A mix-in helper class for Identity Predicates. ''' def __nonzero__(self): return self.eval_with_object( current ) class in_group(Predicate, IdentityPredicateHelper): ''' Predicate for requiring a group. ''' error_message= "Not member of group: %(group_name)s" def __init__(self, group_name): self.group_name= group_name def eval_with_object( self, identity, errors=None ): if self.group_name in identity.groups: return True self.append_error_message( errors ) return False class in_all_groups(All, IdentityPredicateHelper): ''' Predicate for requiring membership in a number of groups. ''' def __init__(self, *groups): group_predicates= [in_group(g) for g in groups] super(in_all_groups,self).__init__( *group_predicates ) class in_any_group(Any, IdentityPredicateHelper): ''' Predicate for requiring membership in at least one group ''' error_message= "Not member of any group: %(group_list)s" def __init__(self, *groups): self.group_list= ", ".join(groups) group_predicates= [in_group(g) for g in groups] super(in_any_group,self).__init__( *group_predicates ) class not_anonymous(Predicate, IdentityPredicateHelper): ''' Predicate for checking whether current visitor is anonymous. ''' error_message= "Anonymous access denied" def eval_with_object( self, identity, errors=None ): if current.anonymous: self.append_error_message( errors ) return False return True class has_permission(Predicate, IdentityPredicateHelper): ''' Predicate for checking whether the visitor has a particular permission. ''' error_message= "Permission denied: %(permission_name)s" def __init__(self, permission_name): self.permission_name= permission_name def eval_with_object(self, identity, errors=None): ''' Determine whether the visitor has the specified permission. ''' if self.permission_name in identity.permissions: return True self.append_error_message( errors ) return False class has_all_permissions(All, IdentityPredicateHelper): ''' Predicate for checking whether the visitor has all permissions. ''' def __init__(self, *permissions): permission_predicates= [has_permission(p) for p in permissions] super(has_all_permissions,self).__init__( *permission_predicates ) class has_any_permission(Any, IdentityPredicateHelper): ''' Predicate for checking whether the visitor has at least one permission. ''' error_message= "No matching permissions: %(permission_list)s" def __init__(self, *permissions): self.permission_list= ", ".join( permissions ) permission_predicates= [has_permission(p) for p in permissions] super(has_any_permission,self).__init__( *permission_predicates ) def _remoteHost(): try: ips= cherrypy.request.headers.get( "X-Forwarded-For", cherrypy.request.remote_host ) return ips.split(",")[-1].strip() except: return "" def _match_ip(cidr, ip): if not '/' in cidr: return cidr == ip else: try: b,m = cidr.split('/') shift = 32 - int(m) a1 = struct.unpack('!L', socket.inet_aton(b))[0] >> shift a2 = struct.unpack('!L', socket.inet_aton(ip))[0] >> shift return a1 == a2 except: return False class from_host(Predicate, IdentityPredicateHelper): ''' Predicate for checking whether the visitor's host is an allowed host. Note: We never want to announce what the list of allowed hosts is, because it is way too easy to spoof an IP address in a TCP/IP packet. ''' error_message= "Access from this host is not permitted." def __init__(self, host): self.host= host def eval_with_object( self, obj, errors=None ): ''' Match the visitor's host against the criteria. ''' ip = _remoteHost() if _match_ip( self.host, ip ): return True self.append_error_message( errors ) return False class from_any_host(Any, IdentityPredicateHelper): ''' Predicate for checking whether the visitor's host is one of a number of permitted hosts. ''' error_message= "Access from this host is not permitted." def __init__(self, hosts): host_predicates= [from_host(h) for h in hosts] super(from_any_host,self).__init__( *host_predicates ) def require(predicate, obj=None): ''' Function decorator that checks whether the current user is a member of the groups specified and has the permissions required. ''' def entangle(fn): def require(func, self, *args, **kwargs): try: errors= [] if predicate is None or \ predicate.eval_with_object(current, errors): return fn(self, *args, **kwargs) except IdentityException, e: errors= [str(e)] raise IdentityFailure(errors) fn._require= predicate return require return weak_signature_decorator(entangle) def _secureResourceDecorator( fn ): ''' A decorator function used by the SecureResourceMeta metaclass. ''' def _wrapper( self, *args, **kwargs ): predicate= getattr( self.__class__, "require", None ) try: errors= [] if predicate is None or \ predicate.eval_with_object( current, errors ): return fn( self, *args, **kwargs ) except IdentityException, e: errors= [str(e)] raise IdentityFailure( errors ) try: _wrapper.func_name= fn.func_name except TypeError: pass if hasattr( fn, "exposed" ): _wrapper.exposed= fn.exposed return _wrapper def _check_method( obj, fn, predicate ): def _wrapper( *args, **kw ): errors= [] if predicate.eval_with_object( current, errors ): return fn( *args, **kw ) else: raise IdentityFailure( errors ) _wrapper.exposed= True return _wrapper class SecureResource(object): def __getattribute__( self, name ): from turbogears import controllers if name[:3]=="_cp" or name in ["require"]: return object.__getattribute__(self,name) try: value= object.__getattribute__(self,name) try: predicate= object.__getattribute__(self,"require") except AttributeError: predicate= turbogears.config.get( "identity.require", None ) if predicate is None: raise AttributeError("SecureResource requires a require " "attribute either on the controller class " "itself or in the config file") errors= [] if (isinstance( value, types.MethodType ) and hasattr( value, "exposed" )): return _check_method( self, value, predicate ) if isinstance( value, controllers.Controller ): return SecureObject( value, predicate ) # Some other property return value except IdentityException, e: errors= [str(e)] raise IdentityFailure( errors ) class SecureObject(object): def __init__( self, obj, require, exclude=[]): self._exclude = exclude self._object= obj self._require= require def __getattribute__( self, name ): from turbogears import controllers if name[:3]=="_cp" or name in ["_object","_require","_exclude"]: return object.__getattribute__(self,name) try: obj= object.__getattribute__( self, "_object" ) value= getattr( obj, name ) errors= [] predicate= object.__getattribute__(self,"_require") if name in object.__getattribute__(self, "_exclude"): return value if (isinstance( value, types.MethodType ) and hasattr( value, "exposed" )): return _check_method( obj, value, predicate ) if isinstance( value, controllers.Controller ): return SecureObject( value, predicate ) # Some other property return value except IdentityException, e: errors= [str(e)] raise IdentityFailure( errors ) PKh6E.i4L4L"turbogears/identity/conditions.pyc; *Fc@sdkZdkZdkZdkZdkZdkZdkTdkTdkl Z de fdYZ de fdYZ de fdYZ d e fd YZd e fd YZd e efdYZde efdYZdeefdYZde efdYZde efdYZde efdYZdeefdYZdZdZde efdYZdeefd YZed!Zd"Zd#Zd$e fd%YZd&e fd'YZ dS((N(s*(sweak_signature_decorators PredicatecBs&tZdZedZedZRS(sG Generic base class for testing true or false for a condition. cCs tdS(sX Determine whether the predicate is True or False for the given object. N(sNotImplementedError(sselfsobjserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectscCs0|tjodSn|i|i|idS(N(serrorssNonesappendsselfs error_messages__dict__(sselfserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pysappend_error_messages (s__name__s __module__s__doc__sNoneseval_with_objectsappend_error_message(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys Predicate s  sCompoundPredicatecBstZdZdZRS(s3 A predicate composed of other predicates. cGs ||_dS(N(s predicatessself(sselfs predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s(s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysCompoundPredicates sAllcBstZdZedZRS(sz A compound predicate that evaluates to true only if all sub-predicates evaluate to true for the given input. cCs8x-|iD]"}|i|| otSq q WtSdS(sE Return true if all sub-predicates evaluate to true. N(sselfs predicatesspseval_with_objectsobjserrorssFalsesTrue(sselfsobjserrorssp((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_object(s   (s__name__s __module__s__doc__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysAll#s sAnycBs tZdZdZedZRS(sm A compound predicate that evaluates to true if any one of its sub-predicates evaluates to true. s'No predicates were able to grant accesscCsDx,|iD]!}|i|totSq q W|i|t SdS(sE Return true if any sub-predicate evaluates to true. N( sselfs predicatesspseval_with_objectsobjsNonesTruesappend_error_messageserrorssFalse(sselfsobjserrorssp((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_object9s   (s__name__s __module__s__doc__s error_messagesNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysAny2s sIdentityPredicateHelpercBstZdZdZRS(s8 A mix-in helper class for Identity Predicates. cCs|itSdS(N(sselfseval_with_objectscurrent(sself((s7build\bdist.win32\egg\turbogears\identity\conditions.pys __nonzero__Hs(s__name__s __module__s__doc__s __nonzero__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysIdentityPredicateHelperDs sin_groupcBs)tZdZdZdZedZRS(s* Predicate for requiring a group. s#Not member of group: %(group_name)scCs ||_dS(N(s group_namesself(sselfs group_name((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__RscCs0|i|ijotSn|i|tSdS(N(sselfs group_namesidentitysgroupssTruesappend_error_messageserrorssFalse(sselfsidentityserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectUs (s__name__s __module__s__doc__s error_messages__init__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysin_groupLs  s in_all_groupscBstZdZdZRS(sC Predicate for requiring membership in a number of groups. cGsGgi}|D]}|t|q~}tt|i |dS(N( sappends_[1]sgroupssgsin_groupsgroup_predicatesssupers in_all_groupssselfs__init__(sselfsgroupssgs_[1]sgroup_predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__`s-(s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys in_all_groups\s s in_any_groupcBstZdZdZdZRS(sB Predicate for requiring membership in at least one group s'Not member of any group: %(group_list)scGsYdi||_gi}|D]}|t|q ~}t t |i |dS(Ns, ( sjoinsgroupssselfs group_listsappends_[1]sgsin_groupsgroup_predicatesssupers in_any_groups__init__(sselfsgroupssgs_[1]sgroup_predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__ks-(s__name__s __module__s__doc__s error_messages__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys in_any_groupes s not_anonymouscBs tZdZdZedZRS(sF Predicate for checking whether current visitor is anonymous. sAnonymous access deniedcCs'tio|i|tSntSdS(N(scurrents anonymoussselfsappend_error_messageserrorssFalsesTrue(sselfsidentityserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objectws  (s__name__s __module__s__doc__s error_messagesNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys not_anonymousqs shas_permissioncBs)tZdZdZdZedZRS(sQ Predicate for checking whether the visitor has a particular permission. s&Permission denied: %(permission_name)scCs ||_dS(N(spermission_namesself(sselfspermission_name((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__scCs0|i|ijotSn|i|tSdS(sM Determine whether the visitor has the specified permission. N(sselfspermission_namesidentitys permissionssTruesappend_error_messageserrorssFalse(sselfsidentityserrors((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objects  (s__name__s __module__s__doc__s error_messages__init__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pyshas_permission~s  shas_all_permissionscBstZdZdZRS(sI Predicate for checking whether the visitor has all permissions. cGsGgi}|D]}|t|q~}tt|i |dS(N( sappends_[1]s permissionsspshas_permissionspermission_predicatesssupershas_all_permissionssselfs__init__(sselfs permissionsspermission_predicatess_[1]sp((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s-(s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pyshas_all_permissionss shas_any_permissioncBstZdZdZdZRS(sQ Predicate for checking whether the visitor has at least one permission. s,No matching permissions: %(permission_list)scGsYdi||_gi}|D]}|t|q ~}t t |i |dS(Ns, ( sjoins permissionssselfspermission_listsappends_[1]spshas_permissionspermission_predicatesssupershas_any_permissions__init__(sselfs permissionsspermission_predicatess_[1]sp((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s-(s__name__s __module__s__doc__s error_messages__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pyshas_any_permissions cCsKy9tiiidtii}|iddiSWn dSnXdS(NsX-Forwarded-Fors,is(scherrypysrequestsheaderssgets remote_hostsipsssplitsstrip(sips((s7build\bdist.win32\egg\turbogears\identity\conditions.pys _remoteHosts cCsd|j o||jSnyy|id\}}dt|}tidt i |d|?}tidt i |d|?}||jSWn t SnXdS(Ns/i s!Li(scidrsipssplitsbsmsintsshiftsstructsunpackssockets inet_atonsa1sa2sFalse(scidrsipsbsmsa1sa2sshift((s7build\bdist.win32\egg\turbogears\identity\conditions.pys _match_ips##s from_hostcBs)tZdZdZdZedZRS(s Predicate for checking whether the visitor's host is an allowed host. Note: We never want to announce what the list of allowed hosts is, because it is way too easy to spoof an IP address in a TCP/IP packet. s'Access from this host is not permitted.cCs ||_dS(N(shostsself(sselfshost((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__scCs9t}t|i|otSn|i|tSdS(s@ Match the visitor's host against the criteria. N( s _remoteHostsips _match_ipsselfshostsTruesappend_error_messageserrorssFalse(sselfsobjserrorssip((s7build\bdist.win32\egg\turbogears\identity\conditions.pyseval_with_objects   (s__name__s __module__s__doc__s error_messages__init__sNoneseval_with_object(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys from_hosts  s from_any_hostcBstZdZdZdZRS(sf Predicate for checking whether the visitor's host is one of a number of permitted hosts. s'Access from this host is not permitted.cCsGgi}|D]}|t|q~}tt|i |dS(N( sappends_[1]shostsshs from_hostshost_predicatesssupers from_any_hostsselfs__init__(sselfshostss_[1]shshost_predicates((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__s-(s__name__s __module__s__doc__s error_messages__init__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys from_any_hosts csd}t|SdS(s Function decorator that checks whether the current user is a member of the groups specified and has the permissions required. cs d}_|SdS(Ncsuy>g}tjpit|o|||SnWn$t j o}t |g}nXt |dS(N( serrorss predicatesNoneseval_with_objectscurrentsfnsselfsargsskwargssIdentityExceptionsesstrsIdentityFailure(sfuncsselfsargsskwargsserrorsse(s predicatesfn(s7build\bdist.win32\egg\turbogears\identity\conditions.pysrequires (srequires predicatesfns_require(sfnsrequire(s predicate(sfns7build\bdist.win32\egg\turbogears\identity\conditions.pysentangles N(sentanglesweak_signature_decorator(s predicatesobjsentangle((s predicates7build\bdist.win32\egg\turbogears\identity\conditions.pysrequires csZd}yi|_Wntj onXtdoi|_n|SdS(sH A decorator function used by the SecureResourceMeta metaclass. cst|idt}y>g}|tjp|it|o|||SnWn$t j o}t |g}nXt|dS(Nsrequire(sgetattrsselfs __class__sNones predicateserrorsseval_with_objectscurrentsfnsargsskwargssIdentityExceptionsesstrsIdentityFailure(sselfsargsskwargss predicateserrorsse(sfn(s7build\bdist.win32\egg\turbogears\identity\conditions.pys_wrappers sexposedN(s_wrappersfns func_names TypeErrorshasattrsexposed(sfns_wrapper((sfns7build\bdist.win32\egg\turbogears\identity\conditions.pys_secureResourceDecorators cs d}t|_|SdS(Ncs:g}it|o||Sn t|dS(N(serrorss predicateseval_with_objectscurrentsfnsargsskwsIdentityFailure(sargsskwserrors(s predicatesfn(s7build\bdist.win32\egg\turbogears\identity\conditions.pys_wrappers(s_wrappersTruesexposed(sobjsfns predicates_wrapper((sfns predicates7build\bdist.win32\egg\turbogears\identity\conditions.pys _check_methods sSecureResourcecBstZdZRS(NcCsRdkl}|d djp |dgjoti||Snyti||}yti|d}Wn(tj oti i dt }nX|t jotdng}t |tio t|dot|||Snt ||iot||Sn|SWn$tj o}t|g}nXt|dS(N(s controllersis_cpsrequiresidentity.requiresgSecureResource requires a require attribute either on the controller class itself or in the config filesexposed(s turbogearss controllerssnamesobjects__getattribute__sselfsvalues predicatesAttributeErrorsconfigsgetsNoneserrorss isinstancestypess MethodTypeshasattrs _check_methods Controllers SecureObjectsIdentityExceptionsesstrsIdentityFailure(sselfsnames predicateserrorssvalues controllersse((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__getattribute__s( ! #(s__name__s __module__s__getattribute__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pysSecureResourcess SecureObjectcBstZgdZdZRS(NcCs||_||_||_dS(N(sexcludesselfs_excludesobjs_objectsrequires_require(sselfsobjsrequiresexclude((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__init__:s  cCs<dkl}|d djp|dddgjoti||Snyti|d}t||}g}ti|d}|ti|djo|Snt |t i o t|dot|||Snt ||iot||Sn|SWn$tj o}t|g}nXt|dS(N(s controllersis_cps_objects_requires_excludesexposed(s turbogearss controllerssnamesobjects__getattribute__sselfsobjsgetattrsvalueserrorss predicates isinstancestypess MethodTypeshasattrs _check_methods Controllers SecureObjectsIdentityExceptionsesstrsIdentityFailure(sselfsnames predicateserrorssobjsvalues controllersse((s7build\bdist.win32\egg\turbogears\identity\conditions.pys__getattribute__?s$ '#(s__name__s __module__s__init__s__getattribute__(((s7build\bdist.win32\egg\turbogears\identity\conditions.pys SecureObject9s (!scherrypyssocketsstructs threadingstypess turbogearssturbogears.identity.exceptionssturbogears.identitysturbogears.decoratorsweak_signature_decoratorsobjects PredicatesCompoundPredicatesAllsAnysIdentityPredicateHelpersin_groups in_all_groupss in_any_groups not_anonymousshas_permissionshas_all_permissionsshas_any_permissions _remoteHosts _match_ips from_hosts from_any_hostsNonesrequires_secureResourceDecorators _check_methodsSecureResources SecureObject(s turbogearss _remoteHostsSecureResourceshas_any_permissions_secureResourceDecorators Predicatescherrypys _match_ips in_any_groups not_anonymouss SecureObjects in_all_groupsshas_all_permissionssin_groups from_any_hosts _check_methodstypessstructsweak_signature_decoratorsAllssocketsrequires threadingsCompoundPredicates from_hostshas_permissionsAnysIdentityPredicateHelper((s7build\bdist.win32\egg\turbogears\identity\conditions.pys?s:               PKP6R?T!turbogears/identity/exceptions.pyimport cherrypy import turbogears def set_identity_errors( errors ): if isinstance( errors, basestring ): errors= [errors]; cherrypy.request.identity_errors= list(errors) def get_identity_errors(): return getattr( cherrypy.request, "identity_errors", [] ) class IdentityException(Exception): ''' Base class for all Identity exceptions. ''' pass class RequestRequiredException(IdentityException): ''' An attempt was made to use a facility of Identity that requires the presence of an HTTP request. ''' def __str__(self): return "An attempt was made to use a facility of the TurboGears " \ "Identity Management framework that relies on an HTTP request "\ "outside of a request." class IdentityManagementNotEnabledException(IdentityException): """ User forgot to enable Identity management """ def __str__(self): return "An attempt was made to use a facility of the TurboGears " \ "Identity Management framework but identity management hasn't " \ "been enabled in the config file [via identity.on]." class IdentityConfigurationException(IdentityException): ''' Exception thrown when the Identity management system hasn't been configured correctly. Mostly, when failure_url is not specified. ''' args = () def __init__(self, message): self.message= message def __str__(self): return self.message class IdentityFailure(cherrypy.InternalRedirect, IdentityException): ''' Exception thrown when an access control check fails. ''' def __init__(self, errors): ''' Set up the identity errors on the request and get the URL from the config ''' set_identity_errors( errors ) url= turbogears.config.get( "identity.failure_url", None ) if url is None: msg= "Missing URL for identity failure" raise IdentityConfigurationException( msg ) if callable(url): url= url( errors ) # super(IdentityFailure,self).__init__(url) seems to not work...? cherrypy.InternalRedirect.__init__(self, url) PKh6^99"turbogears/identity/exceptions.pyc; FEc@sdkZdkZdZdZdefdYZdefdYZdefdYZd efd YZd ei efd YZ dS( NcCs3t|to |g}nt|ti_dS(N(s isinstanceserrorss basestringslistscherrypysrequestsidentity_errors(serrors((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysset_identity_errorss cCsttidgSdS(Nsidentity_errors(sgetattrscherrypysrequest(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysget_identity_errors ssIdentityExceptioncBstZdZRS(s1 Base class for all Identity exceptions. (s__name__s __module__s__doc__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysIdentityException s sRequestRequiredExceptioncBstZdZdZRS(sn An attempt was made to use a facility of Identity that requires the presence of an HTTP request. cCsdSdS(NsAn attempt was made to use a facility of the TurboGears Identity Management framework that relies on an HTTP request outside of a request.((sself((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__str__s(s__name__s __module__s__doc__s__str__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysRequestRequiredExceptions s%IdentityManagementNotEnabledExceptioncBstZdZdZRS(s+ User forgot to enable Identity management cCsdSdS(NsAn attempt was made to use a facility of the TurboGears Identity Management framework but identity management hasn't been enabled in the config file [via identity.on].((sself((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__str__"s(s__name__s __module__s__doc__s__str__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys%IdentityManagementNotEnabledExceptions sIdentityConfigurationExceptioncBs&tZdZfZdZdZRS(s Exception thrown when the Identity management system hasn't been configured correctly. Mostly, when failure_url is not specified. cCs ||_dS(N(smessagesself(sselfsmessage((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__init__.scCs |iSdS(N(sselfsmessage(sself((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__str__1s(s__name__s __module__s__doc__sargss__init__s__str__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysIdentityConfigurationException(s  sIdentityFailurecBstZdZdZRS(s> Exception thrown when an access control check fails. cCsvt|tiidt}|tjod}t|nt |o||}nt i i ||dS(s[ Set up the identity errors on the request and get the URL from the config sidentity.failure_urls Missing URL for identity failureN(sset_identity_errorsserrorss turbogearssconfigsgetsNonesurlsmsgsIdentityConfigurationExceptionscallablescherrypysInternalRedirects__init__sself(sselfserrorssurlsmsg((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys__init__8s   (s__name__s __module__s__doc__s__init__(((s7build\bdist.win32\egg\turbogears\identity\exceptions.pysIdentityFailure4s ( scherrypys turbogearssset_identity_errorssget_identity_errorss ExceptionsIdentityExceptionsRequestRequiredExceptions%IdentityManagementNotEnabledExceptionsIdentityConfigurationExceptionsInternalRedirectsIdentityFailure( sset_identity_errorsscherrypys turbogearssRequestRequiredExceptions%IdentityManagementNotEnabledExceptionsIdentityExceptionsIdentityFailuresget_identity_errorssIdentityConfigurationException((s7build\bdist.win32\egg\turbogears\identity\exceptions.pys?s       PKs6kII!turbogears/identity/saprovider.pyimport cherrypy import random from datetime import * import turbogears from turbogears import identity from turbogears.util import load_class from turbogears.database import session from turbojson.jsonify import * import logging log = logging.getLogger("turbogears.identity.saprovider") try: set, frozenset except NameError: from sets import Set as set, ImmutableSet as frozenset # Global class references -- # these will be set when the Provider is initialised. user_class = None group_class = None permission_class = None visit_class = None class SqlAlchemyIdentity(object): def __init__(self, visit_key, user=None): if user: self._user = user self.visit_key = visit_key def _get_user(self): try: return self._user except AttributeError: # User hasn't already been set pass # Attempt to load the user. After this code executes, there *WILL* be # a _user attribute, even if the value is None. visit = session.query(visit_class).get_by(visit_key = self.visit_key) if not visit: self._user = None return None self._user = session.query(user_class).get(visit.user_id) return self._user user = property(_get_user) def _get_user_name(self): if not self.user: return None return self.user.user_name user_name = property(_get_user_name) def _get_anonymous(self): return not self.user anonymous = property(_get_anonymous) def _get_permissions(self): try: return self._permissions except AttributeError: # Permissions haven't been computed yet pass if not self.user: self._permissions = frozenset() else: self._permissions = frozenset([ p.permission_name for p in self.user.permissions]) return self._permissions permissions = property(_get_permissions) def _get_groups(self): try: return self._groups except AttributeError: # Groups haven't been computed yet pass if not self.user: self._groups = frozenset() else: self._groups = frozenset([g.group_name for g in self.user.groups]) return self._groups groups = property(_get_groups) def logout(self): ''' Remove the link between this identity and the visit. ''' if not self.visit_key: return try: visit = session.query(visit_class).get_by(visit_key=self.visit_key) session.delete(visit) # Clear the current identity anon = SqlAlchemyIdentity(None,None) identity.set_current_identity(anon) except: pass else: session.flush() class SqlAlchemyIdentityProvider(object): ''' IdentityProvider that uses a model from a database (via SQLAlchemy). ''' def __init__(self): super(SqlAlchemyIdentityProvider, self).__init__() get=turbogears.config.get global user_class, group_class, permission_class, visit_class user_class_path = get("identity.saprovider.model.user", None) user_class = load_class(user_class_path) group_class_path = get("identity.saprovider.model.group", None) group_class = load_class(group_class_path) permission_class_path = get("identity.saprovider.model.permission", None) permission_class = load_class(permission_class_path) visit_class_path = get("identity.saprovider.model.visit", None) log.info("Loading: %s", visit_class_path) visit_class = load_class(visit_class_path) # Default encryption algorithm is to use plain text passwords algorithm = get("identity.saprovider.encryption_algorithm", None) self.encrypt_password = lambda pw: \ identity._encrypt_password(algorithm, pw) def create_provider_model(self): ''' Create the database tables if they don't already exist. ''' user_class.mapper.local_table.create(checkfirst=True) group_class.mapper.local_table.create(checkfirst=True) permission_class.mapper.local_table.create(checkfirst=True) visit_class.mapper.local_table.create(checkfirst=True) def validate_identity(self, user_name, password, visit_key): ''' Look up the identity represented by user_name and determine whether the password is correct. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs ''' user = session.query(user_class).get_by(user_name=user_name) if not user: log.warning("No such user: %s", user_name) return None if not self.validate_password(user, user_name, password): log.info("Passwords don't match for user: %s", user_name) return None log.info("associating user (%s) with visit (%s)", user.user_name, visit_key) # Link the user to the visit link = session.query(visit_class).get_by(visit_key=visit_key) if not link: link = visit_class(visit_key=visit_key, user_id=user.user_id) session.save(link) else: link.user_id = user.user_id session.flush() return SqlAlchemyIdentity(visit_key, user) def validate_password(self, user, user_name, password): ''' Check the supplied user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlAlchemyIdentityProvider, but want to check the passwords against an external source (i.e. PAM, LDAP, Windows domain, etc), subclass SqlAlchemyIdentityProvider, and override this method. ''' return user.password == self.encrypt_password(password) def load_identity(self, visit_key): ''' Lookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs ''' return SqlAlchemyIdentity(visit_key) def anonymous_identity(self): ''' Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs ''' return SqlAlchemyIdentity(None) def authenticated_identity(self, user): ''' Constructs Identity object for user that has no associated visit_key. ''' return SqlAlchemyIdentity(None, user) PKh6K➓&&"turbogears/identity/saprovider.pyc; *Fc@sdkZdkZdkTdkZdklZdklZdklZdk Tdk Z e i dZ ye efWn&ej odklZ lZnXeaeaeaeadefdYZd efd YZdS( N(s*(sidentity(s load_class(ssessionsturbogears.identity.saprovider(sSets ImmutableSetsSqlAlchemyIdentitycBstZedZdZeeZdZeeZdZ ee Z dZ ee Z dZ ee ZdZRS(NcCs!|o ||_n||_dS(N(susersselfs_users visit_key(sselfs visit_keysuser((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys__init__s cCsy |iSWntj onXtitid|i}| ot |_t Sntit i |i |_|iSdS(Ns visit_key( sselfs_usersAttributeErrorssessionsquerys visit_classsget_bys visit_keysvisitsNones user_classsgetsuser_id(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys _get_user!s  cCs!|i otSn|iiSdS(N(sselfsusersNones user_name(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_user_name1s cCs |i SdS(N(sselfsuser(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_anonymous7scCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(N( sselfs _permissionssAttributeErrorsusers frozensetsappends_[1]s permissionsspspermission_name(sselfs_[1]sp((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys_get_permissions;s  9cCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(N( sselfs_groupssAttributeErrorsusers frozensetsappends_[1]sgroupssgs group_name(sselfs_[1]sg((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys _get_groupsIs  9cCsv|i odSnyKtitid|i}ti|tt t }t i |Wnn Xti dS(sF Remove the link between this identity and the visit. Ns visit_key(sselfs visit_keyssessionsquerys visit_classsget_bysvisitsdeletesSqlAlchemyIdentitysNonesanonsidentitysset_current_identitysflush(sselfsvisitsanon((s7build\bdist.win32\egg\turbogears\identity\saprovider.pyslogoutVs  (s__name__s __module__sNones__init__s _get_userspropertysusers_get_user_names user_names_get_anonymouss anonymouss_get_permissionss permissionss _get_groupssgroupsslogout(((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysSqlAlchemyIdentitys         sSqlAlchemyIdentityProvidercBsMtZdZdZdZdZdZdZdZdZ RS(sN IdentityProvider that uses a model from a database (via SQLAlchemy). cstt|itii}|dt}t |a |dt}t |a |dt}t |a|dt}tid|t |a|dtd|_dS(Nsidentity.saprovider.model.usersidentity.saprovider.model.groups$identity.saprovider.model.permissionsidentity.saprovider.model.visits Loading: %ss(identity.saprovider.encryption_algorithmcsti|S(N(sidentitys_encrypt_passwords algorithmspw(spw(s algorithm(s7build\bdist.win32\egg\turbogears\identity\saprovider.pyss(ssupersSqlAlchemyIdentityProvidersselfs__init__s turbogearssconfigsgetsNonesuser_class_paths load_classs user_classsgroup_class_paths group_classspermission_class_pathspermission_classsvisit_class_pathslogsinfos visit_classs algorithmsencrypt_password(sselfsgetsvisit_class_pathsgroup_class_paths algorithmsuser_class_pathspermission_class_path((s algorithms7build\bdist.win32\egg\turbogears\identity\saprovider.pys__init__ms$         cCs\tiiidttiiidttiiidttiiidtdS(sI Create the database tables if they don't already exist. s checkfirstN(s user_classsmappers local_tablescreatesTrues group_classspermission_classs visit_class(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pyscreate_provider_models cCstitid|}| otid|tSn|i ||| oti d|tSnti d|i|titid|}| o)td|d|i}ti|n |i|_tit||SdS(s Look up the identity represented by user_name and determine whether the password is correct. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs s user_namesNo such user: %ss"Passwords don't match for user: %ss%associating user (%s) with visit (%s)s visit_keysuser_idN(ssessionsquerys user_classsget_bys user_namesuserslogswarningsNonesselfsvalidate_passwordspasswordsinfos visit_keys visit_classslinksuser_idssavesflushsSqlAlchemyIdentity(sselfs user_namespasswords visit_keyslinksuser((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysvalidate_identitys"   cCs|i|i|jSdS(s Check the supplied user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlAlchemyIdentityProvider, but want to check the passwords against an external source (i.e. PAM, LDAP, Windows domain, etc), subclass SqlAlchemyIdentityProvider, and override this method. N(suserspasswordsselfsencrypt_password(sselfsusers user_namespassword((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysvalidate_passwordscCst|SdS(s Lookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs N(sSqlAlchemyIdentitys visit_key(sselfs visit_key((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys load_identitys cCsttSdS(s  Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs N(sSqlAlchemyIdentitysNone(sself((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysanonymous_identityscCstt|SdS(sW Constructs Identity object for user that has no associated visit_key. N(sSqlAlchemyIdentitysNonesuser(sselfsuser((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysauthenticated_identitys( s__name__s __module__s__doc__s__init__screate_provider_modelsvalidate_identitysvalidate_passwords load_identitysanonymous_identitysauthenticated_identity(((s7build\bdist.win32\egg\turbogears\identity\saprovider.pysSqlAlchemyIdentityProviderhs   (scherrypysrandomsdatetimes turbogearssidentitysturbogears.utils load_classsturbogears.databasessessionsturbojson.jsonifysloggings getLoggerslogssets frozensets NameErrorssetssSets ImmutableSetsNones user_classs group_classspermission_classs visit_classsobjectsSqlAlchemyIdentitysSqlAlchemyIdentityProvider( s load_classsloggingscherrypys turbogearssrandomsSqlAlchemyIdentityProviderssessions frozensetsSqlAlchemyIdentityssetsidentityslog((s7build\bdist.win32\egg\turbogears\identity\saprovider.pys?s&       NPKs6Ё::!turbogears/identity/soprovider.pyimport random from turbojson.jsonify import jsonify_sqlobject, jsonify from sqlobject import * from sqlobject.inheritance import InheritableSQLObject import logging log = logging.getLogger("turbogears.identity.soprovider") from datetime import * import turbogears from turbogears import identity from turbogears.database import PackageHub from turbogears.util import load_class import warnings hub = PackageHub("turbogears.identity") __connection__ = hub try: set, frozenset except NameError: from sets import Set as set, ImmutableSet as frozenset def to_db_encoding(s, encoding): if isinstance(s, str): pass elif hasattr(s, '__unicode__'): s = unicode(s) if isinstance(s, unicode): s = s.encode(encoding) return s class DeprecatedAttr(object): def __init__(self, old_name, new_name): self.old_name= old_name self.new_name= new_name def __get__(self, obj, type=None): warnings.warn( "%s has been deprecated in favour of %s" % (self.old_name, self.new_name), DeprecationWarning ) return getattr( obj, self.new_name ) def __set__(self, obj, value): warnings.warn( "%s has been deprecated in favour of %s" % (self.old_name, self.new_name), DeprecationWarning ) return setattr( obj, self.new_name, value ) # Global class references -- these will be set when the Provider is initialised. user_class= None group_class= None permission_class= None visit_class = None class SqlObjectIdentity(object): def __init__(self, visit_key, user=None): if user: self._user= user self.visit_key= visit_key def _get_user(self): try: return self._user except AttributeError: # User hasn't already been set pass # Attempt to load the user. After this code executes, there *WILL* be # a _user attribute, even if the value is None. try: visit= visit_class.by_visit_key( self.visit_key ) except SQLObjectNotFound: # The visit ID is invalid self._user= None return None try: self._user= user_class.get( visit.user_id ) return self._user except SQLObjectNotFound: log.warning( "No such user with ID: %s", visit.user_id ) self._user= None return None user= property(_get_user) def _get_user_name(self): if not self.user: return None return self.user.user_name user_name= property(_get_user_name) def _get_anonymous(self): return not self.user anonymous= property(_get_anonymous) def _get_permissions(self): try: return self._permissions except AttributeError: # Permissions haven't been computed yet pass if not self.user: self._permissions= frozenset() else: self._permissions= frozenset([p.permission_name for p in self.user.permissions]) return self._permissions permissions= property(_get_permissions) def _get_groups(self): try: return self._groups except AttributeError: # Groups haven't been computed yet pass if not self.user: self._groups= frozenset() else: self._groups= frozenset([g.group_name for g in self.user.groups]) return self._groups groups= property(_get_groups) def logout(self): ''' Remove the link between this identity and the visit. ''' try: if self.visit_key != None: visit= visit_class.by_visit_key(self.visit_key) visit.destroySelf() except SQLObjectNotFound: # If no visit exists in the database, we don't need to destroy it. pass # Clear the current identity anon= SqlObjectIdentity(None,None) #XXX if user is None anonymous will be true, no need to set attr. #anon.anonymous= True identity.set_current_identity( anon ) class SqlObjectIdentityProvider(object): ''' IdentityProvider that uses a model from a database (via SQLObject). ''' def __init__(self): super(SqlObjectIdentityProvider, self).__init__() get=turbogears.config.get global user_class, group_class, permission_class, visit_class user_class_path= get( "identity.soprovider.model.user", __name__ + ".TG_User" ) #log.debug('userclassp:%s'% user_class_path) #user_class_path = 'kronos.model.Person' user_class= load_class(user_class_path) if user_class: log.info("Succesfully loaded \"%s\"" % user_class_path) try: self.user_class_db_encoding= \ user_class.sqlmeta.columns['user_name'].dbEncoding except (KeyError, AttributeError): self.user_class_db_encoding= 'UTF-8' group_class_path= get( "identity.soprovider.model.group", __name__ + ".TG_Group" ) group_class= load_class(group_class_path) if group_class: log.info("Succesfully loaded \"%s\"" % group_class_path) permission_class_path= get( "identity.soprovider.model.permission", __name__ + ".TG_Permission" ) permission_class= load_class(permission_class_path) if permission_class: log.info("Succesfully loaded \"%s\"" % permission_class_path) visit_class_path= get( "identity.soprovider.model.visit", __name__ + ".TG_VisitIdentity" ) visit_class= load_class(visit_class_path) if visit_class: log.info("Succesfully loaded \"%s\"" % visit_class_path) # Default encryption algorithm is to use plain text passwords algorithm = get("identity.soprovider.encryption_algorithm", None) self.encrypt_password = lambda pw: \ identity._encrypt_password(algorithm, pw) def create_provider_model( self ): # create the database tables try: hub.begin() user_class.createTable(ifNotExists=True) group_class.createTable(ifNotExists=True) permission_class.createTable(ifNotExists=True) visit_class.createTable(ifNotExists=True) hub.commit() hub.end() except KeyError: log.warning( "No database is configured: SqlObjectIdentityProvider is disabled." ) return def validate_identity( self, user_name, password, visit_key ): ''' Look up the identity represented by user_name and determine whether the password is correct. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs ''' try: user_name= to_db_encoding( user_name, self.user_class_db_encoding ) user= user_class.by_user_name( user_name ) if not self.validate_password(user, user_name, password): log.info( "Passwords don't match for user: %s", user_name ) return None # Link the user to the visit try: link= visit_class.by_visit_key( visit_key ) link.user_id= user.id except SQLObjectNotFound: link= visit_class( visit_key=visit_key, user_id=user.id ) return SqlObjectIdentity( visit_key, user ) except SQLObjectNotFound: log.warning( "No such user: %s", user_name ) return None def validate_password(self, user, user_name, password): ''' Check the supplied user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlObjectIdentityProvider, but want to check the passwords against an external source (i.e. PAM, a password file, Windows domain), subclass SqlObjectIdentityProvider, and override this method. ''' return user.password == self.encrypt_password(password) def load_identity( self, visit_key ): ''' Lookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs ''' return SqlObjectIdentity( visit_key ) def anonymous_identity( self ): ''' Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs ''' return SqlObjectIdentity( None ) def authenticated_identity(self, user): ''' Constructs Identity object for user that has no associated visit_key. ''' return SqlObjectIdentity(None, user) class TG_VisitIdentity(SQLObject): class sqlmeta: table="tg_visit_identity" visit_key= StringCol( length=40, alternateID=True, alternateMethodName="by_visit_key" ) user_id= IntCol() class TG_Group(InheritableSQLObject): ''' An ultra-simple group definition. ''' class sqlmeta: table="tg_group" group_name= UnicodeCol( length=16, alternateID=True, alternateMethodName="by_group_name" ) display_name= UnicodeCol( length=255 ) created= DateTimeCol( default=datetime.now ) # Old names groupId= DeprecatedAttr( "groupId", "group_name" ) displayName= DeprecatedAttr( "displayName", "display_name" ) # collection of all users belonging to this group users= RelatedJoin( "TG_User", intermediateTable="tg_user_group", joinColumn="group_id", otherColumn="user_id" ) # collection of all permissions for this group permissions= RelatedJoin( "TG_Permission", joinColumn="group_id", intermediateTable="tg_group_permission", otherColumn="permission_id" ) def jsonify_group(obj): result = jsonify_sqlobject( obj ) result["users"]= [u.user_name for u in obj.users] result["permissions"]= [p.permission_name for p in obj.permissions] return result jsonify_group = jsonify.when('isinstance(obj, TG_Group)')(jsonify_group) class TG_User(InheritableSQLObject): ''' Reasonably basic User definition. Probably would want additional attributes. ''' class sqlmeta: table="tg_user" user_name= UnicodeCol( length=16, alternateID=True, alternateMethodName="by_user_name" ) email_address= UnicodeCol( length=255, alternateID=True, alternateMethodName="by_email_address" ) display_name= UnicodeCol( length=255 ) password= UnicodeCol( length=40 ) created= DateTimeCol( default=datetime.now ) # Old attribute names userId= DeprecatedAttr( "userId", "user_name" ) emailAddress= DeprecatedAttr( "emailAddress", "email_address" ) displayName= DeprecatedAttr( "displayName", "display_name" ) # groups this user belongs to groups= RelatedJoin( "TG_Group", intermediateTable="tg_user_group", joinColumn="user_id", otherColumn="group_id" ) def _get_permissions( self ): perms= set() for g in self.groups: perms= perms | set(g.permissions) return perms def _set_password( self, cleartext_password ): "Runs cleartext_password through the hash algorithm before saving." try: hash = identity.current_provider.encrypt_password(cleartext_password) except identity.exceptions.IdentityManagementNotEnabledException: # Creating identity provider just to encrypt password # (so we don't reimplement the encryption step). ip = SqlObjectIdentityProvider() hash = ip.encrypt_password(cleartext_password) if hash == cleartext_password: log.info("Identity provider not enabled, and no encryption algorithm " "specified in config. Setting password as plaintext.") self._SO_set_password(hash) def set_password_raw( self, password ): "Saves the password as-is to the database." self._SO_set_password(password) def jsonify_user(obj): result = jsonify_sqlobject( obj ) del result['password'] result["groups"]= [g.group_name for g in obj.groups] result["permissions"]= [p.permission_name for p in obj.permissions] return result jsonify_user = jsonify.when('isinstance(obj, TG_User)')(jsonify_user) class TG_Permission(InheritableSQLObject): class sqlmeta: table="tg_permission" permission_name= UnicodeCol( length=16, alternateID=True, alternateMethodName="by_permission_name" ) description= UnicodeCol( length=255 ) # Old attributes permissionId= DeprecatedAttr( "permissionId", "permission_name" ) groups= RelatedJoin( "TG_Group", intermediateTable="tg_group_permission", joinColumn="permission_id", otherColumn="group_id" ) def jsonify_permission(obj): result = jsonify_sqlobject( obj ) result["groups"]= [g.group_name for g in obj.groups] return result jsonify_permission = jsonify.when( 'isinstance(obj, TG_Permission)')(jsonify_permission) def encrypt_password(cleartext_password): try: hash = identity.current_provider.\ encrypt_password(cleartext_password) except identity.exceptions.RequestRequiredException: # Creating identity provider just to encrypt password # (so we don't reimplement the encryption step). ip = SqlObjectIdentityProvider() hash = ip.encrypt_password(cleartext_password) if hash == cleartext_password: log.info("Identity provider not enabled, and no encryption " "algorithm " "specified in config. Setting password as plaintext.") return hash PKh6}$OO"turbogears/identity/soprovider.pyc; *Fc@sdkZdklZlZdkTdklZdkZeidZ dk Tdk Z dk l Z dk lZdklZdkZedZeZyeefWn&ej od klZlZnXd Zd efd YZeaeaea ea!d efdYZ"defdYZ#de$fdYZ%defdYZ&dZ'ei(de'Z'defdYZ)dZ*ei(de*Z*defdYZ+dZ,ei(de,Z,dZ-dS( N(sjsonify_sqlobjectsjsonify(s*(sInheritableSQLObjectsturbogears.identity.soprovider(sidentity(s PackageHub(s load_classsturbogears.identity(sSets ImmutableSetcCs_t|ton!t|dot|}nt|to|i|}n|SdS(Ns __unicode__(s isinstancesssstrshasattrsunicodesencodesencoding(sssencoding((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysto_db_encodingssDeprecatedAttrcBs&tZdZedZdZRS(NcCs||_||_dS(N(sold_namesselfsnew_name(sselfsold_namesnew_name((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__init__&s cCs4tid|i|iftt||iSdS(Ns&%s has been deprecated in favour of %s(swarningsswarnsselfsold_namesnew_namesDeprecationWarningsgetattrsobj(sselfsobjstype((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__get__*scCs7tid|i|iftt||i|SdS(Ns&%s has been deprecated in favour of %s( swarningsswarnsselfsold_namesnew_namesDeprecationWarningssetattrsobjsvalue(sselfsobjsvalue((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__set__/s(s__name__s __module__s__init__sNones__get__s__set__(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysDeprecatedAttr%s  sSqlObjectIdentitycBstZedZdZeeZdZeeZdZ ee Z dZ ee Z dZ ee ZdZRS(NcCs!|o ||_n||_dS(N(susersselfs_users visit_key(sselfs visit_keysuser((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys__init__<s cCsy |iSWntj onXyti|i}Wn tj ot|_tSnXy t i |i |_|iSWn3tj o't i d|i t|_tSnXdS(NsNo such user with ID: %s(sselfs_usersAttributeErrors visit_classs by_visit_keys visit_keysvisitsSQLObjectNotFoundsNones user_classsgetsuser_idslogswarning(sselfsvisit((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys _get_userAs      cCs!|i otSn|iiSdS(N(sselfsusersNones user_name(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_user_nameXs cCs |i SdS(N(sselfsuser(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_anonymous^scCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(N( sselfs _permissionssAttributeErrorsusers frozensetsappends_[1]s permissionsspspermission_name(sselfs_[1]sp((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys_get_permissionsbs  9cCsy |iSWntj onX|i ot|_n:tgi}|iiD]}||i qS~|_|iSdS(N( sselfs_groupssAttributeErrorsusers frozensetsappends_[1]sgroupssgs group_name(sselfs_[1]sg((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys _get_groupsos  9cCsjy4|itjo ti|i}|inWntj onXttt}t i |dS(sF Remove the link between this identity and the visit. N( sselfs visit_keysNones visit_classs by_visit_keysvisits destroySelfsSQLObjectNotFoundsSqlObjectIdentitysanonsidentitysset_current_identity(sselfsvisitsanon((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyslogout|s(s__name__s __module__sNones__init__s _get_userspropertysusers_get_user_names user_names_get_anonymouss anonymouss_get_permissionss permissionss _get_groupssgroupsslogout(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysSqlObjectIdentity;s         sSqlObjectIdentityProvidercBsMtZdZdZdZdZdZdZdZdZ RS(sM IdentityProvider that uses a model from a database (via SQLObject). csltt|itii}|dtd}t |a t ot i d|nyt i idi|_Wn"ttfj od|_nX|dtd}t |atot i d|n|dtd }t |atot i d|n|d td }t |atot i d|n|d td |_dS(Nsidentity.soprovider.model.users.TG_UsersSuccesfully loaded "%s"s user_namesUTF-8sidentity.soprovider.model.groups .TG_Groups$identity.soprovider.model.permissions.TG_Permissionsidentity.soprovider.model.visits.TG_VisitIdentitys(identity.soprovider.encryption_algorithmcsti|S(N(sidentitys_encrypt_passwords algorithmspw(spw(s algorithm(s7build\bdist.win32\egg\turbogears\identity\soprovider.pyss(ssupersSqlObjectIdentityProvidersselfs__init__s turbogearssconfigsgets__name__suser_class_paths load_classs user_classslogsinfossqlmetascolumnss dbEncodingsuser_class_db_encodingsKeyErrorsAttributeErrorsgroup_class_paths group_classspermission_class_pathspermission_classsvisit_class_paths visit_classsNones algorithmsencrypt_password(sselfsgetsvisit_class_pathsgroup_class_pathsuser_class_paths algorithmspermission_class_path((s algorithms7build\bdist.win32\egg\turbogears\identity\soprovider.pys__init__s:         cCsybtitidttidttidttidttiti Wn$t j ot i ddSnXdS(Ns ifNotExistssANo database is configured: SqlObjectIdentityProvider is disabled.( shubsbegins user_classs createTablesTrues group_classspermission_classs visit_classscommitsendsKeyErrorslogswarning(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyscreate_provider_models   cCsyt||i}ti|}|i||| ot i d|t Snyt i |}|i|_Wn+tj ot d|d|i}nXt||SWn'tj ot id|t SnXdS(s Look up the identity represented by user_name and determine whether the password is correct. Must return either None if the credentials weren't valid or an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs s"Passwords don't match for user: %ss visit_keysuser_idsNo such user: %sN(sto_db_encodings user_namesselfsuser_class_db_encodings user_classs by_user_namesusersvalidate_passwordspasswordslogsinfosNones visit_classs by_visit_keys visit_keyslinksidsuser_idsSQLObjectNotFoundsSqlObjectIdentityswarning(sselfs user_namespasswords visit_keyslinksuser((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysvalidate_identitys cCs|i|i|jSdS(s Check the supplied user_name and password against existing credentials. Note: user_name is not used here, but is required by external password validation schemes that might override this method. If you use SqlObjectIdentityProvider, but want to check the passwords against an external source (i.e. PAM, a password file, Windows domain), subclass SqlObjectIdentityProvider, and override this method. N(suserspasswordsselfsencrypt_password(sselfsusers user_namespassword((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysvalidate_passwordscCst|SdS(s Lookup the principal represented by user_name. Return None if there is no principal for the given user ID. Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs N(sSqlObjectIdentitys visit_key(sselfs visit_key((s7build\bdist.win32\egg\turbogears\identity\soprovider.pys load_identitys cCsttSdS(s  Must return an object with the following properties: user_name: original user name user: a provider dependant object (TG_User or similar) groups: a set of group IDs permissions: a set of permission IDs N(sSqlObjectIdentitysNone(sself((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysanonymous_identityscCstt|SdS(sW Constructs Identity object for user that has no associated visit_key. N(sSqlObjectIdentitysNonesuser(sselfsuser((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysauthenticated_identity s( s__name__s __module__s__doc__s__init__screate_provider_modelsvalidate_identitysvalidate_passwords load_identitysanonymous_identitysauthenticated_identity(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysSqlObjectIdentityProviders  *   sTG_VisitIdentitycBs?tZdfdYZedddeddZeZRS(NssqlmetacBstZdZRS(Nstg_visit_identity(s__name__s __module__stable(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyssqlmetasslengthi(s alternateIDsalternateMethodNames by_visit_key(s__name__s __module__ssqlmetas StringColsTrues visit_keysIntColsuser_id(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysTG_VisitIdentitys sTG_GroupcBstZdZdfdYZedddeddZeddZed e i Z e d d Z e d d ZedddddddZedddddddZRS(s+ An ultra-simple group definition. ssqlmetacBstZdZRS(Nstg_group(s__name__s __module__stable(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pyssqlmeta sslengthis alternateIDsalternateMethodNames by_group_nameisdefaultsgroupIds group_names displayNames display_namesTG_UsersintermediateTables tg_user_groups joinColumnsgroup_ids otherColumnsuser_ids TG_Permissionstg_group_permissions permission_id(s__name__s __module__s__doc__ssqlmetas UnicodeColsTrues group_names display_names DateTimeColsdatetimesnowscreatedsDeprecatedAttrsgroupIds displayNames RelatedJoinsuserss permissions(((s7build\bdist.win32\egg\turbogears\identity\soprovider.pysTG_Groups    cCsvt|}gi}|iD]}||iq~|d the visit and identity management *plugins* are defined here N(s*(screate_default_provider(sset_current_identity(sset_current_provider(sset_login_attempted(svisitsturbogears.identitycCsntiidt odSntiidt otdntidtti t dS(Ns identity.onsvisit.ons)Visit tracking must be enabled (visit.on)sIdentity starting( s turbogearssconfigsgetsFalsesIdentityConfigurationExceptionslogsinfoscreate_extension_modelsvisitsenable_visit_pluginsIdentityVisitPlugin(((s4build\bdist.win32\egg\turbogears\identity\visitor.pysstart_extensions cCs0tiidt odSntiddS(Ns identity.onsIdentity shutting down(s turbogearssconfigsgetsFalseslogsinfo(((s4build\bdist.win32\egg\turbogears\identity\visitor.pysshutdown_extension/s cCst}|idS(N(screate_default_providersproviderscreate_provider_model(sprovider((s4build\bdist.win32\egg\turbogears\identity\visitor.pyscreate_extension_model8s sIdentityVisitPlugincBsGtZdZdZdZdZdZdZdZRS(NcCstidtii}t|_|dd|_|dd|_ |dd|_ |dd i d }t |_x[|D]S}yt|d |}Wn#tj otd |nX|ii|qWdS( Ns!Identity visit plugin initialisedsidentity.form.user_names user_namesidentity.form.passwordspasswordsidentity.form.submitsloginsidentity.sourcesform,http_auth,visits,sidentity_from_sInvalid identity source: %s(slogsinfos turbogearssconfigsgetscreate_default_providersselfsprovidersuser_name_fieldspassword_fieldssubmit_button_namessplitssourcesslistsidentity_sourcessssgetattrs source_methodsAttributeErrorsIdentityConfigurationExceptionsappend(sselfsgetssourcessss source_method((s4build\bdist.win32\egg\turbogears\identity\visitor.pys__init__>s    cCsit}tid|x,|iD]!}||}|o|Sq q Wtid|ii }|SdS(s Retrieve identity information from the HTTP request. Checks first for form fields defining the identity then for a cookie. If no identity is found, returns an anonymous identity. s!Retrieving identity for visit: %ssNo identity foundN( sNonesidentityslogsdebugs visit_keysselfsidentity_sourcesssourcesprovidersanonymous_identity(sselfs visit_keyssourcesidentity((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_requestWs    cCs ti|iidSdS(s Decode base64 user_name:password credentials used in Basic Auth. Returned with username in element 0 and password in element 1. s:N(sbase64s decodestrings credentialssstripssplit(sselfs credentials((s4build\bdist.win32\egg\turbogears\identity\visitor.pysdecode_basic_credentialsiscCsytiid}Wntj o tSnX|idd\}}d|i jot i dtSn|i |\}}tt|ii|||SdS(s; Only basic auth is handled at the moment. s Authorizations isbasicsHTTP Auth is not basicN(scherrypysrequestsheaderss authorisationsKeyErrorsNonessplits authSchemes schemeDataslowerslogserrorsselfsdecode_basic_credentialss user_namespasswordsset_login_attemptedsTruesprovidersvalidate_identitys visit_key(sselfs visit_keys authSchemes authorisationspasswords user_names schemeData((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_http_authps   cCs|ii|SdS(N(sselfsproviders load_identitys visit_key(sselfs visit_key((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_visitsc Cstii}|i|ioy|i|i}|i|i }|i|it }|id|it }|id|it }tt|ii|||}|t jotidt Sn|SWqtj o t SqXnt SdS(s! Inspect the form to pull out identity information. Must have fields for user name, password, and a login submit button. Returns an identity dictionary or none if the form contained no identity information or the information was incorrect. s%s.xs%s.ys'The credentials specified weren't validN(scherrypysrequestsparamsshas_keysselfssubmit_button_namespopsuser_name_fields user_namespassword_fieldspwsNonessubmitssubmit_xssubmit_ysset_login_attemptedsTruesprovidersvalidate_identitys visit_keysidentityslogswarningsKeyError( sselfs visit_keyssubmit_yspwssubmitsparamss user_namesidentityssubmit_x((s4build\bdist.win32\egg\turbogears\identity\visitor.pysidentity_from_forms$     cCstiidt otidttdSny|i |i }Wn=t j o1}tidt|g}t|nXtidt|t|idS(Ns identity.ons9Identity is not enabled. Setting current identity to Nones4Caught exception while getting identity from requestsIdentity is available...(s turbogearssconfigsgetsTrueslogsdebugsset_current_identitysNonesselfsidentity_from_requestsvisitskeysidentitysIdentityExceptionses exceptionsstrserrorssIdentityFailuresset_current_providersprovider(sselfsvisitserrorssesidentity((s4build\bdist.win32\egg\turbogears\identity\visitor.pysrecord_requests     ( s__name__s __module__s__init__sidentity_from_requestsdecode_basic_credentialssidentity_from_http_authsidentity_from_visitsidentity_from_formsrecord_request(((s4build\bdist.win32\egg\turbogears\identity\visitor.pysIdentityVisitPlugin=s      (s__doc__scherrypysshasdatetimestimesbase64s sqlobjects ImportErrors turbogearssturbogears.identityscreate_default_providersset_current_identitysset_current_providersset_login_attemptedsturbogears.identity.exceptionssvisitsloggings getLoggerslogsstart_extensionsshutdown_extensionscreate_extension_modelsobjectsIdentityVisitPlugin(sset_current_identitysloggings turbogearsscherrypysvisitsshutdown_extensionsbase64sset_login_attemptedsstart_extensionsdatetimesshascreate_default_providersset_current_providerstimesIdentityVisitPluginscreate_extension_modelslog((s4build\bdist.win32\egg\turbogears\identity\visitor.pys?s,               PK69.turbogears/identity/__init__.py''' @TODO: Laundry list of things yet to be done: * IdentityFilter should support HTTP Digest Auth * Also want to support Atom authentication (similar to digest) ''' import md5 import sha import threading import cherrypy import pkg_resources import logging log = logging.getLogger("turbogears.identity") import turbogears from turbogears.util import request_available, load_class from turbogears.identity.exceptions import * def create_default_provider(): ''' creates an identity provider according to what is found in the configuration file for the current TurboGears application returns an identity provider instance or raises an IdentityConfigurationException ''' provider_plugin = turbogears.config.get("identity.provider", "sqlobject") plugins = pkg_resources.iter_entry_points( "turbogears.identity.provider", provider_plugin) log.debug("Loading provider from plugin: %s", provider_plugin) provider_class = None for entrypoint in plugins: provider_class = entrypoint.load() break if not provider_class: provider_class = load_class(provider_plugin) if not provider_class: raise IdentityConfigurationException( "IdentityProvider plugin missing: %s" % provider_plugin ) else: return provider_class() class IdentityWrapper(object): ''' A wrapper class for the thread local data. This allows developers to access the current user information via turbogears.identity.current and get the identity for the current request. ''' def identity(self): try: id= cherrypy.request.identity except AttributeError: id= None if not id: if not request_available(): raise RequestRequiredException() raise IdentityManagementNotEnabledException() return id def __getattr__(self, name): ''' return the named attribute of the global state ''' identity= self.identity() if ("__str__"==name): return identity.__str__ elif ("__repr__"==name): return identity.__repr__ else: return getattr(identity, name) def __setattr__(self, name, value): ''' stash a value in the global state ''' identity= self.identity() setattr(identity,name,value) class ProviderWrapper(object): def __getattr__(self, name): try: provider= cherrypy.request.identityProvider except AttributeError: try: provider = create_default_provider() except: provider= None if provider is None: if not request_available(): raise RequestRequiredException() raise IdentityManagementNotEnabledException() return getattr(provider, name) current= IdentityWrapper() current_provider= ProviderWrapper() def was_login_attempted(): try: return cherrypy.request.identity_login_attempted except AttributeError: return False def set_login_attempted( flag ): cherrypy.request.identity_login_attempted= flag def set_current_identity(identity): cherrypy.request.identity = identity try: cherrypy.request.user_name = identity.user_name except AttributeError: cherrypy.request.user_name = None def set_current_provider( provider ): cherrypy.request.identityProvider= provider from turbogears.identity.conditions import * def _encrypt_password(algorithm, password): """Hash the given password with the specified algorithm. Valid values for algorithm are 'md5' and 'sha1'. All other algorithm values will be essentially a no-op.""" hashed_password = password if isinstance(password, unicode): password_8bit = password.encode('UTF-8') else: password_8bit = password if "md5" == algorithm: hashed_password = md5.new(password_8bit).hexdigest() elif "sha1" == algorithm: hashed_password = sha.new(password_8bit).hexdigest() elif "custom" == algorithm: custom_encryption_path = turbogears.config.get( "identity.custom_encryption", None ) if custom_encryption_path: custom_encryption = turbogears.util.load_class(custom_encryption_path) if custom_encryption: hashed_password = custom_encryption(password_8bit) return hashed_password def encrypt_password(cleartext): return current_provider.encrypt_password(cleartext) # declare what should be exported __all__ = [ "IdentityManagementNotEnabledException", "IdentityConfigurationException", "IdentityFailure", "current", "current_provider", "set_current_identity", "set_current_provider", "set_identity_errors", "get_identity_errors", "was_login_attempted", "encrypt_password" ] PKh6#cm turbogears/identity/__init__.pyc; 8Fc @sdZdkZdkZdkZdkZdkZdkZeidZdk Z dk l Z l Z dk TdZdefdYZdefd YZeZeZd Zd Zd Zd ZdkTdZdZdddddddddddg ZdS(s @TODO: Laundry list of things yet to be done: * IdentityFilter should support HTTP Digest Auth * Also want to support Atom authentication (similar to digest) Nsturbogears.identity(srequest_availables load_class(s*cCstiidd}tid|}tid|t }x|D]}|i }PqDW| ot |}n| otd|n|SdS(s creates an identity provider according to what is found in the configuration file for the current TurboGears application returns an identity provider instance or raises an IdentityConfigurationException sidentity.providers sqlobjectsturbogears.identity.providers Loading provider from plugin: %ss#IdentityProvider plugin missing: %sN(s turbogearssconfigsgetsprovider_plugins pkg_resourcessiter_entry_pointsspluginsslogsdebugsNonesprovider_classs entrypointsloads load_classsIdentityConfigurationException(sprovider_pluginspluginss entrypointsprovider_class((s5build\bdist.win32\egg\turbogears\identity\__init__.pyscreate_default_providers sIdentityWrappercBs)tZdZdZdZdZRS(s A wrapper class for the thread local data. This allows developers to access the current user information via turbogears.identity.current and get the identity for the current request. cCsaytii}Wntj o t}nX| o%t o tntn|SdS(N( scherrypysrequestsidentitysidsAttributeErrorsNonesrequest_availablesRequestRequiredExceptions%IdentityManagementNotEnabledException(sselfsid((s5build\bdist.win32\egg\turbogears\identity\__init__.pysidentity6s    cCsM|i}d|jo |iSn&d|jo |iSnt||SdS(s@ return the named attribute of the global state s__str__s__repr__N(sselfsidentitysnames__str__s__repr__sgetattr(sselfsnamesidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pys __getattr__As     cCs |i}t|||dS(s3 stash a value in the global state N(sselfsidentityssetattrsnamesvalue(sselfsnamesvaluesidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pys __setattr__Ms (s__name__s __module__s__doc__sidentitys __getattr__s __setattr__(((s5build\bdist.win32\egg\turbogears\identity\__init__.pysIdentityWrapper0s  sProviderWrappercBstZdZRS(NcCsytii}Wn0tj o$y t}WqCt}qCXnX|tjo%t o tnt nt ||SdS(N( scherrypysrequestsidentityProvidersprovidersAttributeErrorscreate_default_providersNonesrequest_availablesRequestRequiredExceptions%IdentityManagementNotEnabledExceptionsgetattrsname(sselfsnamesprovider((s5build\bdist.win32\egg\turbogears\identity\__init__.pys __getattr__Ws     (s__name__s __module__s __getattr__(((s5build\bdist.win32\egg\turbogears\identity\__init__.pysProviderWrapperUscCs,ytiiSWntj o tSnXdS(N(scherrypysrequestsidentity_login_attemptedsAttributeErrorsFalse(((s5build\bdist.win32\egg\turbogears\identity\__init__.pyswas_login_attemptedlscCs|ti_dS(N(sflagscherrypysrequestsidentity_login_attempted(sflag((s5build\bdist.win32\egg\turbogears\identity\__init__.pysset_login_attemptedsscCsE|ti_y|iti_Wntj otti_nXdS(N(sidentityscherrypysrequests user_namesAttributeErrorsNone(sidentity((s5build\bdist.win32\egg\turbogears\identity\__init__.pysset_current_identityws  cCs|ti_dS(N(sproviderscherrypysrequestsidentityProvider(sprovider((s5build\bdist.win32\egg\turbogears\identity\__init__.pysset_current_providerscCs|}t|to|id}n|}d|joti|i }nd|jot i|i }n[d|joMt i i dt}|o-t ii|}|o||}qqn|SdS(sHash the given password with the specified algorithm. Valid values for algorithm are 'md5' and 'sha1'. All other algorithm values will be essentially a no-op.sUTF-8smd5ssha1scustomsidentity.custom_encryptionN(spasswordshashed_passwords isinstancesunicodesencodes password_8bits algorithmsmd5snews hexdigestsshas turbogearssconfigsgetsNonescustom_encryption_pathsutils load_classscustom_encryption(s algorithmspasswordshashed_passwordscustom_encryption_paths password_8bitscustom_encryption((s5build\bdist.win32\egg\turbogears\identity\__init__.pys_encrypt_passwords    cCsti|SdS(N(scurrent_providersencrypt_passwords cleartext(s cleartext((s5build\bdist.win32\egg\turbogears\identity\__init__.pysencrypt_passwordss%IdentityManagementNotEnabledExceptionsIdentityConfigurationExceptionsIdentityFailurescurrentscurrent_providersset_current_identitysset_current_providersset_identity_errorssget_identity_errorsswas_login_attemptedsencrypt_password(s__doc__smd5sshas threadingscherrypys pkg_resourcessloggings getLoggerslogs turbogearssturbogears.utilsrequest_availables load_classsturbogears.identity.exceptionsscreate_default_providersobjectsIdentityWrappersProviderWrapperscurrentscurrent_providerswas_login_attemptedsset_login_attemptedsset_current_identitysset_current_providersturbogears.identity.conditionss_encrypt_passwordsencrypt_passwords__all__(scherrypyscurrent_providerslogs__all__sshas turbogearsscurrentscreate_default_providersmd5s load_classswas_login_attempteds_encrypt_passwordsset_current_providersset_current_identitysProviderWrappersencrypt_passwordsrequest_availablesloggingsIdentityWrappersset_login_attempteds pkg_resourcess threading((s5build\bdist.win32\egg\turbogears\identity\__init__.pys?s.        %        PK6HKK*turbogears/identity/tests/test_identity.py# coding=UTF-8 import re import unittest import cherrypy import turbogears from turbogears import testutil, database, identity, config, startup from turbogears.identity.soprovider import TG_User, TG_Group, TG_Permission #hub = database.AutoConnectHub("sqlite:///:memory:") hub = database.PackageHub("turbogears.identity") def mycustomencrypt(password): return password+'_custom' class RestrictedArea(turbogears.controllers.Controller, identity.SecureResource): require = identity.in_group('peon') def index(self): return "restricted_index" index = turbogears.expose()(index) def in_admin_group(self): return 'in_admin_group' in_admin_group = turbogears.expose()(in_admin_group) in_admin_group = identity.require(identity.in_group('admin'))(in_admin_group) def in_other_group(self): return 'in_other_group' in_other_group = turbogears.expose()(in_other_group) in_other_group = identity.require(identity.in_group('other'))(in_other_group) def in_admin_group_explicit_check(self): if 'admin' not in identity.current.groups: raise identity.IdentityFailure("You need to be an Admin") else: return 'in_admin_group' in_admin_group_explicit_check = turbogears.expose()( in_admin_group_explicit_check) def in_other_group_explicit_check(self): if 'other' not in identity.current.groups: raise identity.IdentityException else: return 'in_other_group' in_other_group_explicit_check = turbogears.expose()( in_other_group_explicit_check) class IdentityRoot(turbogears.controllers.RootController): def index(self): pass index = turbogears.expose()(index) def identity_failed(self): return 'identity_failed_answer' identity_failed = turbogears.expose()(identity_failed) #@turbogears.expose() #@identity.require(identity.not_anonymous()) def logged_in_only(self): return 'logged_in_only' logged_in_only = turbogears.expose()(logged_in_only) logged_in_only = identity.require(identity.not_anonymous())(logged_in_only) #@turbogears.expose() #@identity.require(identity.in_group('peon')) def in_peon_group(self): return 'in_peon_group' in_peon_group = turbogears.expose()(in_peon_group) in_peon_group = identity.require(identity.in_group('peon'))(in_peon_group) def test_exposed_require(self): if not hasattr(self.in_peon_group, '_require'): return 'no _require attr' if not isinstance(self.in_peon_group._require, identity.in_group): return 'not correct class' if 'peon' != self.in_peon_group._require.group_name: return 'not correct group name' return '_require is exposed' test_exposed_require= turbogears.expose()(test_exposed_require) def in_admin_group(self): return 'in_admin_group' in_admin_group = turbogears.expose()(in_admin_group) in_admin_group = identity.require(identity.in_group('admin'))(in_admin_group) def has_chopper_permission(self): return 'has_chopper_permission' has_chopper_permission = turbogears.expose()(has_chopper_permission) has_chopper_permission = identity.require(identity.has_permission('chops_wood'))(has_chopper_permission) def has_boss_permission(self): return "has_boss_permission" has_boss_permission = turbogears.expose()(has_boss_permission) has_boss_permission = identity.require(identity.has_permission('bosses_people'))(has_boss_permission) def logout(self): identity.current.logout() return "logged out" logout = turbogears.expose()(logout) def user_email(self): return identity.current.user.email_address user_email = turbogears.expose()(user_email) user_email = identity.require(identity.not_anonymous())(user_email) peon_area = RestrictedArea() def new_user_setup(self, user_name, password): return '%s %s' % (user_name, password) new_user_setup = turbogears.expose()(new_user_setup) class TestIdentity(unittest.TestCase): def setUp(self): # identity requires visit and a failure_url test_config = {'visit.on': True, 'identity.on': True, 'identity.failure_url': '/identity_failed', 'identity.soprovider.encryption_algorithm': None} old_configuration = dict() for key in test_config: old_configuration[key] = config.get(key) self._original_config = old_configuration config.update(test_config) cherrypy.root = IdentityRoot() startup.startTurboGears() self.init_model() def tearDown(self): startup.stopTurboGears() config.update(self._original_config) def init_model(self): if TG_User.select().count() == 0: user = TG_User(user_name='samIam', email_address='samiam@example.com', display_name='Samuel Amicus', password='secret') peon_group = TG_Group(group_name="peon", display_name="Regular Peon") admin_group = TG_Group(group_name="admin", display_name="Administrator") other_group = TG_Group(group_name="other", display_name="Another Group") chopper_perm = TG_Permission(permission_name='chops_wood', description="Wood Chopper") boss_perm = TG_Permission(permission_name='bosses_people', description="Benevolent Dictator") peon_group.addTG_Permission(chopper_perm) admin_group.addTG_Permission(boss_perm) user.addTG_Group(peon_group) user.addTG_Group(other_group) def test_user_password_parameters(self): "Controller can receive user_name and password parameters." testutil.create_request('/new_user_setup?user_name=test&password=pw') firstline = cherrypy.response.body[0] assert 'test pw' in firstline, firstline def test_user_exists(self): u = TG_User.by_user_name('samIam') assert u.email_address == 'samiam@example.com' def test_user_password(self): "Test if we can set a user password (no encryption algorithm)." hub.begin() u = TG_User.by_user_name('samIam') u.password='password' u.sync() assert u.password=='password' hub.rollback() hub.end() def test_user_password_unicode(self): """Test if we can set a user password which is encoded as unicode (no encryption algorithm).""" config.update({'identity.soprovider.encryption_algorithm':None}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon' u.sync() self.assertEqual(u.password, u'garçon') hub.rollback() hub.end() def test_user_password_hashed_sha(self): "Test if a sha hashed password is stored in the database." config.update({'identity.soprovider.encryption_algorithm':'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = 'password' u.sync() assert u.password =='5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' hub.rollback() hub.end() def test_user_password_hashed_sha_unicode(self): """Test if a sha hashed password with unicode characters is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm':'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon' u.sync() self.failUnlessEqual(u.password, '442edb21c491a6e6f502eb79e98614f3c7edf43e') hub.rollback() hub.end() def test_user_password_hashed_md5(self): "Test if a md5 hashed password is stored in the database." config.update({'identity.soprovider.encryption_algorithm':'md5'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = 'password' u.sync() assert u.password =='5f4dcc3b5aa765d61d8327deb882cf99' hub.rollback() hub.end() def test_user_password_hashed_md5_unicode(self): """Test if a md5 hashed password with unicode characters is stored in the database.""" config.update({'identity.soprovider.encryption_algorithm':'md5'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon' u.sync() self.assertEqual(u.password, 'c295c4bb2672ca8c432effc53b40bb1e') hub.rollback() hub.end() def test_user_password_hashed_md5_utf8string(self): """Test if a md5 hashed password with unicode characters is stored in the database if the password is entered as str (encoded in UTF-8). This test ensures that the encryption algorithm does handle non-unicode parameters gracefully.""" config.update({'identity.soprovider.encryption_algorithm':'md5'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = u'garçon'.encode('UTF-8') u.sync() self.assertEqual(u.password, 'c295c4bb2672ca8c432effc53b40bb1e') hub.rollback() hub.end() def test_user_password_raw(self): "Test that we can store raw values in the password field (without being hashed)." config.update({'identity.soprovider.encryption_algorithm':'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.set_password_raw('password') u.sync() assert u.password =='password' hub.rollback() hub.end() def test_user_password_raw_unicode(self): config.update({'identity.soprovider.encryption_algorithm':'sha1'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.set_password_raw(u'garçon') u.sync() self.assertEqual(u.password, u'garçon') hub.rollback() hub.end() def test_user_password_hashed_custom(self): "Test if a custom hashed password is stored in the database." config.update({'identity.soprovider.encryption_algorithm':'custom'}) config.update({'identity.custom_encryption':'identity.tests.test_identity.mycustomencrypt'}) # force new config values to load startup.startTurboGears() testutil.create_request('/') hub.begin() u = TG_User.by_user_name('samIam') u.password = 'password' u.sync() assert u.password =='password_custom' hub.rollback() hub.end() def test_anonymous_browsing(self): "Test if we can show up anonymously." testutil.create_request('/') assert identity.current.anonymous def test_deny_anonymous(self): "Test that we have secured an url from anonymous users." testutil.create_request('/logged_in_only') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_deny_anonymous_viewable(self): "Test that a logged in user can see an resource blocked from anonymous users." testutil.create_request('/logged_in_only?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'logged_in_only' in firstline, firstline def test_logout(self): "Test that logout works and the session is not valid anymore afterwards." testutil.create_request('/in_peon_group?user_name=samIam&password=secret&login=Login') self.assertEquals("samIam", cherrypy.serving.request.identity.user_name) x = re.match("Set-Cookie: (.*?); Path.*", str(cherrypy.response.simple_cookie) ) session_id = x.group(1) testutil.create_request('/logout', headers={'Cookie': session_id }) self.assertEquals(None, cherrypy.serving.request.identity.user_name) assert cherrypy.serving.request.identity.anonymous def test_logout_with_set_identity(self): """Test that logout works even when there is no visit_key (e.g. when testutils.set_identity_user is used).""" request = testutil.DummyRequest() old_user = testutil.test_user user = TG_User.by_user_name("samIam") testutil.set_identity_user(user) testutil.attach_identity(request) testutil.set_identity_user(old_user) testutil.call_with_request(cherrypy.root.logout, request) assert request.identity.anonymous def test_require_group(self): "Test that a anonymous user" testutil.create_request('/in_peon_group') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_require_expose_required_permission(self): ''' Test that the decorator exposes the correct permissions via _require attribute on the actual method. ''' testutil.create_request('/test_exposed_require') firstline= cherrypy.response.body[0] assert 'require is exposed' in firstline, firstline def test_require_group_viewable(self): "Test that a user with proper group membership can see a restricted url." testutil.create_request('/in_peon_group?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'in_peon_group' in firstline, firstline def test_user_not_in_right_group(self): "Test that a user is denied access if they aren't in the right group." testutil.create_request('/in_admin_group?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_require_permission(self): "Test that an anonymous user is denied access to a permission restricted url." testutil.create_request('/has_chopper_permission') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_require_permission_viewable(self): "Test that a user with proper permissions can see a restricted url." testutil.create_request('/has_chopper_permission?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'has_chopper_permission' in firstline, firstline def test_user_lacks_permission(self): "Test that a user is denied acces if they don't have the proper permission." testutil.create_request('/has_boss_permission?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_user_info_available(self): "Test that we can see user information inside our controller." testutil.create_request('/user_email?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'samiam@example.com' in firstline, firstline def test_bad_login(self): "Test that we are denied access if we provide a bad login." testutil.create_request('/logged_in_only?user_name=samIam&password=wrong&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_restricted_subdirectory(self): "Test that we can restrict access to a whole subdirectory." testutil.create_request('/peon_area/index') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_restricted_subdirectory_viewable(self): "Test that we can access a restricted subdirectory if we have proper credentials." testutil.create_request('/peon_area/index?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'restricted_index' in firstline, firstline def test_decoratator_in_restricted_subdirectory(self): """Test that we can require a different permission in a protected subdirectory.""" testutil.create_request('/peon_area/in_other_group?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'in_other_group' in firstline, firstline def test_decoratator_failure_in_restricted_subdirectory(self): """Test that we can get an identity failure from a decorator in a restricted subdirectory""" testutil.create_request('/peon_area/in_admin_group?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed_answer' in firstline, firstline def test_explicit_checks_in_restricted_subdirectory(self): """Test that explicit permission checks in a protected directory is handled as expected""" testutil.create_request('/peon_area/in_other_group_explicit_check?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'in_other_group' in firstline, firstline def test_throwing_identity_exception_in_restricted_subdirectory(self): """Test that throwing an IdentityException in a protected directory is handled as expected""" testutil.create_request('/peon_area/in_admin_group_explicit_check?user_name=samIam&password=secret&login=Login') firstline = cherrypy.response.body[0] assert 'identity_failed' in firstline, firstline class TestTGUser(testutil.DBTest): model = TG_User def setUp(self): self._identity_on = config.get('identity.on', False) config.update({'identity.on': False}) try: self._provider = cherrypy.request.identityProvider except AttributeError: self._provider= None cherrypy.request.identityProvider = None startup.startTurboGears() testutil.DBTest.setUp(self) def tearDown(self): testutil.DBTest.tearDown(self) startup.stopTurboGears() cherrypy.request.identityProvider = self._provider config.update({'identity.on': self._identity_on}) def test_create_user(self): """Check that User can be created outside of a running identity provider.""" u = TG_User(user_name='testcase', email_address='testcase@example.com', display_name='Test Me', password='test') assert u.password=='test', u.password PKh6Nxx+turbogears/identity/tests/test_identity.pyc; aFc@sdkZdkZdkZdkZdklZlZlZlZlZdk l Z l Z l Z ei dZdZdeiieifdYZdeiifdYZd eifd YZd eifd YZdS( N(stestutilsdatabasesidentitysconfigsstartup(sTG_UsersTG_Groups TG_Permissionsturbogears.identitycCs |dSdS(Ns_custom(spassword(spassword((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysmycustomencrypt ssRestrictedAreacBstZeidZdZeieZdZeieZeieideZdZ eie Z eieide Z dZ eie Z dZ eie Z RS( NspeoncCsdSdS(Nsrestricted_index((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysindexscCsdSdS(Nsin_admin_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_admin_groupssadmincCsdSdS(Nsin_other_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_other_groupssothercCs.dtiijotidndSdS(NsadminsYou need to be an Adminsin_admin_group(sidentityscurrentsgroupssIdentityFailure(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_admin_group_explicit_check!scCs(dtiijo tindSdS(Nsothersin_other_group(sidentityscurrentsgroupssIdentityException(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_other_group_explicit_check)s ( s__name__s __module__sidentitysin_groupsrequiresindexs turbogearssexposesin_admin_groupsin_other_groupsin_admin_group_explicit_checksin_other_group_explicit_check(((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysRestrictedAreas     s IdentityRootcBstZdZeieZdZeieZdZeieZeiei eZdZ eie Z eiei de Z dZ eie Z dZ eie Z eiei de Z d ZeieZeieid eZd ZeieZeieid eZd ZeieZdZeieZeiei eZeZdZeieZRS(NcCsdS(N((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysindex3scCsdSdS(Nsidentity_failed_answer((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysidentity_failed7scCsdSdS(Nslogged_in_only((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyslogged_in_only=scCsdSdS(Ns in_peon_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys in_peon_groupDsspeoncCsdt|id odSnt|iiti odSnd|iiijodSndSdS(Ns_requiresno _require attrsnot correct classspeonsnot correct group names_require is exposed(shasattrsselfs in_peon_groups isinstances_requiresidentitysin_groups group_name(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pystest_exposed_requireIscCsdSdS(Nsin_admin_group((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysin_admin_groupSssadmincCsdSdS(Nshas_chopper_permission((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyshas_chopper_permissionXss chops_woodcCsdSdS(Nshas_boss_permission((sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyshas_boss_permission]ss bosses_peoplecCstiidSdS(Ns logged out(sidentityscurrentslogout(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pyslogoutbs cCstiiiSdS(N(sidentityscurrentsusers email_address(sself((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys user_emailgscCsd||fSdS(Ns%s %s(s user_namespassword(sselfs user_namespassword((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pysnew_user_setupns(s__name__s __module__sindexs turbogearssexposesidentity_failedslogged_in_onlysidentitysrequires not_anonymouss in_peon_groupsin_groupstest_exposed_requiresin_admin_groupshas_chopper_permissionshas_permissionshas_boss_permissionslogouts user_emailsRestrictedAreas peon_areasnew_user_setup(((s@build\bdist.win32\egg\turbogears\identity\tests\test_identity.pys IdentityRoot1s:            s TestIdentitycBsCtZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$RS($NcCshdt<dt<dd<dt<}t}x!|D]}ti|||tZdZdZdZdZdZdZRS(NcCsYtiidt|_tiihdt<tiidd|_t t _ dS(Nsvisit.onsvisit.cookie.namestg-visit( s turbogearssconfigsgetsFalsesselfs _visit_onsupdatesTrues cookie_names VisitRootscherrypysroot(sself((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pyssetUpscCs tiihd|i<dS(Nsvisit.on(s turbogearssconfigsupdatesselfs _visit_on(sself((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pystearDownscCs>tidtiii|iptt i i dS(s5Test if the visit cookie is set in cherrypy.response.s/N( stestutilscreate_requestscherrypysresponses simple_cookieshas_keysselfs cookie_namesAssertionErrors turbogearssstartupsstopTurboGears(sself((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pystest_visit_responses  cCs8tidtiiipttiidS(s/Test that we can see a new visit on the server.s/N( stestutilscreate_requests turbogearssvisitscurrentsis_newsAssertionErrorsstartupsstopTurboGears(sself((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pystest_new_visit%s cCsetidtii|i}tiddt|t i i i pt t iidS(s)Test if we can track a visitor over time.s/sheadersN(stestutilscreate_requestscherrypysresponses simple_cookiesselfs cookie_namesmorsels cookie_headers turbogearssvisitscurrentsis_newsAssertionErrorsstartupsstopTurboGears(sselfsmorsel((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pystest_old_visit+s  cCstiihddd<tidtii|i }t i dtiddt |tii|i i|ijp tdtiiip tdtiid S( s*Test if the visit timeout mechanism works.s visit.timeoutf1.0f60.0s/isheadersscookie values should not matchs5this should be a new visit, as the cookie has expiredN(s turbogearssconfigsupdatestestutilscreate_requestscherrypysresponses simple_cookiesselfs cookie_namesmorselstimessleeps cookie_headersvaluesAssertionErrorsvisitscurrentsis_newsstartupsstopTurboGears(sselfsmorsel((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pystest_cookie_expires3s  *(s__name__s __module__ssetUpstearDownstest_visit_responsestest_new_visitstest_old_visitstest_cookie_expires(((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pys TestVisits     ( sunittests turbogearsstestutilscherrypystimes cookie_headers controllerssRootControllers VisitRootsTestCases TestVisit(stestutils cookie_headers VisitRoots turbogearsscherrypysunitteststimes TestVisit((s=build\bdist.win32\egg\turbogears\identity\tests\test_visit.pys?s      PKP6%turbogears/identity/tests/__init__.pyPKh6G&turbogears/identity/tests/__init__.pyc; EEc@sdS(N((((s;build\bdist.win32\egg\turbogears\identity\tests\__init__.pys?sPKP6"turbogears/qstemplates/__init__.pyPKh6(tވ#turbogears/qstemplates/__init__.pyc; HEc@sdS(N((((s8build\bdist.win32\egg\turbogears\qstemplates\__init__.pys?sPKP6Bturbogears/qstemplates/qsbase/+einame+.egg-info/paster_plugins.txtPKP6 8turbogears/qstemplates/qsbase/+einame+.egg-info/PKG-INFOVersion: 0.0 PKP6OOBturbogears/qstemplates/qsbase/+einame+.egg-info/sqlobject.txt_tmpldb_module=${package}.model history_dir=${"$"}base/${package}/sqlobject-history PKP6:q7turbogears/qstemplates/qsbase/+package+/release.py_tmpl# Release information about ${project} version = "1.0" # description = "Your plan to rule the world" # long_description = "More description about your plan" # author = "Your Name Here" # email = "YourEmail@YourDomain" # copyright = "Vintage 2006 - a good year indeed" # if it's open source, you might want to specify these # url = "http://yourcool.site/" # download_url = "http://yourcool.site/download" # license = "MIT" PKP68turbogears/qstemplates/qsbase/+package+/__init__.py_tmplPKP68turbogears/qstemplates/qsbase/+package+/static/css/emptyPKP6F899Aturbogears/qstemplates/qsbase/+package+/static/images/favicon.icoGIF89aM]]]Cqqq|||ӑan/-.ͣӴ򓓓̾ίuRƴZ0T%`ԇmbn01onniiiؐiV}QQQGGGC&ÛT*fff```sA.{-M"WWWSfAZ2wgc[Hp$>l1l:pPI򞾜jlqL̞沶䌍beiۅ=ߏ썐nqvwzľHuuvՂLMMSUYzCt6\_cxxx󅉏NPS]`d2.on:::QSWֶ˦PHfhmABBöƻ՝ISSSbcéssgggXXXZZ[ȿ|$##ͺ!Created with The GIMP,4a!y3PeHfD$ <͊HXMc ʁp0:Hctq wbE'Ę4iRx{oXBQUGZP#UR]  t-( ϗ.5Q:TPiŚ(ьlj16ls"@˹kexK#F 2>}\bD*$h5 碆1cb6q#U0$#_NH D蛬`-a@;PKP6JpGKturbogears/qstemplates/qsbase/+package+/static/images/tg_under_the_hood.pngPNG  IHDRD#gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEŦĻs8ziǜsljIƗji3٥sުd@wIrG߹rwCoęZ& ]KڳtS漡Զ½mDzT੃]{;˳bQ۾U:`LVs)ѻJF!ׂYm]1|XFʬ⽑htcxC&õѾk;!xK4O$iZ8ͥ]zS&AvT|f;qCSY1|̱ǔiQ㷣bLg+ t3Ƒ\cƻմֻԴW)㸕t\nuoTŠ}ωfT‰P˿{R=eڪ}Qi[`.hWʾ~MɻtN#9 ؟go@&A_3oG1±x._{>~ ЧpͶbj>L.~R/ϝnǮ÷KFѷfWǢX!ὈQ, 0IDATxԚ XWib@N8h 5X( "EEb-T|Xj-"j}`kJZ1P5ƾVִD{gɀT~/K{933ݼtX !Z9&hI! 25_1ohHhjLQ> K_^L#%z5Q#0%CLPW8 Zɛ9ZW_S%V<@۳5I_Z^xgTԌwΟ/+?yA%R*0t aeeae11+;;ls̬p րx'{yՅ 7y R 99{kR?, =?yҤkx]3ik`mX)MtLQ?FΤ.gt90gW^w^{\\j>8x^{{mܰJ) rC3gmq \ (l€?z'Y3241ec2t{;I p9UL.Av8!KA>dryyLyۡGcA3)8d`l8s v @.czy~#lB29;OxW#NϞ/nT)@]ky `E jö_~jI\_w>~}PiRk/zok'^ (.•oY~˷+Ǝ[v68!i;>~((=zZ-LV쁭[7o98B$W}4@p.f{W7W^_\L'ÑC\ȕR3@9>pWdDԨnf{2_8rʂYW;@ yGe/葧(]_{{e}MJ<\'FipIΔ4Z7ռز,)QLB5%0AlKYIU{ݭ>}ꖏZ7Urޡ;`ktg Lpy!^i_HϴgA)䜵Bae5sdQ555m?*%_1E#V*GML hn. (.xQ1?:*:jg|TH k! I+RDg~T7TD/Cz*y'OX3Zۨ_s8)ݖҠੑӾz5UVV/u\E>ZSP`)u N<󣍯guE;e)13%*x H+OiS8W씵Z՛"ƍE5-€E+Wsp.NFntrZ%'}\6qnܙe9=Qr1w1Y玔qJIr.񔢢U;lt"8eb*4*;#frZRKuf%9`jQ㫢 01կ•NY i)uW)M+hgΤ>X:6:cP i!7龚Z_"zӀ_|@E,oFhZ[͛RW@%mp2>րa5vn3฾h: ./?wjܸZBQ5$SOޑ\dC >eZARB-7&Uo&G ERAxGRy`nJ"6I:<2690=@> vF _mw!@ rL'Ʌ::q![o!a5m2p@ 3`( u  2 7P_wXlr[PM[hSRщ0F$жK\BX}/YMXʞãm ڟv]$#]Ϛ6v[JAh>47v".Ie{副O Ggwv>/NSa*Dru.xJ']-]s],t͡5. ;\ )p"p}zA'l4s"TddZ}vhN :.^blw2`&^̾iLoZZ#gх0ꭤ&SyI ks+7',Z =91(ItxD .Az lYI,:%5}h!b'2ǰ&Yz [<"E<.o;^k6^Y8fW 'a,6j{ H< z"ZQ PbL@c1L0gEgn Htdt".'a D0} -Û0,4gPтɬo8KP-CfUZ)nBr A$Q5%1\օKD\zM6ӣ @+`p{VLYdmk ٮ7$KgnӶ4ւ͠ j?ZtԴwGG$E LUj|7%"ܞ#LhrO`f"A 8F%X^6Do4P Gz ܍q#s$҂Lϟ@7~VLUh]nzzczplOdg; Z@[l-fX`0VZ<|7~OF`6­h]!!)@yHk3;[̹ jj5t5[Nߺ= ~lIENDB`PKP6pk k Mturbogears/qstemplates/qsbase/+package+/static/images/under_the_hood_blue.pngPNG  IHDR(+gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE2|٢a=9裏e}ֽĴҏ%ØIꮮפְ]B҈®̡̥ɻȡٍ]ŷzرQ׿ط|-Ðܲ㖬ŽdSksYIDATxbh h: hen#.@,SU^%~}=%aPg{ ]48g +ٱx ۱@,Y%~^35`UU~^a^~~d,@ \h)y)'&0I g qprp\ Yc̨UP6`.fx [MH2X@&P(](͘Vjjfʘef1-!= z@u0=jj \< ,&@pgpˀ a`bbhmejmefj1[9`,]L66 3 ~l`y h7H!\7'#P.]:jb^ B 8C#E[[mZ[E۹Z[[[ڙ,t8VFm~b@70K2V10s'͕ISh+ HMbat9 D# bRhmmbbomjm``omMlml 2J03ImKjgPTL,&0A5°Gy0gsshY@!"ʺQTHQA bdĹݭiKk|@"ncfkj, G5Q["B(50zYMR-NYVD[PHXVfVFy&LA^j;K `hE y `h@>`1 հ>Al7hHb'$$0Krić PFHu@PAIH"7W,fA;`h)#_UY*q'BrH# (;\E٘E\ ąxDEm;\32:KRK]K] ۈ h$ P3D~OVNZ霆`Wi*@Hbb,l "" L[RDRRdbg ZYU|B Aqq-!f&yI!!Iynnfy- fPO ԌP"'Kp]eo..YlL: `fWoL@A (ldfu ( 6 ln: deaQcDyRaDq B^ 'W3ǫoг*jBVYm6 J5! %^~acAVJ("Yr||rAr|Rrm|ArRRmmm\Rj*Жm9KԀgMUMU7U,{ ]h @96.6) V֐ocnや;)' RkkאUꎠ2CX5V5&-}x@8 H1# ,8P@ (k/P!+(("koꨐQ uYR\\jgoGv0١Β%0DA*a]1Ks^MA^^V^^^P J", Ѧ J`|Rĕ4 ))m{n\:X(ک *QHu1Y58@E+QugF' ֹKvAAWAVg/YSSdi0g 88[K@: Xr bh8 h u@ Rg1M^@lIENDB`PKP6?turbogears/qstemplates/qsbase/+package+/static/javascript/emptyPKP6Bturbogears/qstemplates/qsbase/+package+/templates/__init__.py_tmplPKs6YR .turbogears/qstemplates/quickstart/dev.cfg_tmpl[global] # This is where all of your settings go for your development environment # Settings that are the same for both development and production # (such as template engine, encodings, etc.) all go in # ${package}/config/app.cfg # DATABASE #if $sqlalchemy == "True" # driver://username:password@host:port/database # pick the form for your database # sqlalchemy.dburi="postgres://username@hostname/databasename" # sqlalchemy.dburi="mysql://username:password@hostname:port/databasename" # sqlalchemy.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite" # If you have sqlite, here's a simple default to get you started # in development sqlalchemy.dburi="sqlite:///devdata.sqlite" # set to 1 to make SQLAlchemy echo SQL commands on the console sqlalchemy.echo = 0 #else # pick the form for your database # sqlobject.dburi="postgres://username@hostname/databasename" # sqlobject.dburi="mysql://username:password@hostname:port/databasename" # sqlobject.dburi="sqlite:///file_name_and_path" # If you have sqlite, here's a simple default to get you started # in development sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite" # if you are using a database or table type without transactions # (MySQL default, for example), you should turn off transactions # by prepending notrans_ on the uri # sqlobject.dburi="notrans_mysql://username:password@hostname:port/databasename" # for Windows users, sqlite URIs look like: # sqlobject.dburi="sqlite:///drive_letter:/path/to/file" #end if # SERVER # Some server parameters that you may want to tweak # server.socket_port=8080 # Enable the debug output at the end on pages. # log_debug_info_filter.on = False server.environment="development" autoreload.package="${package}" # Auto-Reload after code modification # autoreload.on = True # Set to True if you'd like to abort execution if a controller gets an # unexpected parameter. False by default tg.strict_parameters = True # LOGGING # Logging configuration generally follows the style of the standard # Python logging module configuration. Note that when specifying # log format messages, you need to use *() for formatting variables. # Deployment independent log configuration is in ${package}/config/log.cfg [logging] [[loggers]] [[[${package}]]] level='DEBUG' qualname='${package}' handlers=['debug_out'] [[[allinfo]]] level='INFO' handlers=['debug_out'] [[[access]]] level='INFO' qualname='turbogears.access' handlers=['access_out'] propagate=0 PKP6‚1turbogears/qstemplates/quickstart/README.txt_tmpl${project} This is a TurboGears (http://www.turbogears.org) project. It can be started by running the start-${package}.py script.PKs6o 6turbogears/qstemplates/quickstart/sample-prod.cfg_tmpl[global] # This is where all of your settings go for your production environment. # You'll copy this file over to your production server and provide it # as a command-line option to your start script. # Settings that are the same for both development and production # (such as template engine, encodings, etc.) all go in # ${package}/config/app.cfg # DATABASE #if $sqlalchemy == "True" # driver://username:password@host:port/database # pick the form for your database # sqlalchemy.dburi="postgres://username@hostname/databasename" # sqlalchemy.dburi="mysql://username:password@hostname:port/databasename" # sqlalchemy.dburi="sqlite:///file_name_and_path" # If you have sqlite, here's a simple default to get you started # in development sqlalchemy.dburi="sqlite:///%(current_dir_uri)s/devdata.sqlite" #else # pick the form for your database # sqlobject.dburi="postgres://username@hostname/databasename" # sqlobject.dburi="mysql://username:password@hostname:port/databasename" # sqlobject.dburi="sqlite:///file_name_and_path" # If you have sqlite, here's a simple default to get you started # in development sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite" # if you are using a database or table type without transactions # (MySQL default, for example), you should turn off transactions # by prepending notrans_ on the uri # sqlobject.dburi="notrans_mysql://username:password@hostname:port/databasename" # for Windows users, sqlite URIs look like: # sqlobject.dburi="sqlite:///drive_letter:/path/to/file" #end if # SERVER server.environment="production" # Sets the number of threads the server uses # server.thread_pool = 1 # if this is part of a larger site, you can set the path # to the TurboGears instance here # server.webpath="" # Set to True if you are deploying your App behind a proxy # e.g. Apache using mod_proxy # base_url_filter.on = False # Set to True if your proxy adds the x_forwarded_host header # base_url_filter.use_x_forwarded_host = True # If your proxy does not add the x_forwarded_host header, set # the following to the *public* host url. # (Note: This will be overridden by the use_x_forwarded_host option # if it is set to True and the proxy adds the header correctly. # base_url_filter.base_url = "http://www.example.com" # Set to True if you'd like to abort execution if a controller gets an # unexpected parameter. False by default # tg.strict_parameters = False # LOGGING # Logging configuration generally follows the style of the standard # Python logging module configuration. Note that when specifying # log format messages, you need to use *() for formatting variables. # Deployment independent log configuration is in ${package}/config/log.cfg [logging] [[handlers]] [[[access_out]]] # set the filename as the first argument below args="('server.log',)" class='FileHandler' level='INFO' formatter='message_only' [[loggers]] [[[${package}]]] level='ERROR' qualname='${package}' handlers=['error_out'] [[[access]]] level='INFO' qualname='turbogears.access' handlers=['access_out'] propagate=0 PKh66dz/turbogears/qstemplates/quickstart/setup.py_tmplfrom setuptools import setup, find_packages from turbogears.finddata import find_package_data import os execfile(os.path.join("${package}", "release.py")) packages=find_packages() package_data = find_package_data(where='${package}', package='${package}') if os.path.isdir('locales'): packages.append('locales') package_data.update(find_package_data(where='locales', exclude=('*.po',), only_in_packages=False)) setup( name="${project}", version=version, # uncomment the following lines if you fill them out in release.py #description=description, #author=author, #author_email=email, #url=url, #download_url=download_url, #license=license, install_requires=[ "TurboGears >= ${turbogearsversion}", #if $identity == "sqlalchemy" "SQLAlchemy", #end if ], scripts=["start-${package}.py"], zip_safe=False, packages=packages, package_data=package_data, keywords=[ # Use keywords if you'll be adding your package to the # Python Cheeseshop # if this has widgets, uncomment the next line # 'turbogears.widgets', # if this has a tg-admin command, uncomment the next line # 'turbogears.command', # if this has identity providers, uncomment the next line # 'turbogears.identity.provider', # If this is a template plugin, uncomment the next line # 'python.templating.engines', # If this is a full application, uncomment the next line # 'turbogears.app', ], classifiers=[ 'Development Status :: 3 - Alpha', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Software Development :: Libraries :: Python Modules', 'Framework :: TurboGears', # if this is an application that you'll distribute through # the Cheeseshop, uncomment the next line # 'Framework :: TurboGears :: Applications', # if this is a package that includes widgets that you'll distribute # through the Cheeseshop, uncomment the next line # 'Framework :: TurboGears :: Widgets', ], test_suite='nose.collector', ) PK6WV2339turbogears/qstemplates/quickstart/start-+package+.py_tmpl#!${sys_executable} import pkg_resources pkg_resources.require("TurboGears") from turbogears import config, update_config, start_server import cherrypy cherrypy.lowercase_api = True from os.path import * import sys # first look on the command line for a desired config file, # if it's not on the command line, then # look for setup.py in this directory. If it's not there, this script is # probably installed if len(sys.argv) > 1: update_config(configfile=sys.argv[1], modulename="${package}.config") elif exists(join(dirname(__file__), "setup.py")): update_config(configfile="dev.cfg",modulename="${package}.config") else: update_config(configfile="prod.cfg",modulename="${package}.config") config.update(dict(package="${package}")) from ${package}.controllers import Root start_server(Root()) PKP6T_/turbogears/qstemplates/quickstart/test.cfg_tmpl# You can place test-specific configuration options here (like test db uri, etc) # #if $sqlalchemy != "True" sqlobject.dburi = "sqlite:///:memory:" #else sqlalchemy.dburi = "sqlite:///:memory:" #end if PKek6-99?turbogears/qstemplates/quickstart/+package+/controllers.py_tmplfrom turbogears import controllers, expose, flash # from model import * #if $identity != "none" from turbogears import identity, redirect from cherrypy import request, response # from ${package} import json #end if # import logging # log = logging.getLogger("${package}.controllers") class Root(controllers.RootController): ${b}expose(template="${package}.templates.welcome")${e} #if $identity != "none" # ${b}identity.require(identity.in_group("admin"))${e} #end if def index(self): import time # log.debug("Happy TurboGears Controller Responding For Duty") flash("Your application is now running") return dict(now=time.ctime()) #if $identity != "none" ${b}expose(template="${package}.templates.login")${e} def login(self, forward_url=None, previous_url=None, *args, **kw): if not identity.current.anonymous \ and identity.was_login_attempted() \ and not identity.get_identity_errors(): raise redirect(forward_url) forward_url=None previous_url= request.path if identity.was_login_attempted(): msg=_("The credentials you supplied were not correct or " "did not grant access to this resource.") elif identity.get_identity_errors(): msg=_("You must provide your credentials before accessing " "this resource.") else: msg=_("Please log in.") forward_url= request.headers.get("Referer", "/") response.status=403 return dict(message=msg, previous_url=previous_url, logging_in=True, original_parameters=request.params, forward_url=forward_url) ${b}expose()${e} def logout(self): identity.current.logout() raise redirect("/") #end if PKP6nE#8turbogears/qstemplates/quickstart/+package+/json.py_tmpl# A JSON-based API(view) for your app. # Most rules would look like: # # @jsonify.when("isinstance(obj, YourClass)") # def jsonify_yourclass(obj): # return [obj.val1, obj.val2] # # @jsonify can convert your objects to following types: # lists, dicts, numbers and strings from turbojson.jsonify import jsonify #if $identity == "sqlobject" from turbojson.jsonify import jsonify_sqlobject from ${package}.model import User, Group, Permission ${b}jsonify.when('isinstance(obj, Group)')${e} def jsonify_group(obj): result = jsonify_sqlobject( obj ) result["users"] = [u.user_name for u in obj.users] result["permissions"] = [p.permission_name for p in obj.permissions] return result ${b}jsonify.when('isinstance(obj, User)')${e} def jsonify_user(obj): result = jsonify_sqlobject( obj ) del result['password'] result["groups"] = [g.group_name for g in obj.groups] result["permissions"] = [p.permission_name for p in obj.permissions] return result ${b}jsonify.when('isinstance(obj, Permission)')${e} def jsonify_permission(obj): result = jsonify_sqlobject( obj ) result["groups"] = [g.group_name for g in obj.groups] return result #end if PK6N))9turbogears/qstemplates/quickstart/+package+/model.py_tmpl#if $identity != "none" from datetime import datetime #end if #if $sqlalchemy != "True" from turbogears.database import PackageHub from sqlobject import * #else from sqlalchemy import * from turbogears.database import metadata, session #if $elixir != "True" from sqlalchemy.ext.assignmapper import assign_mapper #else from elixir import Unicode, DateTime, String, Integer from elixir import Entity, has_field, using_options from elixir import has_many, belongs_to, has_and_belongs_to_many #end if #end if #if $identity != "none" from turbogears import identity #end if #if $sqlalchemy != "True" hub = PackageHub('${package}') __connection__ = hub #end if #if $sqlalchemy!="True" # class YourDataClass(SQLObject): # pass #end if #if $identity=="sqlobject" ### # identity models. ### class Visit(SQLObject): """ A visit to your site """ class sqlmeta: table = 'visit' visit_key = StringCol(length=40, alternateID=True, alternateMethodName='by_visit_key') created = DateTimeCol(default=datetime.now) expiry = DateTimeCol() def lookup_visit(cls, visit_key): try: return cls.by_visit_key(visit_key) except SQLObjectNotFound: return None lookup_visit = classmethod(lookup_visit) class VisitIdentity(SQLObject): """ A Visit that is link to a User object """ visit_key = StringCol(length=40, alternateID=True, alternateMethodName='by_visit_key') user_id = IntCol() class Group(SQLObject): """ An ultra-simple group definition. """ # names like "Group", "Order" and "User" are reserved words in SQL # so we set the name to something safe for SQL class sqlmeta: table = 'tg_group' group_name = UnicodeCol(length=16, alternateID=True, alternateMethodName='by_group_name') display_name = UnicodeCol(length=255) created = DateTimeCol(default=datetime.now) # collection of all users belonging to this group users = RelatedJoin('User', intermediateTable='user_group', joinColumn='group_id', otherColumn='user_id') # collection of all permissions for this group permissions = RelatedJoin('Permission', joinColumn='group_id', intermediateTable='group_permission', otherColumn='permission_id') class User(SQLObject): """ Reasonably basic User definition. Probably would want additional attributes. """ # names like "Group", "Order" and "User" are reserved words in SQL # so we set the name to something safe for SQL class sqlmeta: table = 'tg_user' user_name = UnicodeCol(length=16, alternateID=True, alternateMethodName='by_user_name') email_address = UnicodeCol(length=255, alternateID=True, alternateMethodName='by_email_address') display_name = UnicodeCol(length=255) password = UnicodeCol(length=40) created = DateTimeCol(default=datetime.now) # groups this user belongs to groups = RelatedJoin('Group', intermediateTable='user_group', joinColumn='user_id', otherColumn='group_id') def _get_permissions(self): perms = set() for g in self.groups: perms = perms | set(g.permissions) return perms def _set_password(self, cleartext_password): "Runs cleartext_password through the hash algorithm before saving." password_hash = identity.encrypt_password(cleartext_password) self._SO_set_password(password_hash) def set_password_raw(self, password): "Saves the password as-is to the database." self._SO_set_password(password) class Permission(SQLObject): """ A relationship that determines what each Group can do """ permission_name = UnicodeCol(length=16, alternateID=True, alternateMethodName='by_permission_name') description = UnicodeCol(length=255) groups = RelatedJoin('Group', intermediateTable='group_permission', joinColumn='permission_id', otherColumn='group_id') #else if $identity=="sqlalchemy" #if $elixir != "True" # The identity schema. visits_table = Table('visit', metadata, Column('visit_key', String(40), primary_key=True), Column('created', DateTime, nullable=False, default=datetime.now), Column('expiry', DateTime) ) visit_identity_table = Table('visit_identity', metadata, Column('visit_key', String(40), primary_key=True), Column('user_id', Integer, ForeignKey('tg_user.user_id'), index=True) ) groups_table = Table('tg_group', metadata, Column('group_id', Integer, primary_key=True), Column('group_name', Unicode(16), unique=True), Column('display_name', Unicode(255)), Column('created', DateTime, default=datetime.now) ) users_table = Table('tg_user', metadata, Column('user_id', Integer, primary_key=True), Column('user_name', Unicode(16), unique=True), Column('email_address', Unicode(255), unique=True), Column('display_name', Unicode(255)), Column('password', Unicode(40)), Column('created', DateTime, default=datetime.now) ) permissions_table = Table('permission', metadata, Column('permission_id', Integer, primary_key=True), Column('permission_name', Unicode(16), unique=True), Column('description', Unicode(255)) ) user_group_table = Table('user_group', metadata, Column('user_id', Integer, ForeignKey('tg_user.user_id', onupdate="CASCADE", ondelete="CASCADE")), Column('group_id', Integer, ForeignKey('tg_group.group_id', onupdate="CASCADE", ondelete="CASCADE")) ) group_permission_table = Table('group_permission', metadata, Column('group_id', Integer, ForeignKey('tg_group.group_id', onupdate="CASCADE", ondelete="CASCADE")), Column('permission_id', Integer, ForeignKey('permission.permission_id', onupdate="CASCADE", ondelete="CASCADE")) ) # # identity model # class Visit(object): """ A visit to your site """ def lookup_visit(cls, visit_key): return Visit.get(visit_key) lookup_visit = classmethod(lookup_visit) class VisitIdentity(object): """ A Visit that is link to a User object """ pass class Group(object): """ An ultra-simple group definition. """ pass class User(object): """ Reasonably basic User definition. Probably would want additional attributes. """ def permissions(self): perms = set() for g in self.groups: perms = perms | set(g.permissions) return perms permissions = property(permissions) def by_email_address(klass, email): """ A class method that can be used to search users based on their email addresses since it is unique. """ return klass.get_by(users_table.c.email_address==email) by_email_address = classmethod(by_email_address) def by_user_name(klass, username): """ A class method that permits to search users based on their user_name attribute. """ return klass.get_by(users_table.c.user_name==username) by_user_name = classmethod(by_user_name) def _set_password(self, password): ''' encrypts password on the fly using the encryption algo defined in the configuration ''' self._password = identity.encrypt_password(password) def _get_password(self): ''' returns password ''' return self._password password = property(_get_password, _set_password) class Permission(object): """ A relationship that determines what each Group can do """ pass def assign(*args, **kw): """Map tables to objects with knowledge about the session context.""" return assign_mapper(session.context, *args, **kw) assign(Visit, visits_table) assign(VisitIdentity, visit_identity_table, properties=dict(users=relation(User, backref='visit_identity'))) assign(User, users_table, properties=dict(_password=users_table.c.password)) assign(Group, groups_table, properties=dict(users=relation(User, secondary=user_group_table, backref='groups'))) assign(Permission, permissions_table, properties=dict(groups=relation(Group, secondary=group_permission_table, backref='permissions'))) #else # # identity model # class Visit(Entity): has_field('visit_key', String(40), primary_key=True) has_field('created', DateTime, nullable=False, default=datetime.now) has_field('expiry', DateTime) using_options(tablename='visit') @classmethod def lookup_visit(cls, visit_key): return Visit.get(visit_key) class VisitIdentity(Entity): has_field('visit_key', String(40), primary_key=True) belongs_to('user', of_kind='User', colname='user_id', use_alter=True) using_options(tablename='visit_identity') class Group(Entity): has_field('group_id', Integer, primary_key=True) has_field('group_name', Unicode(16), unique=True) has_field('display_name', Unicode(255)) has_field('created', DateTime, default=datetime.now) has_and_belongs_to_many('users', of_kind='User', inverse='groups') has_and_belongs_to_many('permissions', of_kind='Permission', inverse='groups') using_options(tablename='tg_group') class User(Entity): has_field('user_id', Integer, primary_key=True) has_field('user_name', Unicode(16), unique=True) has_field('email_address', Unicode(255), unique=True) has_field('display_name', Unicode(255)) has_field('password', Unicode(40)) has_field('created', DateTime, default=datetime.now) has_and_belongs_to_many('groups', of_kind='Group', inverse='users') using_options(tablename='tg_user') @property def permissions(self): perms = set() for g in self.groups: perms = perms | set(g.permissions) return perms class Permission(Entity): has_field('permission_id', Integer, primary_key=True) has_field('permission_name', Unicode(16), unique=True) has_field('description', Unicode(255)) has_and_belongs_to_many('groups', of_kind='Group', inverse='permissions') using_options(tablename='permission') #end if #end if PK;6`ww?turbogears/qstemplates/quickstart/+package+/config/app.cfg_tmpl[global] # The settings in this file should not vary depending on the deployment # environment. dev.cfg and prod.cfg are the locations for # the different deployment settings. Settings in this file will # be overridden by settings in those other files. # The commented out values below are the defaults # VIEW # which view (template engine) to use if one is not specified in the # template name # tg.defaultview = "kid" # The following kid settings determine the settings used by the kid serializer. # Kid output method (e.g. html, html-strict, xhtml, xhtml-strict, xml, json) # and formatting (e.g. default, straight, compact, newlines, wrap, nice) # kid.outputformat="html default" # kid.encoding="utf-8" # The sitetemplate is used for overall styling of a site that # includes multiple TurboGears applications # tg.sitetemplate="" # Allow every exposed function to be called as json, # tg.allow_json = False # List of Widgets to include on every page. # for exemple ['turbogears.mochikit'] # tg.include_widgets = [] # Set to True if the scheduler should be started # tg.scheduler = False # Set session or cookie # session_filter.on = True #if $identity != 'none' # VISIT TRACKING # Each visit to your application will be assigned a unique visit ID tracked via # a cookie sent to the visitor's browser. # -------------- # Enable Visit tracking visit.on=True # Number of minutes a visit may be idle before it expires. # visit.timeout=20 # The name of the cookie to transmit to the visitor's browser. # visit.cookie.name="tg-visit" # Domain name to specify when setting the cookie (must begin with . according to # RFC 2109). The default (None) should work for most cases and will default to # the machine to which the request was made. NOTE: localhost is NEVER a valid # value and will NOT WORK. # visit.cookie.domain=None # Specific path for the cookie # visit.cookie.path="/" # The name of the VisitManager plugin to use for visitor tracking. visit.manager="${identity}" #if $identity == "sqlobject" # Database class to use for visit tracking visit.soprovider.model = "${package}.model.Visit" identity.soprovider.model.visit = "${package}.model.VisitIdentity" #else if $identity == "sqlalchemy" # Database class to use for visit tracking visit.saprovider.model = "${package}.model.Visit" identity.saprovider.model.visit = "${package}.model.VisitIdentity" #end if # IDENTITY # General configuration of the TurboGears Identity management module # -------- # Switch to turn on or off the Identity management module identity.on=True # [REQUIRED] URL to which CherryPy will internally redirect when an access # control check fails. If Identity management is turned on, a value for this # option must be specified. identity.failure_url="/login" #if $identity=='sqlobject' # identity.provider='${identity}' #else identity.provider='${identity}' #end if # The names of the fields on the login form containing the visitor's user ID # and password. In addition, the submit button is specified simply so its # existence may be stripped out prior to passing the form data to the target # controller. # identity.form.user_name="user_name" # identity.form.password="password" # identity.form.submit="login" # What sources should the identity provider consider when determining the # identity associated with a request? Comma separated list of identity sources. # Valid sources: form, visit, http_auth # identity.source="form,http_auth,visit" #if $identity=='sqlobject' # SqlObjectIdentityProvider # Configuration options for the default IdentityProvider # ------------------------- # The classes you wish to use for your Identity model. Remember to not use reserved # SQL keywords for class names (at least unless you specify a different table # name using sqlmeta). identity.soprovider.model.user="${package}.model.User" identity.soprovider.model.group="${package}.model.Group" identity.soprovider.model.permission="${package}.model.Permission" # The password encryption algorithm used when comparing passwords against what's # stored in the database. Valid values are 'md5' or 'sha1'. If you do not # specify an encryption algorithm, passwords are expected to be clear text. # # The SqlObjectProvider *will* encrypt passwords supplied as part of your login # form. If you set the password through the password property, like: # my_user.password = 'secret' # the password will be encrypted in the database, provided identity is up and # running, or you have loaded the configuration specifying what encryption to # use (in situations where identity may not yet be running, like tests). # identity.soprovider.encryption_algorithm=None #else # SqlAlchemyIdentityProvider # Configuration options for the default IdentityProvider # ------------------------- # The classes you wish to use for your Identity model. Remember to not use reserved # SQL keywords for class names (at least unless you specify a different table # name using sqlmeta). identity.saprovider.model.user="${package}.model.User" identity.saprovider.model.group="${package}.model.Group" identity.saprovider.model.permission="${package}.model.Permission" # The password encryption algorithm used when comparing passwords against what's # stored in the database. Valid values are 'md5' or 'sha1'. If you do not # specify an encryption algorithm, passwords are expected to be clear text. # # The SqlAlchemyProvider *will* encrypt passwords supplied as part of your login # form. If you set the password through the password property, like: # my_user.password = 'secret' # the password will be encrypted in the database, provided identity is up and # running, or you have loaded the configuration specifying what encryption to # use (in situations where identity may not yet be running, like tests). # identity.saprovider.encryption_algorithm=None #end if #end if # compress the data sends to the web browser # [/] # gzip_filter.on = True # gzip_filter.mime_types = ["application/x-javascript", "text/javascript", "text/html", "text/css", "text/plain"] [/static] static_filter.on = True static_filter.dir = "%(top_level_dir)s/static" [/favicon.ico] static_filter.on = True static_filter.file = "%(top_level_dir)s/static/images/favicon.ico" PKP6i-_?turbogears/qstemplates/quickstart/+package+/config/log.cfg_tmpl# LOGGING # Logging is often deployment specific, but some handlers and # formatters can be defined here. [logging] [[formatters]] [[[message_only]]] format='*(message)s' [[[full_content]]] format='*(asctime)s *(name)s *(levelname)s *(message)s' [[handlers]] [[[debug_out]]] class='StreamHandler' level='DEBUG' args='(sys.stdout,)' formatter='full_content' [[[access_out]]] class='StreamHandler' level='INFO' args='(sys.stdout,)' formatter='message_only' [[[error_out]]] class='StreamHandler' level='ERROR' args='(sys.stdout,)' PKP6Cturbogears/qstemplates/quickstart/+package+/config/__init__.py_tmplPKP6Cturbogears/qstemplates/quickstart/+package+/sqlobject-history/emptyPKs6)&J @turbogears/qstemplates/quickstart/+package+/static/css/style.css/* * Quick mash-up of CSS for the TG quick start page. */ html, body { color: black; background-color: #ddd; font: x-small "Lucida Grande", "Lucida Sans Unicode", geneva, verdana, sans-serif; margin: 0; padding: 0; } td, th {padding:3px;border:none;} tr th {text-align:left;background-color:#f0f0f0;color:#333;} tr.odd td {background-color:#edf3fe;} tr.even td {background-color:#fff;} #header { height: 80px; width: 777px; background: blue URL('../images/header_inner.png') no-repeat; border-left: 1px solid #aaa; border-right: 1px solid #aaa; margin: 0 auto 0 auto; } a.link, a, a.active { color: #369; } #main_content { color: black; font-size: 127%; background-color: white; width: 757px; margin: 0 auto 0 auto; border-left: 1px solid #aaa; border-right: 1px solid #aaa; padding: 10px; } #sidebar { border: 1px solid #aaa; background-color: #eee; margin: 0.5em; padding: 1em; float: right; width: 200px; font-size: 88%; } #sidebar h2 { margin-top: 0; } #sidebar ul { margin-left: 1.5em; padding-left: 0; } h1,h2,h3,h4,h5,h6,#getting_started_steps { font-family: "Century Schoolbook L", Georgia, serif; font-weight: bold; } h2 { font-size: 150%; } #getting_started_steps a { text-decoration: none; } #getting_started_steps a:hover { text-decoration: underline; } #getting_started_steps li { font-size: 80%; margin-bottom: 0.5em; } #getting_started_steps h2 { font-size: 120%; } #getting_started_steps p { font: 100% "Lucida Grande", "Lucida Sans Unicode", geneva, verdana, sans-serif; } #footer { border: 1px solid #aaa; border-top: 0px none; color: #999; background-color: white; padding: 10px; font-size: 80%; text-align: center; width: 757px; margin: 0 auto 1em auto; } .code { font-family: monospace; } span.code { font-weight: bold; background: #eee; } #status_block { margin: 0 auto 0.5em auto; padding: 15px 10px 15px 55px; background: #cec URL('../images/ok.png') left center no-repeat; border: 1px solid #9c9; width: 450px; font-size: 120%; font-weight: bolder; } .notice { margin: 0.5em auto 0.5em auto; padding: 15px 10px 15px 55px; width: 450px; background: #eef URL('../images/info.png') left center no-repeat; border: 1px solid #cce; } .fielderror { color: red; font-weight: bold; }PKP6S Jturbogears/qstemplates/quickstart/+package+/static/images/header_inner.pngPNG  IHDR PR9.bKGDC pHYs  tIME /D8e IDATxwu}?|?gq7;!, B kEUqTVۯmVuj-jk]((30!d'7#ws޿?z9=q|{}#|<,UgsT/@̏_Ps-.%r}5xO{_d+SsG5k}/!C%<^OFvx !b P%H2{ ?/kɇU` \怳qdLO=̘s Ȼp'.< ;npAR`N87\jQ ¼ipV@(4q+>#\h]G QeAEë)7ʦ1+|rԔur8F&=* r|2PQdYgR vjnB>9(p #hϺT`"X5x KW 7t7sW$wdK&AUjmR8.$~O~ &9}>Yj(|᱊D~G ."px\:r(Ψe>8N~)a$(e1C#T,B9(^vR8 S~)ԩnL?WRE *P8’&$qq2dW3Dn4 .g cUʎxEn8?/:(PRhPEXT;y/~xW!lgg׻&q xp |WBRx9U<% "?X$xcx̂C+9 @bdf&LZΙoJ΂"Cu^3#% ɾ(1d eZ]?Wj gizH P‡k7gHm G`}(U=SpZ RHŁUO"P x^U)E Xd)FqUE@2j> aB;>'@vbŖO:VƶIavoa[@æ MƐ?gt#{dS3'_@›Bqs|&o7y W}_D$ B`Bq_5n3YA.S12Dv 0ikӠ9&n Dx V'F TcsBds˿@$PeD|#AmyoO]@!Fǡ}JMMf"EjB Jxf<衑($$23{NF7*A2fIR\Mk_vG,%'o$0 E1Q}B.ĭQĹ-Up͚QӐNe n"= ¶.ypwF'b@ Q1J.Ap9;97yA8rc% $_xa"쥞kJx%, % (t)Ť/0?{6'f-ʓ0X'PV0aW Rg?x-T(U_,RvfN **"OTj / O@% Q3f3IوqW^c%9QP,>!d1#yH0!}yK[,HF2ڐ 5H.$]PcZnƵ$2&DWyd!ZWȉ(Rǁ?7 9EfFK, bXD%]4+Pʓ,!i1l!~x4w^Ǽxc2rdt?kn/gxl0U i hȎԬFVO"OJy0qʉÊ&Uf B@Ԙ=-€#Zklvs0n U:XѪ_QC"7q|Y0e cA\bqܳECgnU5\iwjrD%iz507 vA=0 1vus˓j,߆B6҉"{8C~>YԜdj+({@J3!ikH6xMhu<] T)nd lY1YčFPr@6hD6Z5* Tr+RBN%(u:W#xΖwvQ(d< &է?IH0#|%qc=~'Hk]I*+,R5W5 d~aC34CcuPr6"MŢBB&6mnD Ѝ'"4n"\kSY\{E1q-4f@rń-̉L)۸(R !;ud@j)4d1%Q iD=$Q'pa#C=)%oC Ԉ[ &'4B5#8.J+*5jI('={5 @̌djO5*uFTƧ)P_Z@w6 @t\$'oڔ5 y$2+U|75¤eeGD@)ƒ6pCc+zɜx%2 &LH33~ӢٴL91h72P/*.e\)/Y&L]&(*bH3T}BJ[# 4C"L'"-mꕐأkk<Qj ;x)b+ sV.Hpj2%LJcV28*q{2F(= n>[$ETŽ3+̹ɾ],4xP2p d"+4^YU┸IrN6) MJ#1"fQq0 1CrUmI'ؙi~P4F871,T<:M1ư |~]xL&+Xaϼ1<'F4mp63 DtvV4="&n[8AF.ȕ@ *b`.Gٳ:1*I$4Pwބ& #&Y1)f6\WW:;,nu[ ̆@x6a$gpMzn97h`yj ﹤̬2%B79JRee.Ju1ї I@`dMf/ +dOG(T!;M%[Uag @t?^2 [Mr #SA .B]ϕ@>V$@yv'YX:eOeIwH_@ʍ級AAJbPvFLglo?f)#]Rd"kHiZb*t×HM͓`ȭՌdc"kUL:Ȇ*H#)mGۈmBHgt)N#iq>q CD#ytsJq}850 PpѴHhYzR ebn,e7\cL,Mח%6JDZ }$K%$5lK5`W®E $ I#`dh+Lwk7Yp0 DAB'yp(O~81ij1& +_a>,5QZI aFȗ2c.d1H>-/ 4w2,-4iy {x e-~f}$0pk2_fTd@̥ mYg9Xؙ2;"6^8oFs?{I+>T-l?<^Z^J[vs-1EL3¨]В>)s8K,AZHz}Z?nd¤Dƿ1~3"r2 Wxρ\Z ,+!0DOߊ_9A4hb:$Ԑ{$,\gS'B&j,#v5/9F18?'lS%TI)2IFX`5zt#3369PDIlL\ZLVpot+Nfu/ĝOo<,IH0ß8W̎|JJmAZ9ɥ h0|7u`^}azw%a<vdݒ bIܽcQ`!'q3O/oco=Pk1dC~G ςsڅ4]"Jr4"2OVq5􄷩'Bqk%j D%A:@"ФQ"Rp@Pq"emb"C΃ zsS{.4Q\s 5Ϝѧљgci(1=3E#GY4ddJϫWUq?st3xҭ0˙oUV|i}lc <(6o,Xؑ/^?\m-{x߸cs~Nƍ^,!@I(jPz賀GPSwRI,Ŕm'Y;L.Gf2j=0$ԹI] 8F^aM=~jNm<0\@A}|u^otfx>lÙަTu@9pbGK&B!3YL3-1mnMҷGfӧ'F11WBN*W9zsiX%:n9|wH Z$B+sxi=tE[:7OwǎArD5*1[/Z碔Iqr` IDAT|MCӓ{v~/$iFyʬ+QW8" 55dGf3KL;qv5 qk@j=CNIR0rc~Z@٦Xgk0wpO\]>ӎn;Q#ع(IdoS ~R7.]ǟݲ*&'!.T_\D}xDu+p6|]15WظprrP,i  Rj}CY:bxfPLJR$ q *Oq݈K t  KvbL^urh߈w'rO_>=?9epa4}X ˧q[OU?܎=r؃'׉\BMgfX[]{f+g^ɼ}LKH@:,g6"#':6e,Dk{GA#Fo 9 7ED"w.C'.6 _?7BZg{#>Hnq֓ k&6k!\c] a IH}9j cZ`N|fFd13"&8m,d~8^ s%3A{ X 6K[AIic=+2֋aAKDbb2\[ؚ/_+A<o< {2'`\Lsk3#]Ƨv'|s u\c@;_?鄨h*K3͋V>-~pq6/5o1oF+PN.d1UD2BYaߍ} C岤BN'!D^#"~փd9<=SYz5 M7ecHT !R<ȦɈٹ14 5ӟa =%0kjCE.:J@*"tВ_lis ;n%nVy7 +9I8|Sh˥ ۛb75[ׄ^oq7:0߄1ƕV= }ͥUIe&"5Q"NSf0<:E|]ن5 t+_Uh, Bמڃ#Ms 7ŒO]Gy0`aW .C7?mop̂E[KlC'#%=X֡nC'welA$=-x~_׆SuujeOoƅMigu=9|ŋƦfqƧp{q3CB3ipxә+іӝKƶSqpg"ù z4~y~`xb| ;~y/.^Kk{sh?~`'(k1 Ov7> } P,gB[p]sks׹ [Qy(w`dՃeR8aQVt{sД}GS 8\;{}82>-}QW + lp棺D1m0|&7XV)[.[̘*5ϋ y<h\^tl%Z; ~y{R9)fx/'c> ^!׏m )0;6fI,,F;M\':Y~o\_vM_27Ò$fh,l3Gqdk\rV'yx4.Njvbjhr8`eh<}E밠Uv4^U|Ql2S(֩ߛvL,}+P\9`,eλŌsޜ(,_sO&)3eܔ?>'uMUF,QIא 2C.R4̄MՕx^Bơ1)%ᘉOp q{P(`@̔,=x ^+QʼXE+CMأzrzrʟt\ W}~ҨQgoɞ|f (u^;?9-irq ~{mceR VS– O_~Tv,va_1'lDM*ٜb Y3sxo_*E]`m%pu8$&G|<_}zdg On]ҤMJ7Vӗt9mf %B)@7]r8֡i\/b`,hM{A] 75[G{`܁(WbTf܏oL|wVqn,& %22w"m2b?Jqj1vӘ)@ao6Cc,\Jp}#~Ar_tZ/#V%OY<;тcÚ$ ,Q5'9:PZk)Y3j[2{cˀDdH٤]@,( Im Si\v:1};3GwRG5nնlNl3#X.oZ/F:OZ.[Ö b`m@8@&D&ܺ^[7&3[qqaŽ&[aݖBW}gAҼBRLh#XQ|}s:J%O3Zxl)J2M&UJsX,Ƿ;r&:;ƒYa+Oqn#_/{w>z`=#kBԾbRl>7UrͶ j_a_#|PHb085NNXffdN)c k>[c@3-;ЋVphp&du] R+kL5 Т¤2~K'&lL|HZ5h3 <93dgV86Z? }3. BoĂ$&35b9s+yȉ|a&M!KՌEg&qB1~n9J\ ֒/&TܩB}<6Nᓿ٢єƻִhKLS>0j73כ7(Bo %8XkW. "X-h>\Ť13CZ[DH|5d"-[-ʸ2~˹T*}XݣsZ&`vZ }ېA8eEɜL PRAE(#H-XU2!XH@><V.abT2ic>Tz6\4bTf>ʞKjr>:oimCe}/ϱ:۞VJ [j8W+Z1' ^ ƍ[r?!ĖrVos FܓsuBrx"Xb cљCB$ €eĜAk}7dg4199/䌐Đ#ׁ“WUaxGqxt&N mO1Rf~|v(J."&X`i͹gY1\U+O@H/d O-\g"!]k¿?9#zO+9MZ/>4L8xQ|FH-BV^!h2V&|+DYYs#xg5O&ƪ_Y 0#bޯa13z5G9|gtෞ$ XpOK.eqi}Q7%]9y@.>KXk)=1d02Jz;b_z`-QY&fJokeZÚikc_+z @{~ F᭍.' –'LG)ZEo(C^&ta+4:wϳ"͛OB2w."ظ0tq1؆Hu€!|L3>{6=|h=2"Q{/XS;*c㝶x@pE>9|}ڻ彭xѲTsʜ \afבqi [Gp`lZ+L_+nxӱxiHHg`dafbTXQwR4Le #MD7ՅJ]YuWb ]WI9ȩNXEF!V$Lu)<|M8pqqs&뉷K [=e('>UU!ڴ(%.Bm94"U3)o B+WYV}/ɾܸQѣy,'t5j9 BYhs|W>v"~|!C141 XnɃʃfw8$oKHؖR|PdY$?9qBh8n#Ue;W.}/TKj@z#5m/H41: BCpbNRl CZ'r8zό r͸xP'x}_ikҩpxAGo\ǻӝ?-%fi}Nie HwjaNr+8p1\T ҎYc;2hNȁTG?@DuN#S4>}!1Fibak4bY{4SǭHgmŻH~WRp zvik"o?pXcN_֍SoZѡgeWzB{:#zp~m c.ȧsg'[FaIñ ^1 fЩ+␃eurQ!s+;g:( '`)kʻBDӳfds(vFs[#1H,f] bD i$Y|(A }"FDfH~@(21ZD0ce_ 5*qɒ7Sxhm1sNȢ+Kg.橃`fr8J9"71? JWW"=ѓ$力 @IIllFa|s!P& Vw.t^2]983t!}RR9 1ؚ±]Y`ak=EHaF$8 @Qà>]ۅl+ b|~} F_>+n?\+&'B\U'#7~@#<>-]+^^Ӂ:y[L5b]d [dB\cd+\BF+a&i+7a"ZVup&GI~E2 %Wq 3ik̅g&jɾuP=fd:P2#L Dp R`RP}P.B/GqMt?NH46^!,tq |xvȅ:őQ}lW+xU| VH=5BK=Hui nHu{W)I Y3cxl̵eV[񞉢cJaNyA&")l}dCA+PդnЇ팜{Ƨ{1{xй¶Qcޱ^"ܼy3ʔ9[}kKt >ugapZ)wca[]udqRN3i3!81[(%i#r .ofEمГ+Nƹ+z- -5͍¨,mK)K`xr?z98yQ'r)މaço~t ?UmU'ʭ[|w7O=K|Jw9O>2w=-&{f~_O\wM>^y\;7?-^/U NZ񻪈0WM˦Y;nd?%S )D8e?u!pEھ BՆprSa4F u]&r; a"<%snfٖkbI1x:.]d $7^`VyuDWR6<'Ma\k\!Ȅۈ(N"1hֱIp0Qklj$J^|Q3񏛎 LΙ;g[x ^kyHnh_L R.?]9TOi9siD@zdSsa@;qå'^{Ŧ=Sd[~~dž1eYkzsaBW巨Og'Ziku'/ݲ,Eo=rW&iɦpMڣz3-$d0>=k؎O1L@ eY3.LϨ9a}û Wtc)|E{Oa|+ L &I#1خ8WGi5P!AC`?sPBYphCsSx: Q! Ix#LcPmiTם'NiPAl0Q^#5HdGu0uʼnW5.֤Nc?!ܺinf 2Ў%0ĭY߼EkёKԁA_-ppmyq{30ZtcL&JB'fu~~"cYьW5{*r|x X3(տi>|:2(JgA,R [sÅ_==gFgGH6R%ĨZd_ua~3`٦0mÝ;d^ܼy`P8f=(1!,Ew ( h[nDm](NaF|鶭+OuYܖ'smMɃ mE>҈^m?m Ĵ!:tjkLZ@1<;*mdYO OO-J&J)T<2qj`qHI2%$Sx'@sdU,#J P&Xׄ'%{(#pk Is"(AQ[P)^u>X۝{gwR-4f9wbbv`!)VJ:B#(#羜 O,Pzv—E7M /+p7~ B{ɂM-hB! 㙽|R]u >MřY3'P@ǙkLB_>KgpBlT{`l o]D_^n 7aQLQ(߉-X4KFZgu^.]7םɯXӉ/>4B9WP3sL‰F%" ,}q%SX{#a' &VO[t8_fֻa!}f U)8Ah=YR;)rȞY4x/#%n#ƅwIAi7i^)'k"!<y%I1H%<0v9 P}׆Sl?t̖=y:9<9߃{1+:Z o> ֜#u3.=N85 ^CqjW߷:q*|ug36 hLY{k$!})[30>M)yF@D`Q t5ذʸۏ; H&G-ჷ7~g.AK&uvah),&k΃;as`=n|=q"v%dGNf[on I"yZql :ϼMY{ëB<.?|g &fP!X@;@Rgbyw =OfZ8yM59 8B݂(r_A!c| He Xʑ=&鶃"R.m7Q k 46m#,חkJܩZ8Pn@X5jd^x!_] ϛt˕LLuӦK6ㆣdNw{^,o4%ɃL`Mbf~)iѤ)=>ݵ)guɡvں2kiGspJe"jnuvad$!|aO8y0X֑ǘ}6VՅ cÂdцkS)6Ҍkف7Lz}J$hmVIQr|޽! yXQ/ 5B2#waq,̃Zn ơqӲGeaA!aWjcT y[ˤBÛR]\jfC gaT)&]#Hpj?f$\b~)hPXFԎ (l\TB f͍6gA3nN¦Ϛ]O͂(ٖN]ދW!$a욜 ґf^^8#LGa]= g>qӼs n DQ!xɤnN޾Z'` `|Υ{06WDa ""n| T2}ҽ Aqj(@- +5 ^w|5WCӖ+`&\ dsq^C laywɝ1*[O:^@||068=2|q)\mȩeȧppb2T8Aҙ|hbI(<]Mi4K9$%+gfU~,VZS\Fn?+ .m߸XI8\F / ܰ*W5*/"A nI| 796'OG2 #EH4ܘa93n1-pIɨ0ܬ!]42ML1&FqꔬY5RSl*vٵ|&cE< eShyƽ)d6$7P coKslw+x'l0 3J~ϧ#||yP=/S$ХL ũq)ݣv͋3 V~WHSƨMHʟj3fz=CZo;e!~8o7AjKC_& QG/X*]_T1A0O᪓9/"Fx+!m**R4P$3*"D 4hu;9ϕE~[ `0n{ ~?|vVv@RMxɝppkc`#cOi?k 1BㆨSfuY}Xeb#P1ʓPt;XɕUzJu"N,RGz@ LItI bR:!W[cRaiEP BHaVΌJUeTǩJ7 T\KGHS>crt-##UX$=p?1L>#]+Nfd;a$)u,0i)HBI% ͐bn9⌕S`bds,'nXIOUBbbl7aȱCÒ0/J}:1fEP3c paI9&?#꩚^CۑY`vD/l@Hk{qZWF^9:22\m`f"8W6> b6ii^tgS5 Y1k>ECG֟h}(jp>e$4"E`b?aMG5|>oY&3LaLP|'"-WۍLI{CBS݋w㢥-X\bWue&J*-āGf^]2 %ԩV :L_O1ZV^.16 ;`?fwyy z0)PYp ;L}#&h@R HR8w܁;h1#4tOl)]YM ;{⵵5wJ6x s>y4ebp9ydNhat :C=cSŒn~?~?_*f _> WnW,⾝16=XEG=▃)D+͉0ӄ=gTon| ?yg,+-~61m^?Бuy!T` yҤ~$&A`k# R {&cu`^q G$5>vbtĆcw;!Wm<#3ERs~;v "d,:r2OGf}>05!wceByf|NŻ1BG@rx`vh8k9]9|~C6:+0\sce+g+g&rM7m~%]JXfX\: ۆM#_6IHG W3_eq5/~kt-}Huj58px2ɥZ·ǬV12oV=81"[YO_JsbE>gc;Y0r`ڛemxf3ut o^Lt!6iNǬaٹǴg K;OabV URG\bK[NDW6rݜ' ڧ&ZP@*6RoEX\tDxӉCGqrHw&bDZ=rOZnyӈ@yπI xg?ߋSmЙ8wqhɁ$vc>wahbl!2 f#i 22Id3,A\/1EK"\i\0_+4% %%ktw!0\tra84(ԠְA:ɾ!V ӗO%;HԸ1EiD_γE;u} vQݒyڳL:,]X~ד(HwZÊk6#hѫ]~Ta)" p_=q(!I]xmCݰkNrmX҉k`ȬtWiִ ǚ@QZr.~$hA A(9a~ D"2*@wЇ1DSYf5t)k!D], $ MFrZ\.nKGM֑X-aFfn ) fڢ^G]uǙǘ<@z$?ݱ>GWEL8Ö1*ִOߵ FԊ%xҗ\;>pS:W B.\>wE)DM2K4nz`እ-bi ws(pt",iN9(i3sCxh(Fvp5YΗ\zۏbMGSsEܻ06,qўax mx m8<]މ9.lKZShN+.CնhJA=\|@3>ۍ5"M_GMπY|l"YՔN>hjb|Ψzddw RҀ8YN' ੱY<84"Gs9ir>ܷtʾyCWol;" K%vn[W_gk\ L_^c>HE`4<v_d\Ź㳙m)=*${ jx:%>&(@O?s}B7j,U(P&8!$>p,r2cam{kAkͻvDHw7l*{ӌ͸QLT·Bg7<"GGXs+~12݈Ͽ$,jwf:3 'cx)0Ɛ\Z%jK Cqhhܸ{&7;^"Ϯ,CW6xn~~qѪx(&G&YKjr(pfc8ܻEtWo'),.?rW,Ku60H$f7mW_F'uótxFjGg⧇aey>o$ND}գYfW^, -0yȶeK旅,,Kd6BڀW w.;3=ۯ8j?\ťsw ['fMJh l2mu=տΑ&8 ( pmI ؒ#dd0Iv3tN #ŊZrh0uP9i8y6 /Ч ǹMւ>v{ g >qPG,upbUL;V}VN{c`Aٰ8tC :Ģ^9xNԀ7*🷢5Ojγ+?|`wrQ?wߝC 6!~]㚝Т>#_'p0]@'.܏2BPI]|5?ƇzTe+_x?Odctd*UK IDATpDX=BHSAWFP 's Ci]#d|Cڃ>'md7kR Icn&9|M}^7.Bm5~_~w3RoYjAZ_"SAJs= ]Ӣ<&1Uԛ}o2M))Dy4͆ފ kTkev}cs M_EʶIsk Q=0 .p=+HTc|ŧv>9w#w񫷦_J'iϼ^\>Nm6~M|ߕSGgd 1[d,`ʭ_??o=8S?kw fb8wCL6@iGPo _O|lU|:-+E}o~+71.מC+a%I-mHϽ]ZS LTȿ|`[u[FU+W_<çKol 3߼G?W˟{~;xt1!l@j8z}N 5 md@3!9NA mcPY/(zUCl1yÅ<?b 5'_7FrŎSV\.w7Z{V=|pc3&4Kq\8̀s :5Ouzybii0utvyZXoԝo¢E?rۏ2"Gg-.9/qd[S|=oap*?h,. ދw?]y /_˗> W"u< qb1})1ܿQ.Gw>z w}}>z~^w>><|?L Q /bbEg&xp^ΝӧnD~Rx?YS.38n\$8c|0SxSp01m]S}?\ߺ㳇+gמÿW} wc٨. | _~x@Y-;5]Swmr/Y>Y2"7 A$L 7=0̚]0pNQl+o3?G"gϨ+Pϸ>9iS nZE~^sy5! A_tRNgj&Yc {PW%)vUME}Rij饈qG켠a&VKƹkCNPb~)B-K6K+'҃8tU`SD ͼ8a&'{q%{xqwA 5->ÃFGϿp?ٛ_ '.bpflaVG m7vʼn6L,w)gdsK٩NwryY92kh°?4v6 9>N`#a!*2 "lcK~#00@|G?9skAnlBnh܎ɴ|lb0=,=9`pGQ?DYUyY9$-@!p iBz:p41F7^OQ  b8܆ځ #Km97+7P ȍM|^ /'ggv Vmϼ}K?E~:^{hl2]˟QNKVQ3owgb$HB7t<㆑@!3v;s90q?.VĽ#|Σ) &[@ FP2ubkIN{hܮr*A=ShN3QK8G$,YiUxSL'|CoYCAD fH.'ೣs j*j%P#i,Q:ū{Wy~z9>MEk<9 vNkF@zhvBcF J:rF|)R,0XǨY c1aIF32 1B GAËqug0'W1WJWB)Y^9?vQq\=>Duόs77>}W_ CW#?vNϟ,6mio=FN>%;:(q>N߹2S>ib)fTՕh0D6pY@ׂ<%e8>? cnWjڴa FGҵ!66 pF/GsK?qY;dI޽s}]+_ %N,ϱS rsǨYݗTruH8#81M'."֬ A|gyb'X׀yfJQڰz$-!9zW[ZihYqdUD]u~K~AQ< p 7^D+LR`s>Q$$ |o^svhg'' 2<f`G9|x EAы/2W2Mb0Dq$sCkuGC(CF '^?$ɪڡ^CmPD mI.{6+H=g_!%vs֫$,_XgI:܈sg*,)d3b0S[:ZJS'Pa '[B5kx(beE*;N ';NRC~w!-QfexJJ9UM]N%0tP3s׳ L>6A((d:G[!ĄHA8N ײ P]qc#O%Ł(y]8>9碟sD뎕_! |FZSų-+Y {|#)_} d1X-GoAN&xy+"N!.Ii 7_ #c h;#R y@ ^BG3P?3)ǀb[ usqyjcf[ӑN~#+d/76|Bz} pSŘ Hy]Qga|GnI脽"p:La#9mfSȎEdEs$,uNhr u43^(ArԴCצ\g r3dX/\Us'azFY~eqy!9Bv2epg\$5U 饣=7>عM\]Ў"Km^w~r,yK0jx~T#xu\RX⹍ 7lswo n.D+lJ0$oðyQP){"zy#&>b~9qv^JWBQKTTN 9]F!5ת*9UWpp-3E _dUi2NFC(vIT9 U;%I+FLCP$<7`cN  A@֩sz>u g#9EL *%R@>YK8P$:%!-6fDI#{6wovu/&;VDWJ)!0pxmhbl\$ٚ_-=%d!Ea%8L>b"[S~_A)$"@ވ" $7HjvW91* uA[y40J Db?%0SW_u%YX#0(H*^r=%{,}πeOV8m8 j0slÆ5%Ak8H L]`(qDr_]/Zcs9i2Ag"O3 u9`Agj ):"hmվ6Jm1w:K2Dڇ-6mWuJL$&Y:-pPx4/W;P1 L`o$7I8\ӂ`<8\* v+f}!xޛ twaH@&:AJ p}$Z`ƴbi `Kay'L'T%Aؐ݁a$uCi9'KGKhS4[= @?8#c=YK6z0^FR?2Axq#È_}´VɷsC:EfW]8\(/U Cib3XyZ`=n#aB 8+LU##=ƒ;kDvfF ޙN  %c+S םbޣ +Eq Kݱ~mb{\vwq͚!~BQuSEؾ /b+&B6ԏ@C-0uov'ewS6e~1O$.d$! dJr1dI3wK A 772et5RK`9V̸3-poZtU:CWlBvr{$ Ui8X<'7'S0T`Tv2,T*H\T̘*b D+`ţeK~Xű>y3#kКK;S)\w`+,<xi3@T m}h>ҋ'j\P`ܞ8X(A SkSo-WOJD}N* %\!h|H sYeVnVv؆1/D>>_NrA} 1. Z} s`"ت:2,CTTmǔMpb)iZ鑱 ^].Q1z =W`P3 Uð3WjehrmAU^a #¡V5f (qݮ$(-5H[S᱌0b˝-G5ۧA/|v1qP Y,9xq688'R2g\UM|i8w:h,."Y~W"]׼B6SrA(Cjߟq& fE#cbIJc7bP|cpP>y7ׇcB/Q <35r=jomK1wvgVh0NX ʹ,}_D u^q, ︿'*$_.QrQRvdI IZA$XGV||bˉ@LpLfXj/&(/]C7١Q&ϲ|?n"6y'GԴ="mZKz{*Ǝ$m `*cBvz~xܙ0t]}OVvq_Yn/B!|Oi8Pl{s ]FJdӌ3:rZF{J#o B{yi&V%\qT (#G(ců2`^Xxid$s#X'>^q++`c`ʌL6_αY1h{qR_ P@ۜ&<^L>mF5[a ]&Ћ4HG2AOe#6MYUwV Of" `g +;B9RLnՖ!\`Kn18?+-DZZKw[2 gCף)AL; 88ugb"Pb-p玾u]SE)[b &Bz +YUW*ü)b%Q{lCRmKضI캓8VѫEl^oʵ(W]M?&E3m15yCAFR2ݦFJ!U-} {Q8 X 3xy7C11 ;܌yj}j&n{MOY,"tYi8 ٽ\@ b%:^*L ]A3?VS 㬎]1a"h%։hslUWFU^LFC|Jo37T y7S<̰[|;#.lg{ymM x`y6.KH+Y\qF><xk^ [d8Z*\u>-uܹ@w3xɘKC=1-RBiUN(Q1qen` %U LHe*~3bnsRJ:R2!qSv_ 5bgJ+R4dS2a1xxTNzNJ+–7Y'0N(m9{80w5@4v?` B&<]6bl+f@J qGÖF q<ROv $,áb+7dNw\oנCQїx/J/;EF-&$ [8[@S9mn1Is-\gNM(g孈tfZlOvLuDtu(Ɉֿ7Qs[-DŽg58`aS䜦(nD:LސMȂAnzgIU>6+C@ߪ:Lx0-p}R+rlX&sleX[ѸM' r+ס76S1a IFL0sc}},0>όHdh ag@0S ejaQ+\T2)p$2"$*iU flԚApe~Dtn}xk^`w )E^]Sanh J^wD+Հ`s CǹPCesEU;u)$ KC*Ŭ3[a&%rX&[%a'W- )+fL"wN M)O0#}lflj#hrַVf0#DE_0ދQo68ό*.)Hm02)Y% CUVGȨfiO<rD(S9,pX v̞OV򽓗ilOk9Q!]iU[U EA'a-W^DHg#HDg(IރSحQ5v%~.N2u4!&3oï1(1P7ZZf+R P4:`q`XT"pdQ7nJJa3X0UQ56FVuW64\1R9b2nt"hQ8!Jy$*E |gKš6bJA#!CmdfYRns34H ܛ} E)HUQADt]%!vXT+lJ{5ɀ܌[seq(Fp] :=ay(pbpɄu㞾V'wdƜޕKP6+v2dhD 4HWֶ4` `(]y,B= L+5mP} Ʌ)@fcGkfLbcpWBnqOU9)SlM!CYXB֟* *7`U7-YFPU[PY $gfT5IX@ ]V!͢dcĢI( v-繹 3+'CPCRͯBPTP;&qQBp6?v:s^[՚-a)v53f%\b$$Wg~ `Ej TIC c߮`QqvN=*Ue4!\olmŪ yJa+#'YJ0k@vΕr-X_GfrՆWW!P:U e(aTdo⚧T}$e'XuFFhLWC5r\Ժ@$9A\>Uzle+zmIL'V"FBp#J7!Ӯueep=pM8ZysU4Wc#X:0Rɪ*r:}VNfJ'p:DA+[&rbd$l{Ƚ҂Inŕad9dJ}p︈d'o  \Cd"[ J~IENDB`PKP6I I Bturbogears/qstemplates/quickstart/+package+/static/images/info.pngPNG  IHDR00WsBIT|dtEXtSoftwarewww.inkscape.org< IDAThՙoy眹\^DhY$R %JVbR5[S[IIڦ-@>ohpZ;Fcˊun%,Qxo^gfgNH:AYy̻b} Fff|*ܦZ)S)y!DG+:!3w3 ﳴ0eB·{ѱ.x3~ ^iViPB Bu,YY+֫ơQ3x'p5Y9縷1R (%]YEwNq h`yHr\)xYO|ĩ3|P#L-XA`Z:7`c 5)QiDT+^{_x+_&,4;7ٗ_bsEz )ETJ@Jh/B^*ksξs,(xCS`y3hH!()P"!GqW]9?pdAn/ܑ,4)J TJFI@ e ]MƱxm >Qs9xU11ƤI-$yJ%e+I1qh<_7n޺IPY6MFhư]Tz^XPwYc9[ bSܼu.]LՈ\F:!hY@Jۚ}ݏX\K9 V̕jL;Υ<;w?V-[8@HX-(X³+5q/Tq,a\EJe%,"վ)$B hc@*К(ҸDD$KV,5a`DWC tgjqL!%4A#8B$܍I 6l6Z#ȎH)SpBF&18R!H,r;eDR2IJ !J \TZkmRxE dF+`aFeR"RA\Ka[JRcK265?dw kW{ےnԂ)N@Ă2M!q ~A$턥={  8qlFiX̯X C=-T0& Kı$LXVB9,Ó'05uMz=ȸVㅠ\o5B {< Khi7O1ߛP2 R 396u <_/2s"{SXJpvVז2żEw" BF<^2ԛ;144y=u e4յY{sXRݧdu,&l֡PCь=L7FI$-ɹW@MP{3i#(ךd]Kkȴz!]?<_k~5B>_sWQa\j:U?uTIU$RV_dIIw^?ġyPX//xɺMc>RtQ1&MR8a|tOM= l 8.~u3 JFQbZ\$}AV9N?qaa7{l8K xvR ֒m0IeB0e9 xjC[1^z%&0gpQBY rPR>{ځ*+p.k,Rb!yklff|?=r-mw',QlHo^*eepyR:j@R,:J>sBQqCEFFczzN2J)tl0Juny&'xccٷ z?E) uWK!ˆE67k4 rNom5cP27wl.P[ضC6Y]`c}Fll[ot?ͭ[>08hٿ}H|- %-]{w_B*hDfnnX cnRږֆ8" űf}LimzΣQUHh6(·⏿"&"8N'6O,-_f^#R*ReJJTefYXXZ2vW*%",ks]U85c8F똥\rW,G1+1}}LM=ѣOݏm-RuB YR!Z?qLakp3l67sS `68.8.dM>ܱǝQlANryyNP/Fhv&m)/MJ)CiI(%l k#(Ӯv+@'VߛQ")yRF~- s/s{nOKNN{̿ 88f|9I~`RN+g/^Yqruh =So`\ 7+ԣ؉>hl% (mBWE迡d(t m^ `t[ka 39m;k! -xʓL'dTxtFN|p;_/Igz'H?`c>n˩^VwOF (ȼSz'kn-}TtM~8z}pc4jx)Ip޸7\ZхR?<yii Bz,+s5YӉN8 ߳e.Od.:}{{WT}q \ ?ēCrB= (i'_?tG5:4Lao\+yMsn62=|g0 `0 `0 Gn%sDHmkBF)3mkTSx]KZI&{*,4BXL^.ۛ+c0"*]o:1`V.pb4BWWXX!C#!@lXDwqBs\u|\UG'S>vz~Sr65zmx7(jE4kxc<ڪ4jQXo>l4{]ـ3oX>Tkmul]]4=lԡYc`3L/ȐQVUz?O1t扙vN̴YavcW3;Qؘ n 6 a`6d Sb( @9gd3t2B&KPؐC/onz}Jvx$6VPY2UL [5PC*< E| 7[Hkn *CtX%GZ'5v]0JC;B +d } výBt˫ #'PQ-&b';R5[f5@_ƪVM7]1zDNQP1!˦>Q+c:hM=mZ# xi#EL ^L^+9fFL;eūrW: IL9]sb<H8LGE#Hn,,> ,.>4RC|5\0K/sj|<2`Ow 3ic%@"DCm :a ;}]iF5,Y85!c:!%PR-Ce1,L ~h)il CP-z^M"S1)8&818x*V")s$Y\,3 LdӕWEÎ<'dѳ\-ɘQ`Ȇ= AO|Ozz Y8Z0%]QvOi $%y(4x1M ßp?}x; RO5d̻43!'n`PymhEGZcQ$!䞙oo=S]j _Nw<9aO<f%Όy'V LJ&NYޑ'ds^BB =~An ^b*5R>Ė `q5Ndh8G5}-MC@~L˱:х,#iLà ǵĀut-Ĩ?4/ 7n4D9DqOIV#"JG&p E)`RS.Pu?^y8c3+-ŀk\?$L0 %>aǑ,%H7XC/CmBOOĞ 4CYASqL NI<,pby9mV9q&ԎAŚ6EJY:£(ɁIƷvJELC=HIA7Y%=&ͰS8S]*{x"œO){ć;4֮ai/ӏxy1!cr1 )B3Uɝ{BK;/0J\6I~).Cf,&BjcΰFfF[/IJW,hJ'P ;?GL' &#ZW杴Bv)2wSYYKZA ?y4#^d>i妗l2A4/mUT>q~գIB-Mo6bl7J/U-hof[ :nP;.q5$7|z2(MK:7|jwJN!Y{-GjTnt5{10$;\4h|QX{U ߛz_/yZ\^vM|쮣jb!ĚxG`߼_R,s*&(;?%l+BJ?ڳ5oUFϨ+~GQC{.|DKaNg|KxGo&/Y?cыh,4qO7o=XB/c#t z1x+cV/7i;$ Q7'_9BvwnܡI'q(҄jNuUe-Z[9/LtƎ_'ş gNg8䁩G G6i[Bvd-˷&=F4I?I3+^Er< O4$R3z!H\Zp5B҄>\tY|me=iǿ3ql=8g㙳q!g㜍s6Ƨt~sF5#[9#猜3r #7\|z9#ϜEn9g䜑gd?LQ9:Ysst9GK8zs'dk9䜜s999䜓c*N9g33rbFhr&`|&\o9?w.6v̄"q>.g㜍p9#_Fg匜3r>.gLsFg}q9: stL/'3rN99 3Ea|&\fFP*y>'6YY1+MV9[ȨCGOܗfq&}t$h9ڥ^=,y|i%pNOJ5 c ѭ[\>D,q,~N!Gt\)ܨR|EG71Σh6^o 8c|YsF9g<ϟ6#?0V)_0< `ˁUʣN9h-r?˸ 4DLRidi+e1RiI3.3ցs@o瓿CV~5t_\c'p>B^~ktVz:t>*Y<| ]ȧP>)=^Kg±җ+~KY1fEE_ y|;x=q7C3^Eiے}F&d,@3 [jWGODzеXyȺOg\cGC<(ҩW?Uϯ%|nd/GG%+E=}Uħ_l]~.r#ewK¤+ޖ"jCh_GMM$gF>Nv7%h_WZ!!^C|OƸs33yWd眗s^y9 ˁ?~pec&Ͱi,,T1C4vGҺ_/\Ecn}.1sDj͌|{_O){pCqgJٸgڅƯd~z?Ipqɷ)?bY@Vw} e^*V3HgoMYIu`,Vd3EfT-__My#ez26D4F% Kc'19Gn\p~ >{5s)0\˸HƥoBlOhjcJ7 ?_"_]xQ`Ny'"[$%|~@>% bw|$$ s) h@8#3aE|3^ooD³KQè?ҙqO|7dqtx\ X矆u#4/¤AH3Hh.ɿC^${wɾD }zs{>7 a%%Grq.!N b /uDh떟QqQ,MVRS\,ߛ> R+=2ė|99i'GO?[tϭ}Zs,ZZ}{O{?ze17k{ljJiDgqtA{1ǟĭ]Ho`ƉYVZ7ӮZsF%]7YHe1.,w6GՏ^C}↕QOf6~8c*]*ŨPOר F Jbe璑v'_O]£wH'pKd\Sފ3P='VՅg4{7^Uty_5vutpĤut]k"+ؘeYIWok.I3{k.y-},~5Yx|UJ9}<|m\#wC;`޺,$F]X6Jm90㒭S3/ ]7ux!CxC똣\/']WK-mRPUH~LRh zF!.;1$6{45V5|64pScD^Kj~% ,c8-f߱жIw42-OaNL=/9fQr*ύ[{2zV5o'1 JhF݌eSiB1o|eP=$2iH٠O8ݮ ku_rh<'rj=^{WiUzجרi:|kڰ֨.d6Al. *<ʃ:[p'p.x~@pw=BM;kT׶}}{thgpW7'&R,+֫RbSkn?dWˏ}CbZ辵|z;_/N%eÍFlw`l= Ǭec?8 DQmT`m/$"kz?mRM(mkBSx]N07xS#WCJ4M8\f2;Q%aϩ:*I% :kXn´ACR95įΡ;>P4Mvhe LeJXZ1P6"%3%Kgŏ<4 GD1@^'u[ mkBTWx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 % amkBTDxSv&6b3ShhM4DTD }Gr},^miTK`Y >ϗC1??fu`w 6F_3u?gggϚ U3b7૫],L h/z+ߧb ԠFb&Ŀ-w2rg!⊊hc`:˘?: ϰOYq+~t^/P^=P=p̙ ?nqt{Wϟ3.ySr/U~lw(:"=BA]n&>F~o1o9G"ܮk-b9W1ܕ޾?DFvm{o@"V.Wg/FK٣qh]Bcd,rwj(~r:BߐհRG{R lI{k㼸ޓk>u1ӰCpFFvwn{6v8"E?ں3` Z8 !yiC4tRwlU{i38 v=p>E˱=Rtn*;"Mk>bݯqgFfO~7k~6fڷ!f1fg{K1EܷՏBE͈jڦ8Gl&-D^Uyy1'? R&8ֶZ;Fog*a7kn&/TvsFLYn^RqͰ1 gBYYQ\nh߇qvP եOdHguu8߅n_5W'V?|c/G ZB?7CW8h*({|PPQ, Q}>_̅\Q+0v5GA没lYЖ`f %@JNX'` oN(sA|7OU=eOUWCPQaé``v @`^ B Z2{\Ik^c}Ni)(r?MUU9*s)sw}{|~L=~ݰeݷek6l~7$yo_zoN}s?oR##tf%1;}mkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jwymkBT6x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)PL&6'tl~3~Ffv^|I>5.z {/_ۿpg4$@ 4F6 }Y>ΰ=Nb`'n ϳ%S }:eR18k KamB 7IE_Qѳ; rdL'm~OP! vP0AA6m(Oj:լm~OM '|,I:kP3 x[3Is 3.6fC1˽:GfF b_TxӐ zlM5wiK4 xl}6X&HdY|"}֩`+&OdOɪQqm~OV+rs[Ӟ*vrх؟~ +.fVrmPXK`H`)Evw/o{^s{}+ ?u1t#,s#8Ey}y hKKp/Zb|ų*]殻fV`p}i'*[43ׁm훑<1)F $+ ~}[ۀv찭-0GTN3Jo9Kt$}:ms_vpGWmt~Vu?Xnt_RV8eg?4ctO~=>9X]>6_ xH 9bo9,oWs>|2%|jԩ?T>]Ze8@ @>@81Hn=;vjQ﷿wEgF_^^m~O8Y󙦚X!]Ǫ S}tѪ$ӱ-E LXR'I_A`LAR!ٻo{EsNuL|SIቃ=9ioX1tڭ-3) B=Wp4 @61 \yG=?UA{ p#c9q 9 _b-2Pc@ۻy+03**s"*9H-Xtg|%?}*_X=>+ a6 E ;cFȚB2E"8?}K>,rv/nPa)ekFCI뜹sN@L K6' ąޚ]K+VMg 8{TDo{Wn> rf7$R\g-.TkEQs~o:ɗ +1ցְ`$F́\@yP=swv9y`g0k[jD=e>4VHSv ypЊ۵9=wu?rB8 & o{r6H-Kh߳[kP`9qG4XǟߣuKzЎH#9,q6WĻk1"Jo{vNƦm%$")̫WT[F'ql66PDK:}@Ep sm~OgO={Ua[@WwR3|bC)(6'(D\^rCW?e>$r-rPӞ6rs[f A>.l$\pL@66L뿖79_mp5JdIeрqxBXF5w# ,6'`8o`֮&7:CJd9[b6'Q6]͍GMsC|!lSj~rVɾR[;xŹ]ڀOkʐ`Tz 4#xw~tW[=CMFCz~*pWw+7PM`s2k'޲V"kȵsNR0\Yo;Zm+y9Hx0p Gm5/pb^ر,ZkR?eӶpk3E'c_ZH;w\F0<ȁ7S~]w$_C! 6'#ĿQ \c1'X zŵ_61@(0*WB`!6%aL> QN?KOJSp Nñ&Od<bZ cO Xsp1fhn]Qj%ڳk(9!ح-z&}z~f&Ģ~K*5ʄCDIQB~?{vmP^f5 =r0tI@Q10 u"i u汅vD'a`Mn1,7N6 H5 xg6ag'dk92y' QZs>:q8֩',6Xv`9 "RijBv-h+h<$>`"6ξhLf30o%2\H鿾>r 8oⰧ1<L-eOSI_U; __#0<-~?3EQƝ+rᖜΡ<r,phQz_\h<࠯FD_jw]^̓O~ ? e8$R(--<1q!y2oʁ֢ߪ:s|qg6(u<0c:':o` p=abwhıϺT,ifVzejwSU 4M,o{Bx|w$pIukZ6 w2rK 7D/_)MCXʡnS]Sv0_ |}GqX0ح &G=k%У!Q׿ڳ66d^B&h'3Q:_oo  h|vkyg&rٱz]7B{inH ;,~gݡwM_r3!Mxw3b\/:ZB+@qW8;j?\NrsO &t <|}9愺~ Կ= q<pMmuɺ}EGWvU@J]'ƟsR&SJ!gz.+"%pB H'ϑd6'씂X ~E//=xS<#___GZa<;= H\azQìеPg8vV< AV ۄZ8ZO~!s~$lR?m3ҏ;,52՝^_z ;jg? =8sI0 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @44Բ-JIDATh{L[?Ɓ$$!P^Ihyf떤MjNG5mҴMUդiu֭]EI, 1ȃ1cl{6PP,Xǿs~{~ע^6mܫ` 3l2o%k6v} 6Jjt{kwrS!*{f=Ieyrql)Ϝ4weo Dɓϳfenɻ^kNt'3 J \86ˬq0>g> T/=xL-\y{\UsVM7+3`tP6N2H$lS?9)p=] كRP[pAͧYp Y l1dqEbh& 4BZ]Ĥ} @cLJbhCW rq֐d+'W )SYK t?OJ\Azw3{6%8M](ڊ[omaC N(qԝS4wB%g;G\ mt*\.cX2rS5MF~EC>\T`OO ߅u]\pT<ƴso{o|?=k&j>x|Fhy,S8FAi p 7adžZXlIIځw~4(-$ sH( Ғױ!o=?>U HL&J($My<ۣ/~kldn!qg,bq|J$@7iW4$022k}<[,NѶ khC)oR.%;p-Wiydk}D"Q( ׼F/HNJ/=Hd8G5tzkt vi,ɡQC~S|*Ql6jr`D]2Goͅ_A!r=!ˁwȎ$-n $,!'O3ҦUД,;$t7,0XPzH%`&VbfPي\8y~UO+l$[3P.]U^gҦ)%J*nr _"JJGf}dBm'VBYԃh6J 44h )%vUJ%oI /+2]ƒkcDPHT'<ul"#'!v Yh Login

Login

${message}

PK@6(NN@turbogears/qstemplates/quickstart/+package+/templates/master.kid Your title goes here
Login Welcome ${tg.identity.user.display_name}. Logout
PKek6xn1 1 Aturbogears/qstemplates/quickstart/+package+/templates/welcome.kid Welcome to TurboGears
  1. Model

    Design models in the model.py.
    Edit dev.cfg to use a different backend, or start with a pre-configured SQLite database.
    Use script tg-admin sql create to create the database tables.

  2. View

    Edit html-like templates in the /templates folder;
    Put all static contents in the /static folder.

  3. Controller

    Edit controllers.py and build your website structure with the simplicity of Python objects.
    TurboGears will automatically reload itself when you modify your project.

If you create something cool, please let people know, and consider contributing something back to the community.
PKs6Jturbogears/qstemplates/quickstart/+package+/tests/test_controllers.py_tmplimport unittest import turbogears from turbogears import testutil from ${package}.controllers import Root import cherrypy cherrypy.root = Root() class TestPages(unittest.TestCase): def setUp(self): turbogears.startup.startTurboGears() def tearDown(self): """Tests for apps using identity need to stop CP/TG after each test to stop the VisitManager thread. See http://trac.turbogears.org/turbogears/ticket/1217 for details. """ turbogears.startup.stopTurboGears() def test_method(self): "the index method should return a string called now" import types result = testutil.call(cherrypy.root.index) assert type(result["now"]) == types.StringType def test_indextitle(self): "The indexpage should have the right title" testutil.createRequest("/") response = cherrypy.response.body[0].lower() assert "welcome to turbogears" in response #if $identity != "none" def test_logintitle(self): "login page should have the right title" testutil.createRequest("/login") response = cherrypy.response.body[0].lower() assert "login" in response #end if PKP6]OODturbogears/qstemplates/quickstart/+package+/tests/test_model.py_tmpl# If your project uses a database, you can set up database tests # similar to what you see below. Be sure to set the db_uri to # an appropriate uri for your testing database. sqlite is a good # choice for testing, because you can use an in-memory database # which is very fast. from turbogears import testutil, database # from ${package}.model import YourDataClass, User # database.set_db_uri("sqlite:///:memory:") # class TestUser(testutil.DBTest): # def get_model(self): # return User # # def test_creation(self): # "Object creation should set the name" # obj = User(user_name = "creosote", # email_address = "spam@python.not", # display_name = "Mr Creosote", # password = "Wafer-thin Mint") # assert obj.display_name == "Mr Creosote" PKP6Bturbogears/qstemplates/quickstart/+package+/tests/__init__.py_tmplPKP6lNGturbogears/qstemplates/quickstartbig/+package+/controllers/root.py_tmplfrom turbogears import controllers, expose # from ${package} import model #if $identity != "none" from turbogears import identity, redirect from cherrypy import request, response from ${package} import json #end if # import logging # log = logging.getLogger("${package}.controllers") class Root(controllers.RootController): ${b}expose(template="${package}.templates.welcome")${e} #if $identity != "none" # ${b}identity.require(identity.in_group("admin"))${e} #end if def index(self): import time # log.debug("Happy TurboGears Controller Responding For Duty") return dict(now=time.ctime()) #if $identity != "none" ${b}expose(template="${package}.templates.login")${e} def login(self, forward_url=None, previous_url=None, *args, **kw): if not identity.current.anonymous \ and identity.was_login_attempted() \ and not identity.get_identity_errors(): raise redirect(forward_url) forward_url=None previous_url= request.path if identity.was_login_attempted(): msg=_("The credentials you supplied were not correct or " "did not grant access to this resource.") elif identity.get_identity_errors(): msg=_("You must provide your credentials before accessing " "this resource.") else: msg=_("Please log in.") forward_url= request.headers.get("Referer", "/") response.status=403 return dict(message=msg, previous_url=previous_url, logging_in=True, original_parameters=request.params, forward_url=forward_url) ${b}expose()${e} def logout(self): identity.current.logout() raise redirect("/") #end if PKP6Q,,Kturbogears/qstemplates/quickstartbig/+package+/controllers/__init__.py_tmplfrom ${package}.controllers.root import RootPKP6N@uu-turbogears/qstemplates/widget/README.txt_tmpl${project} This is a TurboGears (http://www.turbogears.org) widget project. You can view the widgets in the Toolbox.PKP6ڱ<<+turbogears/qstemplates/widget/setup.py_tmplfrom setuptools import setup, find_packages from turbogears.finddata import find_package_data import os execfile(os.path.join("${package}", "release.py")) setup( name="${project}", version=version, # uncomment the following lines if you fill them out in release.py #description=description, #long_description=long_description, #author=author, #author_email=email, #url=url, #download_url=download_url, #license=license, install_requires = ["TurboGears >= ${turbogearsversion}"], zip_safe=False, packages=find_packages(), package_data = find_package_data(where='${package}', package='${package}'), keywords = [ # Use keywords if you'll be adding your package to the # Python Cheeseshop # if this has widgets, uncomment the next line 'turbogears.widgets', # if this has a tg-admin command, uncomment the next line # 'turbogears.command', # if this has identity providers, uncomment the next line # 'turbogears.identity.provider', # If this is a template plugin, uncomment the next line # 'python.templating.engines', # If this is a full application, uncomment the next line # 'turbogears.app', ], classifiers = [ 'Development Status :: 3 - Alpha', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Software Development :: Libraries :: Python Modules', 'Framework :: TurboGears', # if this is an application that you'll distribute through # the Cheeseshop, uncomment the next line # 'Framework :: TurboGears :: Applications', # if this is a package that includes widgets that you'll distribute # through the Cheeseshop, uncomment the next line 'Framework :: TurboGears :: Widgets', ], entry_points = """ [turbogears.widgets] ${package} = ${package}.widgets """, test_suite = 'nose.collector', ) PKP6i BB7turbogears/qstemplates/widget/+package+/widgets.py_tmplimport pkg_resources from turbogears.widgets import CSSLink, JSLink, Widget, WidgetDescription, \ register_static_directory js_dir = pkg_resources.resource_filename("${package}", "static/javascript") register_static_directory("${package}", js_dir) PKP6turbogears/static/__init__.pyPKh6Ӄturbogears/static/__init__.pyc; EEc@sdS(N((((s3build\bdist.win32\egg\turbogears\static\__init__.pys?sPKP6[%turbogears/static/css/interpreter.cssh1 { font-size: 2em; color: #4B4545; text-align: center; } input.textbox { font-family: Monaco, "lucida console", Courier; border: 1px solid #CCCCCC; padding: 2px 4px; margin-top: .3em; } #interpreter_area { display: block; border: 1px solid #CCCCCC; padding: 2px 4px; margin-top: .3em; width: 600px; height: 300px; overflow: auto; } #interpreter_output { display: inline; font-family: Monaco, "lucida console", Courier; } #interpreter_output span { white-space: -moz-pre-wrap; /* Mozilla */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS 2.1 */ white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ word-wrap: break-word; /* IE */ wrap-option: emergency; /* CSS 3 */ } #interpreter_block_text { height: 200px; width: 500px; font-family: Monaco, "lucida console", Courier; border: 1px solid #CCCCCC; } #prompt { float: left; font-family: Monoco, "lucida console", Courier; vertical-align: bottom; margin-top: .6em; } .textbox:focus { background-color: #FFFEE3; } .code { color: blue; } .data { color: black; } .error { color: red; } .banner { color: green; } .invisible { display: none; } PKP6!  !turbogears/static/css/toolbox.cssbody { margin:0;padding:0; font-family:verdana,sans-serif; font-size:12px; margin-bottom:50px; } #top_background{ background-image:url('/tg_static/images/top_bg.png'); background-repeat:repeat-x; } #top { height:100px; width:100%; background-image:url('/tg_static/images/top.png'); background-repeat:no-repeat; background-position:top right; } #top h1 { font-size:22px;color:#fff;font-weight:100;margin:0;padding:0; margin-left:20px;padding-top:8px;} #top h1 a {color:#fff} h1,h2,h3,h4,h5 {color:#1F76BD} h2 {margin-top:0;padding-top:0} #main_content {text-align:left;width:750px} #main_content a {color:#1F76BD;} #main_content #tools { border-top:1px solid #1F76BD} #main_content #tools h4 { padding-bottom:3px;margin-bottom:3px} #left_col { width:229px;} #left_col a {color:#1F76BD;} button { background-color:#1F76BD; color:#fff; margin-left:4px; text-align:center; } #under_the_hood { width:100%; text-align:center; position:absolute;bottom:0px; } .disabled, .disabled h4 { color: grey !important; } dl.param_list dd { float: left; width: 110px; text-align: right; font-weight: bold; } dl.param_list dt { margin-left: 160px; } PKP6Jvyy turbogears/static/css/widget.css.grid { background-color:#e3e3e3;font-size:12px;font-family:verdana,sans-serif;border:none;} .grid td {padding:3px;border:none;} .grid .action_cell { text-align:right; } .grid THEAD { text-align:left;background-color:#f0f0f0;color:#666;} .grid .heading img { float:right;margin-left:2px;margin-right:3px; } .grid .heading a { text-decoration:none;color:#333; } .grid td a { text-decoration:none;color:#333} .odd{background-color:#edf3fe} .even{background-color:#fff} .pointer {cursor:pointer} .column_chooser_link {position:relative;background-color:#e3e3e3;} .column_chooser_link ul {position:absolute;display:none;top:10px;right:-45px;} .column_chooser_list a {width:200px;display:block;padding:3px;background-color:#e3e3e3;} .column_chooser_list a:hover {background-color:#cdcdcd;} .column_chooser_list { padding:0;margin:0;list-style:none;background-color:#e3e3e3; } PKP6!turbogears/static/css/__init__.pyPKh6U"turbogears/static/css/__init__.pyc; EEc@sdS(N((((s7build\bdist.win32\egg\turbogears\static\css\__init__.pys?sPKP6xkk turbogears/static/images/add.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<6PLTEcccbbbɧDZ͠'tRNS⿿IDATxbDĀ.@P6FV  ̌@`` ##d ''33;;P@98xXx`)faah -,P@lab@p&( +90u JIENDB`PKP6Uxܮ $turbogears/static/images/admi18n.pngPNG  IHDR00WsBIT|d eIDAThKl}??ɧ(jEI( v!)m괆]A=@0A`CCsIiA95ulǹvm<`Ֆe'ʏXK$rEryDER`f~ADhO;|SLA!Ihh J^!M^7x?|ȃ q~_bDV4%s D Z!rK-Z62hf0S3?徸)r[wg[~oٯX4gjz56>ՍƪJ][V<0  =kqe'G$?jLr(ѱc{8qdNRhJRo|+-7>ezh>MhiMQO0 zhu2Ce2Lm KpNwl@n"ŋHQZ#<Cj:}vgV4~;r.^ENLW &'avvwb-ZZ[D>۲w{JGA)ݫI˄fZ|:q\ήz`mW l~a RJ %VJ5иPD{>nJC)\D2<܎DCC!!tĹM:ZkV!HS KN]4&K(!;N-;e Oedb- lhuv y9ͧ}chs?ðLOlV"I4i` `aX *ԌS:*߻ȁsDR"^w聇:Lip?ksgy^el ABiRMR-Xc0Ƭ-1XNE|d|D81Y GT- cgNS@b} ϿL$cpQ]Hڢ`b2cpଥj!//cl)8}D l Q폅[ Q/)i,dێۀc2U,JPJJV!R! " ׂKV~o^GwIi4Z{2~'y9ad{ $lvS-nnZYtvɓR q `7mB+_!g {և8l8Ԏ ւ~2c6-r>|yij=q D{qj!G!-4Ih KֱWc&g{4`E#M\L+iJɴ'ı eX4Q' Q% #,ֲ9RIG1%@x38{vKD(B~貖SֲhdN+.,iMMG7,8Y(xyu'$9B?ܓ  S ñ!GE$tbBMT_}O=~vL<"ۇgɊ6oel%m=8i9R W*$[Û /剉BEU}Hbqx`i @?|g5zezj{ PgK2I 6l6y97^?WXkLD;ч6 +J QBs|X/D{mF/><667~DEtgBU!- Jm >Zd<ڝ19m)>Q@< DtCh1\SY`*T/,tapL6(^@t)"A} o2QzaW~ - E~+30@q]n@B`'i v96{6Bt7 bB|!nqع~u;!{@nnގb1w39%:&DRɚb> b:3Nm6V pRn\7&yCyc7u}It#LMhyۿZڤ=q,׍Y7|}dvn݀g7ދ.6ÆfO9CKIENDB`PKP6[,,'turbogears/static/images/arrow_down.pngPNG  IHDR exgAMAOX2tEXtSoftwareAdobe ImageReadyqe<3PLTEsssѮŀ拋www IDATxb`@: vVF`e|f eq8|0 @|.  b`XYlBG m>a]IENDB`PKP6V-turbogears/static/images/arrow_down_small.pngPNG  IHDR ?gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE֍tRNS0J@IDATxb`b@0 @@&0Hb 0 :I@!1 `Ui.IENDB`PKP66b'turbogears/static/images/arrow_left.pngPNG  IHDR ex pHYs  gAMA|Q cHRMz%u0`:o_FPLTEsssѮŀ拋www !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~y/ljIDATxb`@1@!/3+ `bdA\܌`>@ ##@ /<@ t~Bw@#BGIENDB`PKP6sK?(turbogears/static/images/arrow_right.pngPNG  IHDR exgAMAOX2tEXtSoftwareAdobe ImageReadyqe<3PLTEsssѮŀ拋www kIDATxb`@ؑB̼p6@## @>##7'@0>## @>? @  t}Y'"0IENDB`PKP6⟎%turbogears/static/images/arrow_up.pngPNG  IHDRysBITO0PLTEκi; pHYs B4!tEXtSoftwareMacromedia Fireworks 4.0&'u?IDATxc` 'Po(#D 11f]d,f>&DIENDB`PKP6dx+turbogears/static/images/arrow_up_small.pngPNG  IHDR ?gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE֍tRNS0J?IDATxb`b@0A`Qae  $&@@U|AIENDB`PKP68$turbogears/static/images/catwalk.pngPNG  IHDR00WsBIT|d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hx܍7q*XK_j/%/uQ7quD0σLtgDPĩ:F0e{oXQuht*}Q['> E:$VVЮ *֝gIj7V@Y` q $ p6!9h-[Ė +`5LkD^hX4Qf\:iu6lJ lv4BC%|\yp}"̇A5IE5J):ZJb+sTqϥ7^fֵ:k;2G'30ϗ9r|T*}97hyS*EǮٌDvU_ߞzG)ՠ+~Nr u@ ̌JZEQ\>]r Mrkҙ5iL2%ôAH\um2rtȭ?KJIENDB`PKP6 )turbogears/static/images/catwalk_logo.pngPNG  IHDR0Z tgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEG_ВsxTs?FDA<BCE5l$ N&a5m%H[ L囮~R:XʀчC JR ІJDAu-؎7n&1i!υ8o'9#_ ]M M~6Q ޓ^2j# \W|w鞶τ7m&o҈4k$lMdG(cV𥜺qېxP ߔgbH,f3$_+d}P~:)beH`>s,\^CdO @S\֋uTI{4U=шs׎4l#Y?̂jltSC?yWЅFݒ[F^D_DiJ[@oO2f$ܒ7n%CeG #B>gIDATxb` )D3 (D$dp; {yۈ1:&q!2bcs RfcǔD1DݏA('S2?LOD1ZT?l;LO>DNtvGtAC$#ɉJqJ^yU/wp[bs^)$OϲCȱj+25O%F"Àq.9E`wTYГl"uFB~6R'8Ir ,T^ *b(UM+"[;Up.-z @"!Qoq5s3p![]&h$ha!>M"\jm&sB-|]ىo_#';[%Dvvv?az|8*5IX|ss=Pn iV>x۩TJu!qb`+.kJg)yVx)GVw5~M TɩϨՉxoY1ԃ--a$6'Z8>ܐm ,uG\6,lAq;D*l o#%@F'o(PF lqU6I{ `eC6"/jze[f!h%6oniaDv`lIZh!ͣ`2vsI/N%\(-jMih @Є AJ]U{ 6.Ӑ#+.NbmbYb:;ؼ'\PyU~؈/2I֘瀒U1j@b>ΰI0rp.!VوB9&kBx)(I=Pjrovi܅-vV0N,looVWw= {=73-RNc?)9٤&CLNvA]-nH v(! @ -&6)`soM#TV'o2-TMvBjgl2z M|c%a7vBjo \x" 91<]qT, )':3a^#~#Bbk.DQ'E ؠ[+nf=R2hU\ͅ%uPWM9HegjmݣgdZ֕(#po "[>&-dBip {Ǣ!Ϯmm)jh$ Ʋ誢VA:؅f&"a'jMc`P˖*>VB@IX;h5j8E=!q0y/xFO;.+dh" )ah"b` % a yXb` %a-a-a-a-a-a-cůIENDB`PKP6!|8,turbogears/static/images/catwalk_logo_bg.pngPNG  IHDR0+gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEG_sxTsВ5u&IDATxb`؀\ wYIENDB`PKP6FP+turbogears/static/images/column_chooser.pngPNG  IHDR agAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEaaaAtRNS0JPIDATxb`DĀ F`d *"@(2  ʁh `##@1 @(.0Ig^hIENDB`PKP6nii%turbogears/static/images/designer.pngPNG  IHDR00WsBIT|d IDAThXYpyg.@,`q/NIQ):ۊ";QRNP!)T" -J*W\vIm1LHAєx@ ؝ٝ<`ހHN^W;3}_7}c_ZZd5ZZdZ!L}|cCs=|Mu|2"pKodee?dJ)8瘚DoՁ~*vcC۫FOB%|.\9B~6==%0 d⾽,={!ë=|Dij[];̬;%I:=|Ľ\Ul$vzjnnQUp80777>rK'n|$I僚7Vm`d>LkIƆ/87vz#0xmt:P(5kQU{6PI:_PeӖv?h[XUUfBy)ZItq7|чP(4 UUֶ𑝔o+(܄xO9 F NbBb7B À#Ƙ &)s5)3C!E8O.J[Zq?r#/L,-c 6݌Fh`mܞbG0XP/uiuS}+,++w)?=Js+!ᜧsΡ(ʢKI7̑0a0Q QMCT c_Eco4z+7yW},_Z\?xGm-,WAERA+e'[iqb2MVbA, [)x}Z9? `0ck%j܄i](`9R #$IzsÆ f  \xS}z$*] [mVo=h 3OQewJi? XK)fb9x襺Ɛ Dۺ0J0<2渮ni/4ם[Qd`!;xMxq%R !.*aH୷Fj/I_A)=u51B)6<26X+B]fc,s]!2, , EaiX,x'mvm- [7[ȌH҆G&N !oU Tf7odY4>H`1I :<ɹnlhV+֛B{WvG83@ʋзUt0L\C,2+R2zt3PiZLӄiXla*+-Gwܳ{gDǧ_;O7r2?ǵn0 Pш PLLӁ{j~-0эX,J/|ꖖ##{ݳk_O70@ј4;jEz @nz4ka!ľޓjG)^"+77֜s!Jd߰={dptz!yIMe-t,d8O͠ (r a:_|`X'ZZ쌱nٶu}FEUU!O4(Bw.2??HcCc<-_e<̫\N.ޡit]:XTbOG~Qbs!5-ۏ[Zo۱B B$ i.!L{❰564-ZoDi}iiu͚TΆ&T`S(>G_yD#!ȶ4{ /LS`` YR2]a-fxX[Db0g~zhrjHIIYtdYܚxA)}SV',KJyY9>CK?l,3!QJ /S*2UmA r % ; x¯$P:\N"$CC_t_++z|> /i8x%)Xgm=۬H dGNn>q—C/iD$ů @įIENDB`PKP6Libb$turbogears/static/images/discard.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE㨨Ƃ՞ҧzzzsssuuuwww|||~~~ِݽހׁtttЦʫۻvvv}}}{{{3IDATxb`au( F@@N&0!n ik ˋٺs3P@\DE V**’ S@@E.KF̀ Ҫ A QC> 8 :@ث:1PKMˉQV͚ Ҳ J >J dU2`c .%@S X=`M#7IENDB`PKP6O"l!turbogears/static/images/edit.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<xPLTE紴nnn֤GGGю:::mmm[[[ϏwU^(tRNS.vIDATx\I@ џVF{'‚RWP?6)S=="FMaf] cbs?Zv`Yqcao0f*)CB갿K~VD!dIENDB`PKP6n !turbogears/static/images/file.pngPNG  IHDREgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE%%%뱱⯯@@@ֻ̈ťנīÔǤ䶶}}}tRNS@f(IDATxb`BrNz`!{EYYC 3I @QUIIAU߄Z  . @UT%e-t,/'+@`1im y^e5uF# y Im=,ՐTge` (X(@`16q0 P b`Q>@ńٹl@1 21Mb b b-MO IENDB`PKP6{..#turbogears/static/images/folder.pngPNG  IHDREgAMAOX2tEXtSoftwareAdobe ImageReadyqe<RPLTEĻ̊ꂿĦ鈉ḩ솿w}„j򜚘aٜ{oj~xꤣuu暹蘜xyyjrՕYZ[p}n~xwvچ|zycwփ犽檔WFtRNS@fUIDATxb`B,,ؙ@|{Yę;C( d1#+F S-bZ)4o>=N cŗcFe:[M@ŶDz&s77X(-+,@@1Nx&@@Dd'r6@@LH@IENDB`PKP6kn.  %turbogears/static/images/identity.pngPNG  IHDR22)xgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEDJAXXXMRTZ1^(qƶǕIˮ% ~0{{{ӔvH̺93}tz:ou7RLhj+di3γ=E|||Z].I}Y!al a* vvv;sTJJJugr eeeV\#!뢢rrrpppMMM{V999jVin:`y6tttkkk===mg^Vv09(wQFFFf,+++ߔ’xSww0ȷ777yTQWh/oKm2z:}wɺ?ћIϿV_af0fk8щfn͞WҟS_d1d0-`jJD/:EM۪`V8 ]Z W[0{8w=n^hܦWfp|7mr@|zLB]NtRNSS%IDATxbO2`4ZK?ZIqq q3/'NK,/0r)XED^AA@@]]׍Ka-a-˥:]¥M\zRkIrSP766f.ꑕZKPi d\{iw.BZKoݺ&D er.YJVA0y둜A@-B`-5ո^ic9Ap-܁ g^`ESL&%+`œ/r aUUP+dhi4%yA"ܸ,-3N H33|AA S,jX|ˍWE-\h :^2-w :ٌ5ΥS0mBhZӁn\j*,lKȍiy_\9eU!5iZllVAVAL[??>evS/@[@^ߵ~W;;'#i}[)aZ@ ` @ s̛0I毀! J4556vtuwOlõ^# IagN^&!!QSN?C@Ҳ P锞#$wP5pCkYɔdx;]H9Պ䦉V@cJ2_y{5@6@e4vo6l(*zc>$74u@DhY4] X`p7Eh"pYy4SZ,9eƍb@9QҰti+B Z7ZMnh붙lt> r64%45<ҖєGhV6VTT+<%<%W0d0.]ۀ2EQ}X'DJ4%Zz }}}[tW(dd:G GY-F2@;`gTg ;J0e%211 hZ}|XYYC3$BYUC+ K˅+m##6mVFvYpk@X ʸ ʻ0@YO0wZ~Q\6}:<0،)KB+IjIInuz{ ^مYϛɉUO[qڠl -% .CfuIENDB`PKP6 !turbogears/static/images/info.pngPNG  IHDR00WsBIT|d mIDAThypTǝ?iF}r!025w6ĕĵɲֻune˫ʮ77qYg: )cs:«qHh$f4 K~{onڟĝ(T[?x\fr),!q9OsC݉;E T[?xbYQPmʱ( ch +ʥֈ]3gZ u'_ jCKYC|WqE up~ ē Z\sC]b-z  [_`fx"I[G\ ϒPRCEq.,3c΁x7׶EhκB3W~Lo:y!b*!]UJ$t =ߞ=^Pvj c+Jyv5;>cB` "0l ZkrA/oϘRW`1MҬG)Pmly{uT?y7wپg!0݋!DJ V! k؆ ~l}q[@,&/p}|բ*@ lsi ixZp'eB26W JkWJxቕ`0a'ZhlSP-,Ŵb^5d]h_憺dBk~/;g^v/biRᘒ[WqYk3<鉡K)&oTϰ-]631:|g-4lpDa͜aBBVR޲X ITD^]Y8 }q͎#Ɠ&cxn+y`J!pWx3n!CPQeYbMm 3(?6~m7 J I8pN6j&mnaO&J& LJKz"6Z!(v9u\m->9U46wq RDlhG{=! flBj!k̜Tdh_WJcКi3,G94^`h>$_5.~kvgT,6&5ulz&Pwx.̞ wiϓs`JiQIaG$mSx?&r߷CoFF?v^Y1Rpw'85'NR ˲g:ųQZh_ ~>0ZFc$oAJMp&woRP X²,RGIo20IsQԷoJ3移N(W ]Z=l m<ϻIK9Dl(PZ|+Wvgξ=#x+~շC]O̓< .I, iY$-"C+MhlV%tO_W~r`s#a5IO/YR<kL]xRҽSvڅkV.a|ҲvLZG<￲v{v#bz W;͛>LjpeI5<rH,_hH'cl)&Onu?h[4 ɋ_>>8iL!A?V:pb\!NNۼs<++xᅔY-k5J1wj9Oar='ճp4^{o_O.IK?f?l]fN4q\;v`H.&2YKRFSej %4 ā ޞ#`َ@΄O=_PRӏ~s WnK$-:{btGtteJ > re33OX#W_>ݗU2va|3@8w‚PɌ/~eŸa6sI~7~rz#1[#M>䇖,3X|lYc T& w3@G.m^֣ w]S2w|H.%w~9oiyN4L1FVB ~`J"hJo˱}W>> :1ϳKHVr PT/t2D_@W#ǢAӂW &o&QQZqM+c2ASFMHTe^{w@1kUf**E$زGTTT(@1h.搗*P*2fjeC@ZCŝ \~zWTbR`(_v5jt1[ @ SԙyA95mwd+k J.ps @ yvb8 aW^"@11srr,}F7b`2ffG^ 94e^f`UNc` PgY&13C$te=P (I'VAdbuBAAΆJ'"ӕ bE .ss=\|!B;XIENDB`PKP6r#UU#turbogears/static/images/remove.pngPNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<9PLTEbbbcccɂDZͮʢЧVtRNS}IDATxbBĀ.@!@!@@fFF b``d ?;;/ @YXY98`c```` CC 0C 0C ,c, IENDB`PKP6{`--!turbogears/static/images/save.pngPNG  IHDR exgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEfff"""UUUDDD333wwwKa+ tRNS,IDATxbDĀ d>@H|F  1`.'@ uL.'@00Y@\6 d; @ t>@ WI}jIENDB`PKP6\w w "turbogears/static/images/shell.pngPNG  IHDR00WsBIT|d .IDAThY[]U{LVۡ Rz%6T@i@##&>Hƒ/ƒ $1D"@FEphh,m;29s9}^ke:$&=gu'\ţ?2  n"2" "ZLe!2R[<};X,^ AfTkULM}@ϿZB>:)屛oG@`t ?Fi)냀#}T֟>I RʇE2'PgEOu1== b7R|+/ `4yB2Ep?lt.EBCˇ0k C.<09ɉ4q"uѢ8y؎7|硷{@S f1q 3%< S'm"")!۴v{F4Mc0Yaf ȉN~-U dt9y kq[h_>8RJcd A@`|%z(B/tFh!֡at'D !KSɾCqJ? (<2D(1E 17:{ L%@hUNZ[P7|\:<þZ D~(n!$B(_i%<*"A2tGrh\4:2RHm@ H)@|M\g2c:$%AdP.RC^mpPPZAm4(1x W)H,I5[ۨab ~ !j2 P:_u7ޙ;q1zlZruBo_.ϵ jbRI``n%[coc+aflنUq.Xu(5w1%@1 C> !&R踌J zN=~ZMW\/~lءQHDR@/$=_>[C()h0D ̕q,ذ6֬Y WbU-,CEUpc5`\y15 !`b H;.vn ;6`qV/ LΟsЫ/tlv1 XZwaI(W2 (#Ji{WQ _=9t"yKҌO9~v[hκLUtR CkyFhm+R>x eId%SC[jSlplJNCZ< ̭pkN(ZRe],-(J X:zA][ffXFN m<W!!$pɾ k͛w߇wo?8 t_mᲴ3`:;pVJ3xe>LBfR:΁`J<$|kGѶH T^K%i;[2А2<ʢ"YJ"Ev ?RLY?NQF֏%eZ+HI;wN".U]ܹ]""ZhmhѪ[JRJE'vI]f-aٲePʋ֜}E}[TAchpCPl8j:DчwnvV\}[_JӢۋRhm}O/}}bxG<1Fe,==\ێ7s< LLjѽ@"|7nR>y].U k _)Z+6GC=NJ_17?gN\XBc(3oߓΆ Ȏk. WZszH-b.֫Yp:ởQ9ȱmWwb{F)İR¼\žc;jļūYñ|vư~ŴήYc+ zjo0 ±kBǹ͢Z7W*nE/|So$*}ԡ8cuù_j|G*ym0㯍mn#}Ơ{ɵȰҸ{ԓH,g7A"E$O/ْraƳm(ғiSe: pF1tIvK5|j0o}O仛÷iVvhlĿğyνu?"zO8d5Ҏl\йĮi=%@籒sL5 X)v`yKİ|O7ŴrKsN3 += IDATxb`B&YVSp6=$ ̱P &q@3 ClߥɭZkx8:C+M++0KAG5AZS$J200/f{_lʜ?I9lie[ro. L7h^mD";Jlr}ݺl!~Ԫ@EYכX tި_8uA|j2L@5, Rљ3ywC\mV畼flcgD&Ff0 NIENDB`PKP6 !turbogears/static/images/stop.pngPNG  IHDRugAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEf<<<;;;...:::ۇ四888999666777𞞞䢢˒몪444555333000_z_UU2k2h^^^===gfBBEE6y6:y:LL=<6~6*r*-u-ݢj񞝝4|40o/4r4ͦ⍌///111CCYYY---]]]\\\{zɘUUU׍*++ggXYY~҇222ّܚά3s3˂,,,***փ''&f~fVVVZZZ2s2ӎ򡡡̔ȋッω˨ˢzyث988233%%%>#IDATxb`HTi.ᶑ!@묊|iFsF,@@Qc &`LH @Nu DGXQ˲  S̄e~ʇd&~v XϤޗd`pp=@1DM2:m)''竲m)~MQp;'"ݟx iθ m=o}لk;,xHf _)G s^; @ T(qgsVOC}##bk'ϼWZZk @1gT++wWz1{O !kQMGe;ys{}Y7tCL)efbb Wb/zjqbX#u݄[̊̈́8g 'O.@1UsBIIq:_y\\CzuQqdޟҾOT}Wv:@1$$rډsɊ,dgLI Дlll`RRHH$% 1W`Œ,<5 VR$.9pSH +/-WbCZnZX #2"5.&"`NIENDB`PKP6Lyy"turbogears/static/images/table.gifGIF89a3!,>HIj{ǒ'r@Y e`8|@Z&GXHWfՊe:Xl;PKP6 %turbogears/static/images/tg_power.pngPNG  IHDR+{gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEɽˡtG\5ĖzꬬhT+z\`%: {94xk™մi6fV˳ļÝyC&üṳգtZժe@lKښCtG۫aPL!ƶtSǑ]IݥîպӼLWʹͿʭwJ3;{möe)pM![%ºrR|VCdɝƕfͶqŦhvڽnK}ou+hI|ݣ|[g9mTʽF̧zQþ¢{[3 綅jƺlždDgCq1sn< d>n]CxY׷Բė= ?,ü`-8xQ<נH{I[IyC·׾Ⱦؘ@g7˪M.Y=O%T4clcџmүqA)¬bJqVvX{ày˩n^ugźp{xcIDATxbX6(@1 Ng՜u *9=C:.lq1 }!w5fwM g5BQtȫ)'H/4,5@TI[ҖNR#ڳϜj)'xW`yx/ g, Aye-,Td84RǤIz[JRg%{tUe|q*#fQ+bJc (tbٗohQvhn@d : (M[GS4l`$Wl@F 3C98;ɿ?cb: (.wL۴Hnsߎ-Rg?RIXyy؍5MrkOEGZFq@:병ѯyyU+wڥ2:Ҝ@:ȁoM Kj-Ҩ+ai'jJs"@QZ@l)d`,͂]*L7SDi$v3ٕ3%DmU!]EV.3RgUu7Cuu+.UX]C5U5@Q\@ٳRZ\(($*B :XqMfy OŨ: j8jy[䢊]<=/(OW @TqֲGƶUz>D  = ֤ be8oPeBXfh:*$, o,s_HXgٲ\Q!!GhqQhQڼG>Y@:LP8l2n_V-6(!yt2 ~ {3`qQ 謴=f3zz؀ 4~{" bş .hxt0@'RC8͗ aPz"Y˖ ! uHX#  {4Dkf& :m50  QaanX$,Hc#:"Y0e۶mPcoPn~ 5P@1ppC[p\p5Ԙ5߷GPd@1D*ެl#r"băV8E#sm߼6qҸ$Cd@ s?oI(ݩ[촛L2LMVV޾Nε2`uϲ* 1bS#0>i<`^Oڱ.@1,Q 9nX&gU)d{g q/' S`֣@Ąx_$HBۨ> edze4C.h!XBR2ߡscZ 'DikFToxOzXY ULV'jx[s`QΙd#)i 8+c @~:<tI"uC/Y$$Awb_ww#DYwY?߳' Vy{oOREeа=T1;Kvyu5;:$jfC+Xjz?,+{! 垾1H~1+Wm J CutMaY~$uUe JmFfr>>vo9&>򓰝9w!i~ );md-V TbM^hٕgۺֻ9Vۊ4IMW ,0G)^iKxP]K+~978`|Vv7GY rrCCk vopWp_7LA*hBmO[ZҬIENDB`PKP6JpG.turbogears/static/images/tg_under_the_hood.pngPNG  IHDRD#gAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEŦĻs8ziǜsljIƗji3٥sުd@wIrG߹rwCoęZ& ]KڳtS漡Զ½mDzT੃]{;˳bQ۾U:`LVs)ѻJF!ׂYm]1|XFʬ⽑htcxC&õѾk;!xK4O$iZ8ͥ]zS&AvT|f;qCSY1|̱ǔiQ㷣bLg+ t3Ƒ\cƻմֻԴW)㸕t\nuoTŠ}ωfT‰P˿{R=eڪ}Qi[`.hWʾ~MɻtN#9 ؟go@&A_3oG1±x._{>~ ЧpͶbj>L.~R/ϝnǮ÷KFѷfWǢX!ὈQ, 0IDATxԚ XWib@N8h 5X( "EEb-T|Xj-"j}`kJZ1P5ƾVִD{gɀT~/K{933ݼtX !Z9&hI! 25_1ohHhjLQ> K_^L#%z5Q#0%CLPW8 Zɛ9ZW_S%V<@۳5I_Z^xgTԌwΟ/+?yA%R*0t aeeae11+;;ls̬p րx'{yՅ 7y R 99{kR?, =?yҤkx]3ik`mX)MtLQ?FΤ.gt90gW^w^{\\j>8x^{{mܰJ) rC3gmq \ (l€?z'Y3241ec2t{;I p9UL.Av8!KA>dryyLyۡGcA3)8d`l8s v @.czy~#lB29;OxW#NϞ/nT)@]ky `E jö_~jI\_w>~}PiRk/zok'^ (.•oY~˷+Ǝ[v68!i;>~((=zZ-LV쁭[7o98B$W}4@p.f{W7W^_\L'ÑC\ȕR3@9>pWdDԨnf{2_8rʂYW;@ yGe/葧(]_{{e}MJ<\'FipIΔ4Z7ռز,)QLB5%0AlKYIU{ݭ>}ꖏZ7Urޡ;`ktg Lpy!^i_HϴgA)䜵Bae5sdQ555m?*%_1E#V*GML hn. (.xQ1?:*:jg|TH k! I+RDg~T7TD/Cz*y'OX3Zۨ_s8)ݖҠੑӾz5UVV/u\E>ZSP`)u N<󣍯guE;e)13%*x H+OiS8W씵Z՛"ƍE5-€E+Wsp.NFntrZ%'}\6qnܙe9=Qr1w1Y玔qJIr.񔢢U;lt"8eb*4*;#frZRKuf%9`jQ㫢 01կ•NY i)uW)M+hgΤ>X:6:cP i!7龚Z_"zӀ_|@E,oFhZ[͛RW@%mp2>րa5vn3฾h: ./?wjܸZBQ5$SOޑ\dC >eZARB-7&Uo&G ERAxGRy`nJ"6I:<2690=@> vF _mw!@ rL'Ʌ::q![o!a5m2p@ 3`( u  2 7P_wXlr[PM[hSRщ0F$жK\BX}/YMXʞãm ڟv]$#]Ϛ6v[JAh>47v".Ie{副O Ggwv>/NSa*Dru.xJ']-]s],t͡5. ;\ )p"p}zA'l4s"TddZ}vhN :.^blw2`&^̾iLoZZ#gх0ꭤ&SyI ks+7',Z =91(ItxD .Az lYI,:%5}h!b'2ǰ&Yz [<"E<.o;^k6^Y8fW 'a,6j{ H< z"ZQ PbL@c1L0gEgn Htdt".'a D0} -Û0,4gPтɬo8KP-CfUZ)nBr A$Q5%1\օKD\zM6ӣ @+`p{VLYdmk ٮ7$KgnӶ4ւ͠ j?ZtԴwGG$E LUj|7%"ܞ#LhrO`f"A 8F%X^6Do4P Gz ܍q#s$҂Lϟ@7~VLUh]nzzczplOdg; Z@[l-fX`0VZ<|7~OF`6­h]!!)@yHk3;[̹ jj5t5[Nߺ= ~lIENDB`PKP6_v 8turbogears/static/images/tg_under_the_hood_sans_gear.pngPNG  IHDRgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTEĵźͣ쭭a;AtUlJyҽL!uUž+Ŗ|IZ2E󰰰jɩqd徾1v: Ѫͷжe̶Ҹմť˾̭nviFүҡR(vXۼ뽆hT+ձ{^O%ȼ丸ǾwUq\3V-N$Ż< ġ}`αmd?žЗ=mJV-˲5~_j?rO~`z[Ȧط8w33T)ϵҷϾ‹o.ϸճpOոظǬttostQW.Γ6˰ģX0^8ûúzZ{\OJgIDATxiTSG %`hR(gvI]Im4 ˝)-QKf =!L10#?+SlW0Rq.7 K#E19,oϞC鹼{bN {To_PpJԿYlgs O?&G"2N 3;[~4/c(<t-!ub[awGE Hcq[ )lW>vsIMй% egP=ѾFSa[}]@F 34G% &tιcG?a$ol'ȺƼbų$HrZP1౫cIIQ ict;}ptI^?_|pyxSJ?bDwۧqeHf)h |)/Zt}}>"k{fRi=EԹ3W=9,ƈF$NnnGO ܙK(MkW8+3Ry2~śR?o5\%;Sć.\4 ԄǯI|ϮG8w{L%Jzmӟdn!aAIp;|ⷢwOW4ܔIs$H%-.wҨ2 > u𮟶ޝZmJ(UWE8]낶)SQz\.ԛ1[!jEtؖ_6^ia/Dް~4- U}>"-QF Enii5pۆrqv` kr@aڻn%FJP?d⚒nh(Su牘ThvhnH9jC4[GT^)(_jd:=@_-:Y]E(` ̶ʼ5OWA诘NJIe4LE_#uOʅa+As/3.%_Mo ig癁Ebim鐴 j+VF0̤y{^<"kAu`iaP(`cB $zQ&$AWTH q TIVVWaP A&ls ;wCsRT(NH&m|-Mɷ3tN&$ *t&piZBJP1o LUV/)1X=!֬xUsweuo|o|L  x<9պXxjŔ@)KD,*dh'*N`y3 :J190̀$oBRZx&P L%&yx!d_KJUSQ0p@3O55 vMU[a`յZmu1aX[FU[îg4֌Zm3((((((( 0!BtS|IENDB`PKP6zT"I I )turbogears/static/images/toolbox_logo.pngPNG  IHDR<7TvgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE˲zJtSrGwhoiG½Ӎ4hh+ S8Bż컱ΤX1<ZlUh;Ŀʻỵ{}Sm5õZBbÓeɻr2ⴃRԷy<˹~2R$e@{eìܵekvE+}]Ťr>"ܵͼ\~bĴmSeSY& b=aOxG%&ԅB^LvԱuǟcͶruJ2bڬlJΦ"W/s<ÚN#x5gBCoO$tĽ˟t_lYTձohƹ}XF߸zȿJƮU0ť@Ϋ岓Lͱr;ڞqEȚq?h4IDATxTSW1(#AEAq@A)SEEԀz8@R- T|[1ZG[J$Q{q5sjRJNNw~{bf1h Ơ1h Ơ1h  h>WA4"bolD+^tk$Cv v=,(6:4O&0e\ЊɁ4Y޹"3A{4~ LLt/nOwSQMڏj}+׫`NO(k lȩVצmf-OY'Ul!N k}6uͰ uBvӷxerf{mI9ԮW01ZOUN5ڗJIRn[fv~kY*PtPDhsϛnbf ↢/Co^+os꒒VY/v"]+g>(҃$!RN$ ~.ӱʶ.>FFȆ=&$@6rvqNٵ.Y\ue4Mfvjil8 Y[@M-P| ;[$`ڬRDh6Ғ;s~zgeBF$8~R\xP+.^B_Re6Z~w1Zq]ęVPEb)=aa>YE6H{+C?ϿF4K,vHY$)}8w35D_.9Yo\v 밐Pa`0Tf=.4u"eQ ^(Ru#m{r}~Pj_QLU{$6Rc'qV+}SHf4vz#(I*$%% 88=6DmFC0n!8AA ncaV?ؒxرcWzeg{ ;6<~y<^\<;p 7y%1L3oXs pRsQk\Hwn$]Z+MG%x!,5~\ň&؞ĪUv'eJW!!Ȝ\ch0fDy=w$x mM$RI0MA< s<:Q{dؙ81D³JM釵M]6c>LViZoIE 9-r&Jh)]e+0|]Nr*7ih7+Ldxe` x𞍱 kGt}ٹ[rZؽѾF@3jkuk\s UJC YGb Z"+xq0 tnpܒ|$jIވdM.jV*)#![T_9{Fm@BifOHbtp`BbjB4Ec4.^SF3mj<)n,|zmU}2 WKd !*px(CRer}( >nWMkkJKߖ_ƹB>wN!a^wYY+1AG۟?]vSUL[ٷQ3sk{ D-[:!vCγ9A{!Ñ6p/#r8,#=q㐹>gN21pֆPJ?aY_-cO&kGD G3ROwϻ (_U$"yu_>zi4eIІNK9Sk^I5~eEȯ*T 6x(箦'jiG ˙#!%.__M]xn$@_1A +,{^[:\tSTt0p3W?uu/sޛ)PJyC˔_n-S4|7fmxVX=F%t]ǫ>Rnoah c](o7 uɁըf>ZzDM*3 qw ݅ Z"z[oޤ[<%Fa >T" Qߗśv *]P {]}g *1y㬉l:$s@:]o"T"ѨA"HA\g[~Z?]}\C =J~ PzϪ>|ĐܲCo3IW%?>s_̷Aɒn[C՚eY_l6*j3 'w^wˀ!>f,=+w]=_8%?; ;atwF@ sF0QN,*_j P!o-_.yNF6x bեn2?8x#!`g~ ?}N)7WlQѣwםf2]E 3tNć}G&4]jUޯx (F"EEӚL. Y<ĸb rc1ԹY-|؁V>kGWt.+[gxG=/s'T"')P<SwePl 6/]AKO0[& |Ysm-jј11& NCBMiKQ߲w{ϛaaOozNq7[˚d9uoIrm羚t೛e:0Ai_`;޾Sc_r%#awH3pIU۸>6߽ڗrroJ[0S(9u>m1y ~ z9ZӏvB0ָ2z#y{_5enVB%J(sWAC3i\%{6XWٵ*J2)I#\y:]4WuȺ]>$KN_%"_P4E|zZK^'7A .4m:lF.nDQyi\dr8<A?՞bl&0@O<Ѱ)qbJsZ8%rw>=tιwo+5rl$=E} zׅJ<_.UdT^o 4@ 3:&7Z[ P3i]Rgƾ aVnA?%Ch#:+־3}gw,b|g;M CH ѷ50Z$mFzED3'r />,9:C^_C`\S] _oDt_XE"ec=E{UAa>A dBYT$2GnANh2kc.&ETj% "';E>/mvǵ  ?$~%Eű% u#0g7-o=X"^A,2/( 7=y/|<7lv8իBSfLMemӧu/$@Z>VWk vXȏiiSi47EN ۉTޕVu Fw7h[A  %&m0`g(i~%_e1 !@{B"? [2%/!@0~Ct;uѪz>Bž Wִa~˶;Y]z.guhV>[9%A OM)¢WS31NCeCߞݳC$oJ+ro w'_n!ȱZ$:}G49ZP(M#ĸN~ukyiaW7I.QXw>u>qbɶ(N;u-¾Yv Y@{~lj/y;/ʿ#DrS=O]gR?6_lW`!)mۍEEORs+iO4vU}|FsJ5H~! aZfOWp.Y5P^6w++t5(F-Y >:O|dǦY੏}sn70px 6 @ $ZWN!٘&$J&5)jRjy;O;, +íU9t i{Zۅ} ~B~m;]/+< ;3-}p(Q9"vu:;Gz:f o/t^|P.x|/4ĹVC@{c(T߷\ko0 ߜiB6U&TWs~9vux//.!{ϴË[?m_R>~s8{MLj5$7u`~o*ZX\QQi\oܜ2 =/zޭޟ6/c5X^5akRQIrk~ Zdx=jDBJ`ā!#j υּw*a YV](b*(&8y=#>NOR>-U'_߫O %F8d[-SP @N~7WϻYLIa |M$5LOzvV`=F#M^C'xq< D/54!o.a{ݐf\#+>%oK7jvNSWHܸc=s$nbcvXESW7_Q`IyDlF?f}'k#~QM Bj*S9(^2[ ۆi<5(EX9jDϒU(lk+ hUE5TGvQ# c|Os J]ϕ'y ɠL*|5z9[Z _+Z$omFn4o")o- ږ_0ߪ/@JƄYc{2*gjS +ӹ TZ=C1Ree(+j:!ʴlKD%؍D1wmU-%Y5R|> _ýO)AÓ8>V1RGr0Hyg?Oc2-i^=` QT`'Ɣt׳/w %wHf#hрsmܱAScz~4ox"O`{"g"pدRwa,C3BM?0: WF_wwvSp^n8~^sp')'%C%8|ifYjcȶIC; +i ^&A @ (A%D? * *"!63cr(AEj{s,qnVi֢j/tڸ}kBˋSS}E^Sxyc-)ڦl&XMz%L1T{  KX}\4.'Lgq0HhQ0|ݨ78x$fj[W6L^MGld u AMF,!t|޸[yg>6])41sHx~~]L˧zʥD L1|鹛%V4V."2;Q4b/c"lnNK{"o7@ &.k$}tؗ p<Ķ:I0zM;M,nٳ.Mn$"L{<"/|fG1Q>4 CJ>fQJYKTs:}DF2&2"|K.MݍS+4mm~ĹDyn${cGbk̮Mb؈MyXސ|wI833Wv.> #EzHHqc1Kʤ$Y}*z Ȥ)&\BG9 52$cN3~ɡ)L>|6j XHth:kռ7k2E,3Ã\4!Utakx8hix;GEB{FnI˅oV"!N_7r}z=ˇ *;ߏ _?*/uIUXћdF*\]?';O{F.cQ 2ynYg˪gTrZbWuLqg#,hd7PRŖ=RIW؞L>wBYikg DrdJ~4Ui[hhhH]rQRV3F= tPm݉@P`|?~w*xиƄ現L?ޘ?I^-Reׇۗ?^تvvG0#%:<߂J9Kh+ m7q`yhb''!PP()N7(i(h !-G3̛q'vA)y?o&YǪF_}gt=z;~bN~H'qo^F#;d 6Tkò5X< -EکhLkCHp k#4i|]er*_ 8<(V/u !8Ǘf Y4Zrsm}!/ȯmif7C >j,W;O=E+ZjO|W~Q.s 7s\ƀcڽtX\%WTᗄqذMg2OCP!Z.<,W5Mc*MœMܾm^\;\?zur.G{g gUx]}rYToo.o~^ق[\wgl|_Kp]ҕ ^O2 w69mA"-kX\ R$9A$NĎB8RDd̸=WS3 a3ay~uի|淋70~8ɶ^|ol8@U]! 틄OQ岳O"k?}9N`d>Hbk:\2 8zr1)7m忬k[!FXO.Wg `&T ]5k q-ujX; ^ fד*ê_StVSG?9e$C9y`;<*ͧ;KHN'YG/>qq͇/sv}sip'iZU U@bMpp68lTUƉxq *]@TYUUN"'G:?` vv$;ࣃ݁}z y$غMnHW,F}ܖ'NB?ܺP|C8ՅYY;*ȣ 3G~{Fk~.i9kEkOR:?q Eڬc/?׊49C* UXh X 8E8.nOU"쭡6`"OB88%ͬ׋HmHzRv=A0rjtf~xwЕ'6Z]ˊ@GR= nDp7]+?pO#Aĵl:f1ܛT'Lj!4TW=k8t k8. zX?X1SNۿkb"P k̞ y>3@FPoTv=8&,TX8/*pI;}4GxOɽP&@\uH.[h[yzdZ8\9-b|p5"Q]6x3KLq91Xr# `l-j;$˂_NREݻGRizEla au6*);z@p!2NQx@ ø;8CU:h;2v:n. mlCK?˓yj~Mtc :_) &7B2Par em`Yi(8ؔߜX{e<7؍"RdFe{b; "V903͟"!"&K7n `2:[!0Y/6ѽ\Ô!LRIax0_!EQv4kd/ښVPMB]C[>@jD]8Q;$6NC C?_Tyz&m"~T;~ÓחWW÷O?ʯo Ui[xmm [SQMkv,E}ms|~սTKm9zs@{]b_p.h| 9. \R0~ \q%BW rq^Y^") *2ˈ?"o+ھ\ϗ;ﶊ/T>/wR|Hv`k %E;3a<_sqˉq}Le|B[IPž2±Od@[|q5`NkC+(N|'0%6&IBS"< ]NWcb*f ?oBTgʅr T\O=cry/mN=%?CqŸ7w5%_YzAp&޵v=' 2۩\/;`p[r o,"!Yp,)=|~JU26|L{SE:~%a嶊`7 76&\&fkCB=D 쓱t0xI_]-/F+:9c PRXxJ¾D<n@u;&?j~Ŝ^ţ'o_~yk톾rw6w =`!`kRvE|\8yiWLjd4a*Ev0-ru!w~-wg0 aoqPU ށ+O“$MH3lvRX$jz:oE6/dֽ7߾s?p)=U%`v0#F#pnYz.:l<0|Uݔ x>e)fIy[qw -X4*v%R5|⪕ éޣi8ɮc U3^Et)hQiߌ%>?0KWHoe+u mX.3ۉJS<sM=҅ws鲜ms\:R]f Ns$B+B)"``'|"Ha,[y! bԢ#-FRjX |3bDȮcw]" Y[Wx0yn]γw;nNSsUel^H xo].{mbo{YYm ]7Y^VzˢAnJ7|\ @,'a<zs>H魷^zP+thvQd,?6~G;ݞ{-1d.ƞD@ E.& i ?Zy^-T,(r!e$?nJA:haԧ8+|O^ދTTQs%#$;0fL5#?RΓF_Hz//Oa_=Ljeb T7˿ 9 i'@8 q%i@^N&Z}I$?`7>ilJ]owɗ7diBUK DRབྷ93a|.k%j'\pQzp(' ;(? CUPFDZG.sV=M #1_;+|}{LVdUն:s(Ioθ/jۋej> xhѮ|ۅ:;ܰ.:|tg~N}p?-{ $v˦ʍ.9\ viNn/ɟ3G6QL/#wD _@zR8Tm/ա }ԣu7)M ,_-XӺɯDj ܯh"/L1?E_<رROg2KjI68a#6w7zIF+ǦN9/ܶa *R8]EOEwGuP貋 qd['fHL;H5BaKL > >_ _noK7*{ F>n֋ע2;"3!˫\eޖ+X*P (Ŏy"\#= EƑণoJ6u:,FG?zb]!:3,1Fn0{Ӎ.DP.l?.5`=*X^3(zsHըs 4Z,^ѕW=TCG/`+ٿ&vet6 `[HsϵGgYa&zs×߶q:L7_?qTjOU8]3ASN=;1vx=;# ד@4<>˵QY7o&o[Wߋ]IN0Ԥt@P@g܁D;@ٱ<Į35UI3þOBca_.!afk}@w݆/$//W%y/8'!lUi lE[UCg}{PErE/B Ym1/x%86s̰}Yڝ&k=cpB?Ɛ"[Sd)eܕQT]r$bhtEΫ#ϼVFgo;E%H2;@ȟ @ܢQ[7\%0mF=#y>ErxP="j2jR&{앳C?eG`<]amX0\ToS阈KlC߽T4e,9A">A؂>; |]DBl>@6. /'0kԃd;\ -R&3p zLRrF,Ìe)9vp;Aǟh*q"G-)y}kdS)Qe;ijl-?2l?cGYЏ<Gz#ecBcw"e9o6|(x,M2SB:F#rD!$EU#ףOD>*ʍ,54nhWgṓطWPj2/&@,,wv3Rv`~XY:s₎!h iұmB~uO &>ʮ %;1{ȋC_WfxӶ >|ɻK)s'͌;yS/ KԞR0:2+WExps>sz*0W|/HQk Cؗ`UAud9ԣm(/T<t ĦK#Pk5ut?hbEC6'(ucY}SMgvU ڜۆ7(j3;kg@}yV{P- CwֻbkFo͟OB_=]nNj9ωF$) |RVU|y ±帹pX* m$ xm7؜,D?.zhDc7y2^rG}$&BX:EG7ƿ?o6[NnN>VhonTQO=eI竱ih'zKTC2DΖ@Li`0lH^p$[H!/"S3!zA~ Ժ5;z&/$%C 7\PIj8A3;~UWV+.Q([M̙N[Xiֹ5"+]ǟUkE1PK VCn[+FCS QeӣOʿ]=nr,Fڐd2g^Dz_ڗX=Uet#UkS3.ܰ@'IXoV7;dOa\{ Р2ݺGzfE`Q=1 Ƒٍb;TX^.dez>Sk.2W@vX9w&DxM1^-m/!qu\YԳ{ζۗGfŸ́ZUKoU^'ţm6]_CdZ7bղx|)7>)ǓyZ<ϸU|:Ko/ q0~ ܹ6 Dag.vPD D ej<` $$6PaAB-s8kJhy9s|/]+= ^;X[gqM{U죺`B0 !70žl[Z5 gE+A]8 x"|,_9Wa9[|:+aq0_ԽΊyn2A"is`nu"hPw: PNI- l0@< $__M@*:Um;ܖlMj.!H*'3gF=؝mOv?KEu6c8K\Y:Ɓ OqdpơUPӎB鏑nX _hWe34;h3T~ 8bpnHeꪰSՆ|2(ǁoퟱzLá|Eo,'A9u[þN6 e4ž[>+/\#JOKYX)ϫ~M& Ct+%zFD (hۙ2M3&~$!|#*#i.VmZk5<5@WND|T8 Wy _S}hP=ILxtckM隆5wbqa Tq4\V 2(0C {pQ:Glbx?ϭR/Mb}̬+ 8^<[l<$<)T'(A=^MK~ RK&~KĬq`[BZZE)Ό4sp5>] In˻z9ѾIomUHuQ$VJ0W@CJ5cbX6@'Y%='`ưD콖^)rdO|AYlA{sqE9 Sy^k_ܢvt -)A뼚L{:!CBu>ښi\Sy_ɭW/*義ooRz120_ wlΝ j5L#S_xc/$Ѣ[Bp|o< @ܵ#I Q%ٳldBѸ` By_?UTTcۣVw׊^?b4`rbGtw(e{4A9M& %jekT%[R}iFʈ[0? { zG@ O\ >mFԘ1F,c*7.@X!eV $PDAQNF}Cf1PX kg(`(IL"z:m$Ko(F';+I7W ,&}=-x+ш?={U'm`?qƬSA]6'/>b(<66`5c7/5=YQ <<ҕEO;qJ#2*}Qi%m$V7-k5+/1su@U-|R+\%& G^рVU3H}A`ۤd̓!+ìN M }hFEW77=Bզ2LJB!`.hR.~= &/vX{$i* U-B}3~􉨯XVIur>nilJCAԅRd$Fm]8.M k9P"%!l0CF qq,ߧ忹3:ggJKPВfsL>OS&dcª{ye}Z|y4ffxoʣ<#~?,1{=bLin 6Fgp4H궮E>g{ f9 mDDirĸs<:xqnu]knea{r"66l?I/ ֕J [v>`p5f♤%|D>Uhȕ" .LUX{Сp nQ>Yl ykˡoѲ0~d8 %@/6U%}lR}p$]KwJnV6O򱫧> w[+[Fm-$(y+6gKf @,5qуチwg|+Ջ}Cuw@(hЁrdGuc_Ҫ ;vu-|If߬{L}aϥe\GmNV:hpG+gT׉+1'Iu6J`CL6Y܈@J*UHGl഑&KCn/PgsF_[8}Ѫ,v{$ڄ2-I=cCl>ljJfuED(T,S\_Tǒ+{.wЍ?mȿtAsG*B)=O6̕!^ERcdZx}"p^eXRSEiwø+rV+E#Q~~ S?v쮓 a %;WJ˥;; *xྺ4b̵mք}m_]^dCIAFY\o鲔ABQ5ܼDv_hE3j%6Í ABfTVth,Z|)lz)eIa_} @ܵ4 CAΧ-$Ďp)س`m\NҴ4]X~㼌f"g&^;E }K\ u]f$_dUkg2oB!)v"NK#~OE( kY5Abr0nKM (ӢDuA*3m Z{=9?tS%UED?y?Ccgސ|QؠXC1|s\a$pĞĎnR܍{ǫfpϠfp;s-ƾ Iğ\%As{؛CM˾zn |kzvGiqxr@0skY)هz*|Cq >Q vav9ZUrt0HWi0 f $KV두!j@Yk0E &ac= Y~fmѮTCS h}{k>aA״T+ѷͲJx jఐmݯc[%~OcPWaï"ܒ1Jf`[ʲr`ڑ܌\ؾj{y:{|?w19S{¯ )n;~*0I1ڀ' $E;WjyCH^ y㏠./@L H,D ໳k)jUT4W!^!#͚eI5͎=Lzr{H="E=X;Ɇ'->"#Tm߫@ƣsHQץ :m01 6D6g3 *!Syoq,(OYKfyݼmV-6 5{-L=_~_4A7l]_:y2k~<ڵVtUX%O\v 컆Sֽ!LjG{]NA8Q :GD>>BQ."{3kֻhpaV5s{c߂ד߆J^^$ͭm}^/J$O7,H_hՙeE>/G(DCV寉3q>6!NZNyD4AE-' p%`0- d܎E+gswt*|Yi3,lÆبg8T(:պ4#/u-lЧgHȰ&z(ssD"W;B{ -t`qA~PBwH㭓i /R==-zU>Ovs'*C.%Ni][ 6ֆi 1ԏ2.0QZ=?Y(9ϔ1͡FLJڞJh/JE1..V쮃~󕭕 A eWWU;A 4aw51Qà3z$Z2-ˡ(e`Ut~akDȌ0zav: 3iB/܏&U.vB0o:5KWsҐw/7{zdg&+;P["[n;-R:liܙ04,+agҺ*{aK۫2+S5ҪlzE_U4:x"sLZ¢Vo` 6#%.Ƨ\dgo0 \.{O$'+;{+SzAOy\+3xa\2»Uۨؑi*rQQa 9F?3 ;((VݛEs&9-MVJ]i+ˑ KB  O<+z'h;H4UňS\$j`sR]ي, LvS%G[p~c!4(hj h2oE|1K3~hB"]B , #8-I|^qF/TRĀ\pA% (p&#Ѧ\^)}9>ob7EN0p~|G+5ݶnx|xM #ÎD쟴_޽W ƭ\ڝFbѷo>~+)'A 0XES ߼7xՍ{g]0}/ynAȫLCAoEQ.΢3eC=$l<>01P թ(bEgD#g憰U}QHsiܝUHi`9pp0q6{϶ h3uFVTLCPj1b>ُs,L|zh[\2Ξ&H-4e-C}"Y*fuM( w8l]%6>vAorg^N(z&C̎' ̈MZ*@ў+W maT\,fJ}&)3c@Lv!HHj`$hU-3UJ>V eC)G'3-/y4mΰZy<:X+U熚 qۍy1"dzTh #m_:W?9~ǩ \V+ҬSqFMG_2dtѨIj<2SzԮ~_X&b jR9KO|N~h\p@9DMvm^ Yix{Ec |"mGs \)TrtEz<߂{8M>Q'C;< o/l~T L̨Wv̢QF>=׼ Q=ܷ<kw 6SeNB!LDzy$jPNrȟCDFFМ0&0heڵ HNKQɬ!k  T lU ^@ (Lx[H+mTB=M%_ꗆjTS!7Ҩ ܖdLTmjD/ME ;#aoW|Rhޔ?eAγTTx dk,g-qj 5lu;c-X d 3 E(=A$g8Yf#HD DCn,_ɏ|FWM7ʮэM VÈ2*#X^ \ԫƜp:->SBM-. `7mx[?'Df726ԖUz:cO /^n۰^Ƅ?o^]! Iz<0jr}~{y)i)6RiWûY1~.]H8ܒ2~_ѪYvghbmU w1y fY@~BC`iR8f쿳Mtq3si=Se?jvy(( qxFނGh%\PD˥mήvMz"ȱb'gF")ݞy\]ڄ{99iKIC4~DfSC!!q].ڗtݤT6ܗ$Н,>&7Z5@NF!Fe!_jC_JMw`g"p;_Y0J*L#xi٥T[B@@{ |-؁ c07K1z߃q=އ|,Zw9Ѽy4 kUZf/w }>ZTGv ٗ.޼]δMU~yz~ݶkw+AkZu- ,ĺ塭ZVU뜲'-n|oXa vjՂO<~ HB.Ym_88.lFmn2̜93oO.;r}[𱤷[GDX+hXeiul}6v+ \oFTlsE}1Y6IŋP9|tL\UBJ}LWEA3& ?4dR n.)3+sQ!S3PkaЋM)`h9)#_}0`|re#?B"9gnv=miȃOʒI7ȦR侪w0 :֨'mspG_=}K#?[kq͗}W.͉5a!^5as'껭mmOן|_;{b I`XFH"( ] zi ܃"E( QB]kdz{zs3̛yw" @ -Be.,<L9}MZGUu iYJ\x:L+ }))3go ˁ0%v4.;>R+/RrW~6M3B6ĹM.e1'viy<ϵ ;{ /?,F-,XYy/1콃P "`~b2Kʄ`e33جrn2,h@{M|} & 6!KiACZ*(Pe=uI 6Fs8R藅|`qanC)Ćy+oBh%J IhFf{AƓEQE[|AݳOZ}3Aу宇Lp&1_!v~]Y/&%5MƝ.k`| $O(wSɜ9r.e-`]肼 s43I ,V- [a ôPF'yl^7SZHvv7KXx a?`cao/v3|a@>ORC&0yw{2VQ3/RС'l("a&ϧ5MWe6I5RLRuDd6̔c8<`gʤ 6WvhY~ΕZmQ0 F(`87M=pϟ֜bSYw)0uwcf@um 33 je T7hS_?~3߿&6ߜτlHw ??},N=+n|9X~ _1#.=#9e!93Mp|I#ZEA$#$Jy YX€s!_so-GW?x<?@)D09&pLmKs\ #iŽXH:k=Q2@ h&JJIL9&'jxcn"xɊj ``nVnj=MTm1H7^TS.o׭. :O O;wa0 '6iҊE,xA[]}QN$j&Id8$`·  ֥bٚ;aBmd=-z~2b|&`mí#7 sz_mw1yp8|%6z8 s-Tq) # ^,1Ҿm^.|?xgGيOw)@ I1tۍхUAEP4ClLbŕyga Ola"qz2/#1e3HyWtI;ӘؑR&k0`|eBΕƘ,j;2 t`2wqj )+0C|Xb 庩gxmQ0 F(`WL$Xd`:⃌c9IX۳O޿{+&.l1#i𱰰gl,5vmœ@PP /PȆ7Ci)@N^Q|1?>2}ϣc֐h 1vh7 F(` IVV֟?EZ^exRt%Ske>{~2!6I72 Enb2! iAm59/ߘ ]a3"o!j76S3uJqqqMpw*0=Xp]<{ G'WQ Wj9֤G fA`aUnm*}w)y!qE oVk=tJ1 T%+t74+kϋ|»n}}ɲ-_?jiz^z,އo>h7 F(`!7C}? 303ߙ>F,5,Rدݺz 212 iI`BBȭ=xS2 vFƻO@С>>0F?^M||r.Pޚ$@mQ0 F(` frktٿ_r:tX ۏDA2B}1 >9yYi}qy˗/_M:xڐO2Y ozXw=L^*|af6]m SZ~0 -6.0,4`Q0 FLH Vq v>:g> y?FV?f`f^oN i2m][ '@vl ~ |/#l~`MFO\>t5/3 hh&pߗo|@{8F(`Q0  8`ee#_Y`f/h?_<&uOH'm;dOqV?\@-:fo꿹3I~s;6/3pZBΈAJhoQ0 F(öeFfx 'ۙ5yM/Д/[&&Z?t/_~߄ iA|A>H/_>zyEW~aaak6lᅳ=𧻓o12'ϟ*VҲr@QFvh7 F(`c@ޅ4 |@;;;D.??~2A6p;?? ?Y~2MɃ|:u8SCߞ ؒnn\.|qT5g~{&?pq0//Heãח\^g-wF)dumwo^ztސ%X#A@mQ0 F(` O; r |bM1֟ @G1g9 ܂c?2nBcE?M{3 : r_$i1y]p(Ǐo>_ןoo~z*[ | r-7#+ _q&P C˕Uu K ϐD@` xە2mX8;>o HE%Zͪ,Y=T7ii,_zcsƻb?vSuqe*@˭!o "r@̧sl J a6ɗj0 \e׾@Hq @~zo M.0"V qY;q+.y[E)eUf!{)_; w:thY_@hōnv6@U;r)Oh4Nsv&8%cmC5<> ”z^WV"QF^dq˼u+}֬ؐ?60l-<{ȷ%)d!x"H“ Ի9_,W:l%Fd`Q0 Fpn!Ղ< rǯo : <[+7YI g7ӟLdpp.؜ǿ,Ic/Y8~|z" ob{|K{S?#p K~g1Ft=k`SG Hw*QMf11(j,^DKA@IA %HQ3ʜ˽o>Fh4%ò>)ϗeRQH~u},>[G`IMEiTM23"Go2@0a(^e &}b@J؉.ZbqW=P'o$ao4kzna:Ղk ݫ CQNjZT*"::>R*Z67%ߜ!̧((Z ~pV_0Z|1g ge,fDlXKR 7Gc~jQ= 76kEi5LNz}B0R~!gc!Ηm۔f'Qx-[^-{箂0 fRZ,h7 oछJ/Ӥ7S8;J?rΧh4oO(;|*öm5dc o7jܝo}~ "|1*!6 i j쑀ȱB [#AJ5t@g"N^FM `]qU֭B>prP1։nwV-h7 F(`ci9AzpPZI˭Xc 5+Vfb&ml@Àm4OX2 j _9@7q}O.̬@-,Y}$#ߟpʉgf/#^f^RU:ZJJZ{Ap[) Dg' Dh 8zptK;t>AAB/l*@uGGDl8ɚe֍t|֊e<(ÚwU)0`FRixcu\-:6ʫ8V;Jzn6>{~ |hoQ0 F(üow¥m` *!/$_W%>|s%#)Ov @ 80c+u O_=~(n`)&%{> !77d1# q3&6(`Q0 FPy6ODwx>o83fxZ\gfddf?hUL,ll23,]XHAIh8ϡ$gid]8@F(`Q0"Z{dy988Ў`ˏ]}sie=?acd"`+)lۍL\޿f+?wvXc~GaVvsٻL c/;?@p'eMseY9o߾]lQ6(`Q0 FDƒeAz]``LJWk};/%x'_8o|U+(1ω3c`տ*~߬x)~+?~1|Ctm3ן?0|xWL\ (t(dLڵh7 F(``# BB.dp]ׯ0A`Ӈ7^cddbdbcR4فM=`r" LjhmQ0 F(`e@~_!Cp Wz@fAy- =Q,yTohoQ0 F(#͇@ƒm7>  <ł='x)K,M[&dr  '#X,iRJY#]e;pzGpod6G9p%w`aG.1 (9VD]z]P9]'Amе|^Oty6BDli@ɩp8^= Jt]φmV87<5s^x@he髭蠄Nti7Rϩ~uke;˽z6|3B ~~gz>egT*g}^tMg@[qZwSX܌|1Pƾ5 y" B~J)n5midQiW*mbۏJb pufr U|X!Q q3YySQx B.%U6ح2vwqME@LǢ:pF)O56՜٭F4֖ݻSz΄qF|^OR}o=%sA%$*P!G*jҌNj0Hspj$R ߬ }, bϳ~( Dϳ$_8rzzuܷlf G4Q|QzٶՕ6T[lOLcxq.!!Q ۷mKzB3(A=wo(9 JZ\Rd2T:χQ"ط3xv,ܔlk̸v ҙ@E4!(nz4ί…K'Otm܌fr/l -lF2:th 1ܹ~):;kOݻ{#{?Ua߶{~Mqh! (Ŝr L +@)v@MwHu> =gz|0wc[Z-sX0_ZiaMc`DGgN֫c-Ws1srs ?q.u-[0ّ(&I_Q4Úl^5M~k<1`89)1Lݧ/SCCx4jBE9 /31lhinJ777\S]I*l2!I@ 稬@̫_|^5}q}Ϯq2rP1̩BFz}h @$m M:tO9h B-C4h@6!IAA@p&lS0j>;&kw0fLb6`ɕE+BDas ,anS3F7wܔ3*s$1  %OmAl6SH!(bd4 YDž/S`PH$|HA S`2B*du|qԏC}4dݽpzƊ'&t:] zףSJlM<F lATJa42 d4M#r YT")*8l8D2宐$c1`scooUK7v5t%@x$gD";n[ `X(qo[cP8"E86'O_jXUշpt?ONz)?,sT!K,OpS#uoww-Uִk"X@$g3lSҪ>_۴EtvL9LœDrMsY8~j}wtSX~AX侇dL3 ŅQ Y08::t!G38t[ s_=m#UD855΁_v=Bb5kADcCZvFfUHp'(3cdtguwvq޼b#{bP`"/& Vd14DolV3jP=Fcj5$Iƨs"?=38Srwxe&ŀLF@.xیuTUx(3g@)l&3ZiH$MB7gw!q!>ˁIyQ D"(Bc d҅0?gXRrJt٭ܔc=G+f#,/s,^xg{V|Xy|MM&)ϓQ0@@I0K?tgўp %I?M tLF9{Sz/^>O5FQ[lࠅTJF+y Mf3z:yKcҟOYOeI޿mh Xfݎ$gYOKH%r0$p,s =M:K(/ǂcUo 8/flolYkonM )pl eU$ٸ(sO=a[lH"3G~wEPyq勮Ic} ^s*\%fTto,+h2ǃw# y 1?_k% * {{HGĸ_X,6u]R? LMܿmײߒ$] C!.@ n &hapxTE2@O̙<] B藇>(Az Mb@@s#Fɞx_/KI;`.|n_JEQH0,Sr#ecPIYL uge9 u"ǂiɤ|G??)Pйs9^|gmePCcL:@ƄLJg-Mdr٢Ue5 ]32XǗ{q~*2߶o 7IENDB`PKP6$turbogears/static/images/__init__.pyPKh62ș%turbogears/static/images/__init__.pyc; EEc@sdS(N((((s:build\bdist.win32\egg\turbogears\static\images\__init__.pys?sPKP6_#turbogears/static/js/interpreter.js/* Interpreter: Turbogears Python Interactive Interpreter Based heavily on the Javascript Interactive Interpreter MochiKit Demo */ InterpreterManager = function () { bindMethods(this); }; InterpreterManager.prototype.initialize = function () { updateNodeAttributes("interpreter_text", { "onkeyup": this.keyUp }); updateNodeAttributes("interpreter_form", { "onsubmit": this.submit }); updateNodeAttributes("exec", { "onclick": this.multilineSubmit }); this.banner(); this.lines = []; this.history = []; this.currentHistory = ""; this.historyPos = -1; }; InterpreterManager.prototype.banner = function () { var _ua = window.navigator.userAgent; var ua = _ua.replace(/^Mozilla\/.*?\(.*?\)\s*/, ""); if (ua == "") { // MSIE ua = _ua.replace(/^Mozilla\/4\.0 \(compatible; MS(IE .*?);.*$/, "$1"); } appendChildNodes("interpreter_output", SPAN({"class": "banner"}, "TurboGears Console via MochiKit v" + MochiKit.Base.VERSION + " [" + ua + "]" ), BR() ); }; InterpreterManager.prototype.submit = function () { this.doSubmit(); this.doScroll(); return false; }; InterpreterManager.prototype.multilineSubmit = function () { this.doMultilineSubmit(); this.doScroll(); return false; }; InterpreterManager.prototype.doScroll = function () { var p = getElement("interpreter_output").lastChild; if (typeof(p) == "undefined" || p == null) { return; } var area = getElement("interpreter_area"); if (area.offsetHeight > area.scrollHeight) { area.scrollTop = 0; } else { area.scrollTop = area.scrollHeight; } }; InterpreterManager.prototype.moveHistory = function (dir) { // totally bogus value if (dir == 0 || this.history.length == 0) { return; } var elem = getElement("interpreter_text"); if (this.historyPos == -1) { this.currentHistory = elem.value; if (dir > 0) { return; } this.historyPos = this.history.length - 1; elem.value = this.history[this.historyPos]; return; } if (this.historyPos == 0 && dir < 0) { return; } if (this.historyPos == this.history.length - 1 && dir > 0) { this.historyPos = -1; elem.value = this.currentHistory; return; } this.historyPos += dir; elem.value = this.history[this.historyPos]; }; InterpreterManager.prototype.keyUp = function (e) { e = e || window.event; switch (e.keyCode) { case 38: this.moveHistory(-1); break; case 40: this.moveHistory(1); break; default: return true; } e.cancelBubble = true; return false; }; InterpreterManager.prototype.doSubmit = function () { var elem = getElement("interpreter_text"); var code = elem.value; elem.value = ""; this.history.push(code); this.historyPos = -1; this.currentHistory = ""; var d = loadJSONDoc("process_request?line="+encodeURIComponent(code)); d.addCallback(this.showResult); return; }; InterpreterManager.prototype.doMultilineSubmit = function () { var elem = getElement("interpreter_block_text"); var code = elem.value; elem.value = ""; lines = code.split("\n"); for ( var i = 0; i < lines.length; i++ ) { this.history.push(lines[i]); } this.historyPos = -1; this.currentHistory = ""; var d = loadJSONDoc("process_multiline_request?block="+encodeURIComponent(code)); d.addCallback(this.showResult); return; } InterpreterManager.prototype.showResult = function (res) { var lines = res["output"].split("\n"); for ( var i = 0; i < lines.length; i++ ) { var lineclass = "data"; // highlight input code. // assumption: only input code starts with ">>> " or "... " var lineprefix = lines[i].substr(0,4); if ( lineprefix == ">>> " || lineprefix == "... " ) { lineclass = "code"; } appendChildNodes("interpreter_output", SPAN({"class": lineclass}, lines[i]), BR() ); } this.doScroll(); $("prompt").innerHTML = res["more"] ? "... " : ">>> "; }; interpreterManager = new InterpreterManager(); addLoadEvent(interpreterManager.initialize); PKP6yr:ll turbogears/static/js/MochiKit.js/*** MochiKit.MochiKit 1.3.1 : PACKED VERSION THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please diff against the source tree, not this file. See for documentation, downloads, license, etc. (c) 2005 Bob Ippolito. All rights Reserved. ***/ if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Base"); } if(typeof (MochiKit)=="undefined"){ MochiKit={}; } if(typeof (MochiKit.Base)=="undefined"){ MochiKit.Base={}; } MochiKit.Base.VERSION="1.3.1"; MochiKit.Base.NAME="MochiKit.Base"; MochiKit.Base.update=function(_1,_2){ if(_1===null){ _1={}; } for(var i=1;i=0;i--){ _12.unshift(o[i]); } }else{ res.push(o); } } return res; },extend:function(_13,obj,_15){ if(!_15){ _15=0; } if(obj){ var l=obj.length; if(typeof (l)!="number"){ if(typeof (MochiKit.Iter)!="undefined"){ obj=MochiKit.Iter.list(obj); l=obj.length; }else{ throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); } } if(!_13){ _13=[]; } for(var i=_15;i>b; },zrshift:function(a,b){ return a>>>b; },eq:function(a,b){ return a==b; },ne:function(a,b){ return a!=b; },gt:function(a,b){ return a>b; },ge:function(a,b){ return a>=b; },lt:function(a,b){ return al){ _41=l; } } _40=[]; for(i=0;i<_41;i++){ var _42=[]; for(var j=1;j0){ _57=m.concat(me.im_preargs,_57); } var _52=me.im_self; if(!_52){ _52=this; } return me.im_func.apply(_52,_57); }; _56.im_self=_55; _56.im_func=_53; _56.im_preargs=_54; return _56; },bindMethods:function(_58){ var _59=MochiKit.Base.bind; for(var k in _58){ var _60=_58[k]; if(typeof (_60)=="function"){ _58[k]=_59(_60,_58); } } },registerComparator:function(_61,_62,_63,_64){ MochiKit.Base.comparatorRegistry.register(_61,_62,_63,_64); },_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ if(a==b){ return 0; } var _65=(typeof (a)=="undefined"||a===null); var _66=(typeof (b)=="undefined"||b===null); if(_65&&_66){ return 0; }else{ if(_65){ return -1; }else{ if(_66){ return 1; } } } var m=MochiKit.Base; var _67=m._primitives; if(!(typeof (a) in _67&&typeof (b) in _67)){ try{ return m.comparatorRegistry.match(a,b); } catch(e){ if(e!=m.NotFound){ throw e; } } } if(ab){ return 1; } } var _68=m.repr; throw new TypeError(_68(a)+" and "+_68(b)+" can not be compared"); },compareDateLike:function(a,b){ return MochiKit.Base.compare(a.getTime(),b.getTime()); },compareArrayLike:function(a,b){ var _69=MochiKit.Base.compare; var _70=a.length; var _71=0; if(_70>b.length){ _71=1; _70=b.length; }else{ if(_700))){ var kv=MochiKit.DOM.formContents(_113); _113=kv[0]; _114=kv[1]; }else{ if(arguments.length==1){ var o=_113; _113=[]; _114=[]; for(var k in o){ var v=o[k]; if(typeof (v)!="function"){ _113.push(k); _114.push(v); } } } } var rval=[]; var len=Math.min(_113.length,_114.length); var _118=MochiKit.Base.urlEncode; for(var i=0;i=stop){ throw self.StopIteration; } _147+=step; return rval; }}; },imap:function(fun,p,q){ var m=MochiKit.Base; var self=MochiKit.Iter; var _151=m.map(self.iter,m.extend(null,arguments,1)); var map=m.map; var next=self.next; return {repr:function(){ return "imap(...)"; },toString:m.forwardCall("repr"),next:function(){ return fun.apply(this,map(next,_151)); }}; },applymap:function(fun,seq,self){ seq=MochiKit.Iter.iter(seq); var m=MochiKit.Base; return {repr:function(){ return "applymap(...)"; },toString:m.forwardCall("repr"),next:function(){ return fun.apply(self,seq.next()); }}; },chain:function(p,q){ var self=MochiKit.Iter; var m=MochiKit.Base; if(arguments.length==1){ return self.iter(arguments[0]); } var _153=m.map(self.iter,arguments); return {repr:function(){ return "chain(...)"; },toString:m.forwardCall("repr"),next:function(){ while(_153.length>1){ try{ return _153[0].next(); } catch(e){ if(e!=self.StopIteration){ throw e; } _153.shift(); } } if(_153.length==1){ var arg=_153.shift(); this.next=m.bind("next",arg); return this.next(); } throw self.StopIteration; }}; },takewhile:function(pred,seq){ var self=MochiKit.Iter; seq=self.iter(seq); return {repr:function(){ return "takewhile(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ var rval=seq.next(); if(!pred(rval)){ this.next=function(){ throw self.StopIteration; }; this.next(); } return rval; }}; },dropwhile:function(pred,seq){ seq=MochiKit.Iter.iter(seq); var m=MochiKit.Base; var bind=m.bind; return {"repr":function(){ return "dropwhile(...)"; },"toString":m.forwardCall("repr"),"next":function(){ while(true){ var rval=seq.next(); if(!pred(rval)){ break; } } this.next=bind("next",seq); return rval; }}; },_tee:function(_155,sync,_157){ sync.pos[_155]=-1; var m=MochiKit.Base; var _158=m.listMin; return {repr:function(){ return "tee("+_155+", ...)"; },toString:m.forwardCall("repr"),next:function(){ var rval; var i=sync.pos[_155]; if(i==sync.max){ rval=_157.next(); sync.deque.push(rval); sync.max+=1; sync.pos[_155]+=1; }else{ rval=sync.deque[i-sync.min]; sync.pos[_155]+=1; if(i==sync.min&&_158(sync.pos)!=sync.min){ sync.min+=1; sync.deque.shift(); } } return rval; }}; },tee:function(_159,n){ var rval=[]; var sync={"pos":[],"deque":[],"max":-1,"min":-1}; if(arguments.length==1){ n=2; } var self=MochiKit.Iter; _159=self.iter(_159); var _tee=self._tee; for(var i=0;i0&&_165>=stop)||(step<0&&_165<=stop)){ throw MochiKit.Iter.StopIteration; } var rval=_165; _165+=step; return rval; },repr:function(){ return "range("+[_165,stop,step].join(", ")+")"; },toString:MochiKit.Base.forwardCall("repr")}; },sum:function(_166,_167){ var x=_167||0; var self=MochiKit.Iter; _166=self.iter(_166); try{ while(true){ x+=_166.next(); } } catch(e){ if(e!=self.StopIteration){ throw e; } } return x; },exhaust:function(_168){ var self=MochiKit.Iter; _168=self.iter(_168); try{ while(true){ _168.next(); } } catch(e){ if(e!=self.StopIteration){ throw e; } } },forEach:function(_169,func,self){ var m=MochiKit.Base; if(arguments.length>2){ func=m.bind(func,self); } if(m.isArrayLike(_169)){ try{ for(var i=0;i<_169.length;i++){ func(_169[i]); } } catch(e){ if(e!=MochiKit.Iter.StopIteration){ throw e; } } }else{ self=MochiKit.Iter; self.exhaust(self.imap(func,_169)); } },every:function(_171,func){ var self=MochiKit.Iter; try{ self.ifilterfalse(func,_171).next(); return false; } catch(e){ if(e!=self.StopIteration){ throw e; } return true; } },sorted:function(_172,cmp){ var rval=MochiKit.Iter.list(_172); if(arguments.length==1){ cmp=MochiKit.Base.compare; } rval.sort(cmp); return rval; },reversed:function(_173){ var rval=MochiKit.Iter.list(_173); rval.reverse(); return rval; },some:function(_174,func){ var self=MochiKit.Iter; try{ self.ifilter(func,_174).next(); return true; } catch(e){ if(e!=self.StopIteration){ throw e; } return false; } },iextend:function(lst,_175){ if(MochiKit.Base.isArrayLike(_175)){ for(var i=0;i<_175.length;i++){ lst.push(_175[i]); } }else{ var self=MochiKit.Iter; _175=self.iter(_175); try{ while(true){ lst.push(_175.next()); } } catch(e){ if(e!=self.StopIteration){ throw e; } } } return lst; },groupby:function(_176,_177){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length<2){ _177=m.operator.identity; } _176=self.iter(_176); var pk=undefined; var k=undefined; var v; function fetch(){ v=_176.next(); k=_177(v); } function eat(){ var ret=v; v=undefined; return ret; } var _180=true; return {repr:function(){ return "groupby(...)"; },next:function(){ while(k==pk){ fetch(); if(_180){ _180=false; break; } } pk=k; return [k,{next:function(){ if(v==undefined){ fetch(); } if(k!=pk){ throw self.StopIteration; } return eat(); }}]; }}; },groupby_as_array:function(_181,_182){ var m=MochiKit.Base; var self=MochiKit.Iter; if(arguments.length<2){ _182=m.operator.identity; } _181=self.iter(_181); var _183=[]; var _184=true; var _185; while(true){ try{ var _186=_181.next(); var key=_182(_186); } catch(e){ if(e==self.StopIteration){ break; } throw e; } if(_184||key!=_185){ var _187=[]; _183.push([key,_187]); } _187.push(_186); _184=false; _185=key; } return _183; },arrayLikeIter:function(_188){ var i=0; return {repr:function(){ return "arrayLikeIter(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ if(i>=_188.length){ throw MochiKit.Iter.StopIteration; } return _188[i++]; }}; },hasIterateNext:function(_189){ return (_189&&typeof (_189.iterateNext)=="function"); },iterateNextIter:function(_190){ return {repr:function(){ return "iterateNextIter(...)"; },toString:MochiKit.Base.forwardCall("repr"),next:function(){ var rval=_190.iterateNext(); if(rval===null||rval===undefined){ throw MochiKit.Iter.StopIteration; } return rval; }}; }}); MochiKit.Iter.EXPORT_OK=["iteratorRegistry","arrayLikeIter","hasIterateNext","iterateNextIter",]; MochiKit.Iter.EXPORT=["StopIteration","registerIteratorFactory","iter","count","cycle","repeat","next","izip","ifilter","ifilterfalse","islice","imap","applymap","chain","takewhile","dropwhile","tee","list","reduce","range","sum","exhaust","forEach","every","sorted","reversed","some","iextend","groupby","groupby_as_array"]; MochiKit.Iter.__new__=function(){ var m=MochiKit.Base; this.StopIteration=new m.NamedError("StopIteration"); this.iteratorRegistry=new m.AdapterRegistry(); this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Iter.__new__(); if(!MochiKit.__compat__){ reduce=MochiKit.Iter.reduce; } MochiKit.Base._exportSymbols(this,MochiKit.Iter); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Logging"); dojo.require("MochiKit.Base"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Base",[]); } try{ if(typeof (MochiKit.Base)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.Logging depends on MochiKit.Base!"; } if(typeof (MochiKit.Logging)=="undefined"){ MochiKit.Logging={}; } MochiKit.Logging.NAME="MochiKit.Logging"; MochiKit.Logging.VERSION="1.3.1"; MochiKit.Logging.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Logging.toString=function(){ return this.__repr__(); }; MochiKit.Logging.EXPORT=["LogLevel","LogMessage","Logger","alertListener","logger","log","logError","logDebug","logFatal","logWarning"]; MochiKit.Logging.EXPORT_OK=["logLevelAtLeast","isLogMessage","compareLogMessage"]; MochiKit.Logging.LogMessage=function(num,_192,info){ this.num=num; this.level=_192; this.info=info; this.timestamp=new Date(); }; MochiKit.Logging.LogMessage.prototype={repr:function(){ var m=MochiKit.Base; return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_194){ var self=MochiKit.Logging; if(typeof (_194)=="string"){ _194=self.LogLevel[_194]; } return function(msg){ var _196=msg.level; if(typeof (_196)=="string"){ _196=self.LogLevel[_196]; } return _196>=_194; }; },isLogMessage:function(){ var _197=MochiKit.Logging.LogMessage; for(var i=0;i=0&&this._messages.length>this.maxSize){ this._messages.shift(); } },getMessages:function(_206){ var _207=0; if(!(typeof (_206)=="undefined"||_206===null)){ _207=Math.max(0,this._messages.length-_206); } return this._messages.slice(_207); },getMessageText:function(_208){ if(typeof (_208)=="undefined"||_208===null){ _208=30; } var _209=this.getMessages(_208); if(_209.length){ var lst=map(function(m){ return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); },_209); lst.unshift("LAST "+_209.length+" MESSAGES:"); return lst.join(""); } return ""; },debuggingBookmarklet:function(_210){ if(typeof (MochiKit.LoggingPane)=="undefined"){ alert(this.getMessageText()); }else{ MochiKit.LoggingPane.createLoggingPane(_210||false); } }}; MochiKit.Logging.__new__=function(){ this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; var m=MochiKit.Base; m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); var _211=m.partial; var _212=this.Logger; var _213=_212.prototype.baseLog; m.update(this.Logger.prototype,{debug:_211(_213,"DEBUG"),log:_211(_213,"INFO"),error:_211(_213,"ERROR"),fatal:_211(_213,"FATAL"),warning:_211(_213,"WARNING")}); var self=this; var _214=function(name){ return function(){ self.logger[name].apply(self.logger,arguments); }; }; this.log=_214("log"); this.logError=_214("error"); this.logDebug=_214("debug"); this.logFatal=_214("fatal"); this.logWarning=_214("warning"); this.logger=new _212(); this.logger.useNativeConsole=true; this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; if(typeof (printfire)=="undefined"&&typeof (document)!="undefined"&&document.createEvent&&typeof (dispatchEvent)!="undefined"){ printfire=function(){ printfire.args=arguments; var ev=document.createEvent("Events"); ev.initEvent("printfire",false,true); dispatchEvent(ev); }; } MochiKit.Logging.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Logging); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.DateTime"); } if(typeof (MochiKit)=="undefined"){ MochiKit={}; } if(typeof (MochiKit.DateTime)=="undefined"){ MochiKit.DateTime={}; } MochiKit.DateTime.NAME="MochiKit.DateTime"; MochiKit.DateTime.VERSION="1.3.1"; MochiKit.DateTime.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.DateTime.toString=function(){ return this.__repr__(); }; MochiKit.DateTime.isoDate=function(str){ str=str+""; if(typeof (str)!="string"||str.length===0){ return null; } var iso=str.split("-"); if(iso.length===0){ return null; } return new Date(iso[0],iso[1]-1,iso[2]); }; MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; MochiKit.DateTime.isoTimestamp=function(str){ str=str+""; if(typeof (str)!="string"||str.length===0){ return null; } var res=str.match(MochiKit.DateTime._isoRegexp); if(typeof (res)=="undefined"||res===null){ return null; } var year,month,day,hour,min,sec,msec; year=parseInt(res[1],10); if(typeof (res[2])=="undefined"||res[2]===""){ return new Date(year); } month=parseInt(res[2],10)-1; day=parseInt(res[3],10); if(typeof (res[4])=="undefined"||res[4]===""){ return new Date(year,month,day); } hour=parseInt(res[4],10); min=parseInt(res[5],10); sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; if(typeof (res[7])!="undefined"&&res[7]!==""){ msec=Math.round(1000*parseFloat("0."+res[7])); }else{ msec=0; } if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ return new Date(year,month,day,hour,min,sec,msec); } var ofs; if(typeof (res[9])!="undefined"&&res[9]!==""){ ofs=parseInt(res[10],10)*3600000; if(typeof (res[11])!="undefined"&&res[11]!==""){ ofs+=parseInt(res[11],10)*60000; } if(res[9]=="-"){ ofs=-ofs; } }else{ ofs=0; } return new Date(Date.UTC(year,month,day,hour,min,sec,msec)-ofs); }; MochiKit.DateTime.toISOTime=function(date,_221){ if(typeof (date)=="undefined"||date===null){ return null; } var hh=date.getHours(); var mm=date.getMinutes(); var ss=date.getSeconds(); var lst=[((_221&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; return lst.join(":"); }; MochiKit.DateTime.toISOTimestamp=function(date,_225){ if(typeof (date)=="undefined"||date===null){ return null; } var sep=_225?"T":" "; var foot=_225?"Z":""; if(_225){ date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); } return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_225)+foot; }; MochiKit.DateTime.toISODate=function(date){ if(typeof (date)=="undefined"||date===null){ return null; } var _228=MochiKit.DateTime._padTwo; return [date.getFullYear(),_228(date.getMonth()+1),_228(date.getDate())].join("-"); }; MochiKit.DateTime.americanDate=function(d){ d=d+""; if(typeof (d)!="string"||d.length===0){ return null; } var a=d.split("/"); return new Date(a[2],a[0]-1,a[1]); }; MochiKit.DateTime._padTwo=function(n){ return (n>9)?n:"0"+n; }; MochiKit.DateTime.toPaddedAmericanDate=function(d){ if(typeof (d)=="undefined"||d===null){ return null; } var _230=MochiKit.DateTime._padTwo; return [_230(d.getMonth()+1),_230(d.getDate()),d.getFullYear()].join("/"); }; MochiKit.DateTime.toAmericanDate=function(d){ if(typeof (d)=="undefined"||d===null){ return null; } return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); }; MochiKit.DateTime.EXPORT=["isoDate","isoTimestamp","toISOTime","toISOTimestamp","toISODate","americanDate","toPaddedAmericanDate","toAmericanDate"]; MochiKit.DateTime.EXPORT_OK=[]; MochiKit.DateTime.EXPORT_TAGS={":common":MochiKit.DateTime.EXPORT,":all":MochiKit.DateTime.EXPORT}; MochiKit.DateTime.__new__=function(){ var base=this.NAME+"."; for(var k in this){ var o=this[k]; if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ try{ o.NAME=base+k; } catch(e){ } } } }; MochiKit.DateTime.__new__(); if(typeof (MochiKit.Base)!="undefined"){ MochiKit.Base._exportSymbols(this,MochiKit.DateTime); }else{ (function(_231,_232){ if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(typeof (MochiKit.__compat__)=="boolean"&&MochiKit.__compat__)){ var all=_232.EXPORT_TAGS[":all"]; for(var i=0;i_240){ var i=_246.length-_240; res=fmt.separator+_246.substring(i,_246.length)+res; _246=_246.substring(0,i); } } res=_246+res; if(_238>0){ while(frac.length<_241){ frac=frac+"0"; } res=res+fmt.decimal+frac; } return _242+res+_243; }; }; MochiKit.Format.numberFormatter=function(_248,_249,_250){ if(typeof (_249)=="undefined"){ _249=""; } var _251=_248.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); if(!_251){ throw TypeError("Invalid pattern"); } var _252=_248.substr(0,_251.index); var _253=_248.substr(_251.index+_251[0].length); if(_252.search(/-/)==-1){ _252=_252+"-"; } var _254=_251[1]; var frac=(typeof (_251[2])=="string"&&_251[2]!="")?_251[2]:""; var _255=(typeof (_251[3])=="string"&&_251[3]!=""); var tmp=_254.split(/,/); var _257; if(typeof (_250)=="undefined"){ _250="default"; } if(tmp.length==1){ _257=null; }else{ _257=tmp[1].length; } var _258=_254.length-_254.replace(/0/g,"").length; var _259=frac.length-frac.replace(/0/g,"").length; var _260=frac.length; var rval=MochiKit.Format._numberFormatter(_249,_252,_253,_250,_255,_260,_258,_257,_259); var m=MochiKit.Base; if(m){ var fn=arguments.callee; var args=m.concat(arguments); rval.repr=function(){ return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); }; } return rval; }; MochiKit.Format.formatLocale=function(_262){ if(typeof (_262)=="undefined"||_262===null){ _262="default"; } if(typeof (_262)=="string"){ var rval=MochiKit.Format.LOCALE[_262]; if(typeof (rval)=="string"){ rval=arguments.callee(rval); MochiKit.Format.LOCALE[_262]=rval; } return rval; }else{ return _262; } }; MochiKit.Format.twoDigitAverage=function(_263,_264){ if(_264){ var res=_263/_264; if(!isNaN(res)){ return MochiKit.Format.twoDigitFloat(_263/_264); } } return "0"; }; MochiKit.Format.twoDigitFloat=function(_265){ var sign=(_265<0?"-":""); var s=Math.floor(Math.abs(_265)*100).toString(); if(s=="0"){ return s; } if(s.length<3){ while(s.charAt(s.length-1)=="0"){ s=s.substring(0,s.length-1); } return sign+"0."+s; } var head=sign+s.substring(0,s.length-2); var tail=s.substring(s.length-2,s.length); if(tail=="00"){ return head; }else{ if(tail.charAt(1)=="0"){ return head+"."+tail.charAt(0); }else{ return head+"."+tail; } } }; MochiKit.Format.lstrip=function(str,_270){ str=str+""; if(typeof (str)!="string"){ return null; } if(!_270){ return str.replace(/^\s+/,""); }else{ return str.replace(new RegExp("^["+_270+"]+"),""); } }; MochiKit.Format.rstrip=function(str,_271){ str=str+""; if(typeof (str)!="string"){ return null; } if(!_271){ return str.replace(/\s+$/,""); }else{ return str.replace(new RegExp("["+_271+"]+$"),""); } }; MochiKit.Format.strip=function(str,_272){ var self=MochiKit.Format; return self.rstrip(self.lstrip(str,_272),_272); }; MochiKit.Format.truncToFixed=function(_273,_274){ _273=Math.floor(_273*Math.pow(10,_274)); var res=(_273*Math.pow(10,-_274)).toFixed(_274); if(res.charAt(0)=="."){ res="0"+res; } return res; }; MochiKit.Format.roundToFixed=function(_275,_276){ return MochiKit.Format.truncToFixed(_275+0.5*Math.pow(10,-_276),_276); }; MochiKit.Format.percentFormat=function(_277){ return MochiKit.Format.twoDigitFloat(100*_277)+"%"; }; MochiKit.Format.EXPORT=["truncToFixed","roundToFixed","numberFormatter","formatLocale","twoDigitAverage","twoDigitFloat","percentFormat","lstrip","rstrip","strip"]; MochiKit.Format.LOCALE={en_US:{separator:",",decimal:".",percent:"%"},de_DE:{separator:".",decimal:",",percent:"%"},fr_FR:{separator:" ",decimal:",",percent:"%"},"default":"en_US"}; MochiKit.Format.EXPORT_OK=[]; MochiKit.Format.EXPORT_TAGS={":all":MochiKit.Format.EXPORT,":common":MochiKit.Format.EXPORT}; MochiKit.Format.__new__=function(){ var base=this.NAME+"."; var k,v,o; for(k in this.LOCALE){ o=this.LOCALE[k]; if(typeof (o)=="object"){ o.repr=function(){ return this.NAME; }; o.NAME=base+"LOCALE."+k; } } for(k in this){ o=this[k]; if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ try{ o.NAME=base+k; } catch(e){ } } } }; MochiKit.Format.__new__(); if(typeof (MochiKit.Base)!="undefined"){ MochiKit.Base._exportSymbols(this,MochiKit.Format); }else{ (function(_278,_279){ if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(typeof (MochiKit.__compat__)=="boolean"&&MochiKit.__compat__)){ var all=_279.EXPORT_TAGS[":all"]; for(var i=0;i=0)){ this._fire(); } },_continue:function(res){ this._resback(res); this._unpause(); },_resback:function(res){ this.fired=((res instanceof Error)?1:0); this.results[this.fired]=res; this._fire(); },_check:function(){ if(this.fired!=-1){ if(!this.silentlyCancelled){ throw new MochiKit.Async.AlreadyCalledError(this); } this.silentlyCancelled=false; return; } },callback:function(res){ this._check(); if(res instanceof MochiKit.Async.Deferred){ throw new Error("Deferred instances can only be chained if they are the result of a callback"); } this._resback(res); },errback:function(res){ this._check(); var self=MochiKit.Async; if(res instanceof self.Deferred){ throw new Error("Deferred instances can only be chained if they are the result of a callback"); } if(!(res instanceof Error)){ res=new self.GenericError(res); } this._resback(res); },addBoth:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(fn,fn); },addCallback:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(fn,null); },addErrback:function(fn){ if(arguments.length>1){ fn=MochiKit.Base.partial.apply(null,arguments); } return this.addCallbacks(null,fn); },addCallbacks:function(cb,eb){ if(this.chained){ throw new Error("Chained Deferreds can not be re-used"); } this.chain.push([cb,eb]); if(this.fired>=0){ this._fire(); } return this; },_fire:function(){ var _284=this.chain; var _285=this.fired; var res=this.results[_285]; var self=this; var cb=null; while(_284.length>0&&this.paused===0){ var pair=_284.shift(); var f=pair[_285]; if(f===null){ continue; } try{ res=f(res); _285=((res instanceof Error)?1:0); if(res instanceof MochiKit.Async.Deferred){ cb=function(res){ self._continue(res); }; this._pause(); } } catch(err){ _285=1; if(!(err instanceof Error)){ err=new MochiKit.Async.GenericError(err); } res=err; } } this.fired=_285; this.results[_285]=res; if(cb&&this.paused){ res.addBoth(cb); res.chained=true; } }}; MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(){ return eval("("+arguments[0].responseText+")"); },succeed:function(_287){ var d=new MochiKit.Async.Deferred(); d.callback.apply(d,arguments); return d; },fail:function(_288){ var d=new MochiKit.Async.Deferred(); d.errback.apply(d,arguments); return d; },getXMLHttpRequest:function(){ var self=arguments.callee; if(!self.XMLHttpRequest){ var _289=[function(){ return new XMLHttpRequest(); },function(){ return new ActiveXObject("Msxml2.XMLHTTP"); },function(){ return new ActiveXObject("Microsoft.XMLHTTP"); },function(){ return new ActiveXObject("Msxml2.XMLHTTP.4.0"); },function(){ throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); }]; for(var i=0;i<_289.length;i++){ var func=_289[i]; try{ self.XMLHttpRequest=func; return func(); } catch(e){ } } } return self.XMLHttpRequest(); },_nothing:function(){ },_xhr_onreadystatechange:function(d){ if(this.readyState==4){ try{ this.onreadystatechange=null; } catch(e){ try{ this.onreadystatechange=MochiKit.Async._nothing; } catch(e){ } } var _290=null; try{ _290=this.status; if(!_290&&MochiKit.Base.isNotEmpty(this.responseText)){ _290=304; } } catch(e){ } if(_290==200||_290==304){ d.callback(this); }else{ var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); if(err.number){ d.errback(err); }else{ d.errback(err); } } } },_xhr_canceller:function(req){ try{ req.onreadystatechange=null; } catch(e){ try{ req.onreadystatechange=MochiKit.Async._nothing; } catch(e){ } } req.abort(); },sendXMLHttpRequest:function(req,_293){ if(typeof (_293)=="undefined"||_293===null){ _293=""; } var m=MochiKit.Base; var self=MochiKit.Async; var d=new self.Deferred(m.partial(self._xhr_canceller,req)); try{ req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); req.send(_293); } catch(e){ try{ req.onreadystatechange=null; } catch(ignore){ } d.errback(e); } return d; },doSimpleXMLHttpRequest:function(url){ var self=MochiKit.Async; var req=self.getXMLHttpRequest(); if(arguments.length>1){ var m=MochiKit.Base; var qs=m.queryString.apply(null,m.extend(null,arguments,1)); if(qs){ url+="?"+qs; } } req.open("GET",url,true); return self.sendXMLHttpRequest(req); },loadJSONDoc:function(url){ var self=MochiKit.Async; var d=self.doSimpleXMLHttpRequest.apply(self,arguments); d=d.addCallback(self.evalJSONRequest); return d; },wait:function(_296,_297){ var d=new MochiKit.Async.Deferred(); var m=MochiKit.Base; if(typeof (_297)!="undefined"){ d.addCallback(function(){ return _297; }); } var _298=setTimeout(m.bind("callback",d),Math.floor(_296*1000)); d.canceller=function(){ try{ clearTimeout(_298); } catch(e){ } }; return d; },callLater:function(_299,func){ var m=MochiKit.Base; var _300=m.partial.apply(m,m.extend(null,arguments,1)); return MochiKit.Async.wait(_299).addCallback(function(res){ return _300(); }); }}); MochiKit.Async.DeferredLock=function(){ this.waiting=[]; this.locked=false; this.id=this._nextId(); }; MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ d=new MochiKit.Async.Deferred(); if(this.locked){ this.waiting.push(d); }else{ this.locked=true; d.callback(this); } return d; },release:function(){ if(!this.locked){ throw TypeError("Tried to release an unlocked DeferredLock"); } this.locked=false; if(this.waiting.length>0){ this.locked=true; this.waiting.shift().callback(this); } },_nextId:MochiKit.Base.counter(),repr:function(){ var _301; if(this.locked){ _301="locked, "+this.waiting.length+" waiting"; }else{ _301="unlocked"; } return "DeferredLock("+this.id+", "+_301+")"; },toString:MochiKit.Base.forwardCall("repr")}; MochiKit.Async.DeferredList=function(list,_303,_304,_305,_306){ this.list=list; this.resultList=new Array(this.list.length); this.chain=[]; this.id=this._nextId(); this.fired=-1; this.paused=0; this.results=[null,null]; this.canceller=_306; this.silentlyCancelled=false; if(this.list.length===0&&!_303){ this.callback(this.resultList); } this.finishedCount=0; this.fireOnOneCallback=_303; this.fireOnOneErrback=_304; this.consumeErrors=_305; var _307=0; MochiKit.Base.map(MochiKit.Base.bind(function(d){ d.addCallback(MochiKit.Base.bind(this._cbDeferred,this),_307,true); d.addErrback(MochiKit.Base.bind(this._cbDeferred,this),_307,false); _307+=1; },this),this.list); }; MochiKit.Base.update(MochiKit.Async.DeferredList.prototype,MochiKit.Async.Deferred.prototype); MochiKit.Base.update(MochiKit.Async.DeferredList.prototype,{_cbDeferred:function(_308,_309,_310){ this.resultList[_308]=[_309,_310]; this.finishedCount+=1; if(this.fired!==0){ if(_309&&this.fireOnOneCallback){ this.callback([_308,_310]); }else{ if(!_309&&this.fireOnOneErrback){ this.errback(_310); }else{ if(this.finishedCount==this.list.length){ this.callback(this.resultList); } } } } if(!_309&&this.consumeErrors){ _310=null; } return _310; }}); MochiKit.Async.gatherResults=function(_311){ var d=new MochiKit.Async.DeferredList(_311,false,true,false); d.addCallback(function(_312){ var ret=[]; for(var i=0;i<_312.length;i++){ ret.push(_312[i][1]); } return ret; }); return d; }; MochiKit.Async.maybeDeferred=function(func){ var self=MochiKit.Async; var _313; try{ var r=func.apply(null,MochiKit.Base.extend([],arguments,1)); if(r instanceof self.Deferred){ _313=r; }else{ if(r instanceof Error){ _313=self.fail(r); }else{ _313=self.succeed(r); } } } catch(e){ _313=self.fail(e); } return _313; }; MochiKit.Async.EXPORT=["AlreadyCalledError","CancelledError","BrowserComplianceError","GenericError","XMLHttpRequestError","Deferred","succeed","fail","getXMLHttpRequest","doSimpleXMLHttpRequest","loadJSONDoc","wait","callLater","sendXMLHttpRequest","DeferredLock","DeferredList","gatherResults","maybeDeferred"]; MochiKit.Async.EXPORT_OK=["evalJSONRequest"]; MochiKit.Async.__new__=function(){ var m=MochiKit.Base; var ne=m.partial(m._newNamedError,this); ne("AlreadyCalledError",function(_316){ this.deferred=_316; }); ne("CancelledError",function(_317){ this.deferred=_317; }); ne("BrowserComplianceError",function(msg){ this.message=msg; }); ne("GenericError",function(msg){ this.message=msg; }); ne("XMLHttpRequestError",function(req,msg){ this.req=req; this.message=msg; try{ this.number=req.status; } catch(e){ } }); this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Async.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.Async); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.DOM"); dojo.require("MochiKit.Iter"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Iter",[]); } try{ if(typeof (MochiKit.Iter)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.DOM depends on MochiKit.Iter!"; } if(typeof (MochiKit.DOM)=="undefined"){ MochiKit.DOM={}; } MochiKit.DOM.NAME="MochiKit.DOM"; MochiKit.DOM.VERSION="1.3.1"; MochiKit.DOM.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.DOM.toString=function(){ return this.__repr__(); }; MochiKit.DOM.EXPORT=["formContents","currentWindow","currentDocument","withWindow","withDocument","registerDOMConverter","coerceToDOM","createDOM","createDOMFunc","getNodeAttribute","setNodeAttribute","updateNodeAttributes","appendChildNodes","replaceChildNodes","removeElement","swapDOM","BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","getElement","$","computedStyle","getElementsByTagAndClassName","addToCallStack","addLoadEvent","focusOnLoad","setElementClass","toggleElementClass","addElementClass","removeElementClass","swapElementClass","hasElementClass","escapeHTML","toHTML","emitHTML","setDisplayForElement","hideElement","showElement","scrapeText","elementDimensions","elementPosition","setElementDimensions","setElementPosition","getViewportDimensions","setOpacity"]; MochiKit.DOM.EXPORT_OK=["domConverters"]; MochiKit.DOM.Dimensions=function(w,h){ this.w=w; this.h=h; }; MochiKit.DOM.Dimensions.prototype.repr=function(){ var repr=MochiKit.Base.repr; return "{w: "+repr(this.w)+", h: "+repr(this.h)+"}"; }; MochiKit.DOM.Coordinates=function(x,y){ this.x=x; this.y=y; }; MochiKit.DOM.Coordinates.prototype.repr=function(){ var repr=MochiKit.Base.repr; return "{x: "+repr(this.x)+", y: "+repr(this.y)+"}"; }; MochiKit.DOM.Coordinates.prototype.toString=function(){ return this.repr(); }; MochiKit.Base.update(MochiKit.DOM,{setOpacity:function(elem,o){ elem=MochiKit.DOM.getElement(elem); MochiKit.DOM.updateNodeAttributes(elem,{"style":{"opacity":o,"-moz-opacity":o,"-khtml-opacity":o,"filter":" alpha(opacity="+(o*100)+")"}}); },getViewportDimensions:function(){ var d=new MochiKit.DOM.Dimensions(); var w=MochiKit.DOM._window; var b=MochiKit.DOM._document.body; if(w.innerWidth){ d.w=w.innerWidth; d.h=w.innerHeight; }else{ if(b.parentElement.clientWidth){ d.w=b.parentElement.clientWidth; d.h=b.parentElement.clientHeight; }else{ if(b&&b.clientWidth){ d.w=b.clientWidth; d.h=b.clientHeight; } } } return d; },elementDimensions:function(elem){ var self=MochiKit.DOM; if(typeof (elem.w)=="number"||typeof (elem.h)=="number"){ return new self.Dimensions(elem.w||0,elem.h||0); } elem=self.getElement(elem); if(!elem){ return undefined; } if(self.computedStyle(elem,"display")!="none"){ return new self.Dimensions(elem.offsetWidth||0,elem.offsetHeight||0); } var s=elem.style; var _322=s.visibility; var _323=s.position; s.visibility="hidden"; s.position="absolute"; s.display=""; var _324=elem.offsetWidth; var _325=elem.offsetHeight; s.display="none"; s.position=_323; s.visibility=_322; return new self.Dimensions(_324,_325); },elementPosition:function(elem,_326){ var self=MochiKit.DOM; elem=self.getElement(elem); if(!elem){ return undefined; } var c=new self.Coordinates(0,0); if(elem.x&&elem.y){ c.x+=elem.x||0; c.y+=elem.y||0; return c; }else{ if(elem.parentNode===null||self.computedStyle(elem,"display")=="none"){ return undefined; } } var box=null; var _329=null; var d=MochiKit.DOM._document; var de=d.documentElement; var b=d.body; if(elem.getBoundingClientRect){ box=elem.getBoundingClientRect(); c.x+=box.left+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||b.clientLeft); c.y+=box.top+(de.scrollTop||b.scrollTop)-(de.clientTop||b.clientTop); }else{ if(d.getBoxObjectFor){ box=d.getBoxObjectFor(elem); c.x+=box.x; c.y+=box.y; }else{ if(elem.offsetParent){ c.x+=elem.offsetLeft; c.y+=elem.offsetTop; _329=elem.offsetParent; if(_329!=elem){ while(_329){ c.x+=_329.offsetLeft; c.y+=_329.offsetTop; _329=_329.offsetParent; } } var ua=navigator.userAgent.toLowerCase(); if((typeof (opera)!="undefined"&&parseFloat(opera.version())<9)||(ua.indexOf("safari")!=-1&&self.computedStyle(elem,"position")=="absolute")){ c.x-=b.offsetLeft; c.y-=b.offsetTop; } } } } if(typeof (_326)!="undefined"){ _326=arguments.callee(_326); if(_326){ c.x-=(_326.x||0); c.y-=(_326.y||0); } } if(elem.parentNode){ _329=elem.parentNode; }else{ _329=null; } while(_329&&_329.tagName!="BODY"&&_329.tagName!="HTML"){ c.x-=_329.scrollLeft; c.y-=_329.scrollTop; if(_329.parentNode){ _329=_329.parentNode; }else{ _329=null; } } return c; },setElementDimensions:function(elem,_332,_333){ elem=MochiKit.DOM.getElement(elem); if(typeof (_333)=="undefined"){ _333="px"; } MochiKit.DOM.updateNodeAttributes(elem,{"style":{"width":_332.w+_333,"height":_332.h+_333}}); },setElementPosition:function(elem,_334,_335){ elem=MochiKit.DOM.getElement(elem); if(typeof (_335)=="undefined"){ _335="px"; } MochiKit.DOM.updateNodeAttributes(elem,{"style":{"left":_334.x+_335,"top":_334.y+_335}}); },currentWindow:function(){ return MochiKit.DOM._window; },currentDocument:function(){ return MochiKit.DOM._document; },withWindow:function(win,func){ var self=MochiKit.DOM; var _337=self._document; var _338=self._win; var rval; try{ self._window=win; self._document=win.document; rval=func(); } catch(e){ self._window=_338; self._document=_337; throw e; } self._window=_338; self._document=_337; return rval; },formContents:function(elem){ var _339=[]; var _340=[]; var m=MochiKit.Base; var self=MochiKit.DOM; if(typeof (elem)=="undefined"||elem===null){ elem=self._document; }else{ elem=self.getElement(elem); } m.nodeWalk(elem,function(elem){ var name=elem.name; if(m.isNotEmpty(name)){ var _341=elem.nodeName; if(_341=="INPUT"&&(elem.type=="radio"||elem.type=="checkbox")&&!elem.checked){ return null; } if(_341=="SELECT"){ if(elem.selectedIndex>=0){ var opt=elem.options[elem.selectedIndex]; _339.push(name); _340.push((opt.value)?opt.value:opt.text); return null; } _339.push(name); _340.push(""); return null; } if(_341=="FORM"||_341=="P"||_341=="SPAN"||_341=="DIV"){ return elem.childNodes; } _339.push(name); _340.push(elem.value||""); return null; } return elem.childNodes; }); return [_339,_340]; },withDocument:function(doc,func){ var self=MochiKit.DOM; var _344=self._document; var rval; try{ self._document=doc; rval=func(); } catch(e){ self._document=_344; throw e; } self._document=_344; return rval; },registerDOMConverter:function(name,_345,wrap,_346){ MochiKit.DOM.domConverters.register(name,_345,wrap,_346); },coerceToDOM:function(node,ctx){ var im=MochiKit.Iter; var self=MochiKit.DOM; var iter=im.iter; var _350=im.repeat; var imap=im.imap; var _352=self.domConverters; var _353=self.coerceToDOM; var _354=MochiKit.Base.NotFound; while(true){ if(typeof (node)=="undefined"||node===null){ return null; } if(typeof (node.nodeType)!="undefined"&&node.nodeType>0){ return node; } if(typeof (node)=="number"||typeof (node)=="boolean"){ node=node.toString(); } if(typeof (node)=="string"){ return self._document.createTextNode(node); } if(typeof (node.toDOM)=="function"){ node=node.toDOM(ctx); continue; } if(typeof (node)=="function"){ node=node(ctx); continue; } var _355=null; try{ _355=iter(node); } catch(e){ } if(_355){ return imap(_353,_355,_350(ctx)); } try{ node=_352.match(node,ctx); continue; } catch(e){ if(e!=_354){ throw e; } } return self._document.createTextNode(node.toString()); } return undefined; },setNodeAttribute:function(node,attr,_357){ var o={}; o[attr]=_357; try{ return MochiKit.DOM.updateNodeAttributes(node,o); } catch(e){ } return null; },getNodeAttribute:function(node,attr){ var self=MochiKit.DOM; var _358=self.attributeArray.renames[attr]; node=self.getElement(node); try{ if(_358){ return node[_358]; } return node.getAttribute(attr); } catch(e){ } return null; },updateNodeAttributes:function(node,_359){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } if(_359){ var _360=MochiKit.Base.updatetree; if(self.attributeArray.compliant){ for(var k in _359){ var v=_359[k]; if(typeof (v)=="object"&&typeof (elem[k])=="object"){ _360(elem[k],v); }else{ if(k.substring(0,2)=="on"){ if(typeof (v)=="string"){ v=new Function(v); } elem[k]=v; }else{ elem.setAttribute(k,v); } } } }else{ var _361=self.attributeArray.renames; for(k in _359){ v=_359[k]; var _362=_361[k]; if(k=="style"&&typeof (v)=="string"){ elem.style.cssText=v; }else{ if(typeof (_362)=="string"){ elem[_362]=v; }else{ if(typeof (elem[k])=="object"&&typeof (v)=="object"){ _360(elem[k],v); }else{ if(k.substring(0,2)=="on"){ if(typeof (v)=="string"){ v=new Function(v); } elem[k]=v; }else{ elem.setAttribute(k,v); } } } } } } } return elem; },appendChildNodes:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); } var _363=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; var _364=MochiKit.Base.concat; while(_363.length){ var n=_363.shift(); if(typeof (n)=="undefined"||n===null){ }else{ if(typeof (n.nodeType)=="number"){ elem.appendChild(n); }else{ _363=_364(n,_363); } } } return elem; },replaceChildNodes:function(node){ var elem=node; var self=MochiKit.DOM; if(typeof (node)=="string"){ elem=self.getElement(node); arguments[0]=elem; } var _365; while((_365=elem.firstChild)){ elem.removeChild(_365); } if(arguments.length<2){ return elem; }else{ return self.appendChildNodes.apply(this,arguments); } },createDOM:function(name,_366){ var elem; var self=MochiKit.DOM; var m=MochiKit.Base; if(typeof (_366)=="string"||typeof (_366)=="number"){ var args=m.extend([name,null],arguments,1); return arguments.callee.apply(this,args); } if(typeof (name)=="string"){ if(_366&&"name" in _366&&!self.attributeArray.compliant){ name=("<"+name+" name=\""+self.escapeHTML(_366.name)+"\">"); } elem=self._document.createElement(name); }else{ elem=name; } if(_366){ self.updateNodeAttributes(elem,_366); } if(arguments.length<=2){ return elem; }else{ var args=m.extend([elem],arguments,2); return self.appendChildNodes.apply(this,args); } },createDOMFunc:function(){ var m=MochiKit.Base; return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); },swapDOM:function(dest,src){ var self=MochiKit.DOM; dest=self.getElement(dest); var _369=dest.parentNode; if(src){ src=self.getElement(src); _369.replaceChild(src,dest); }else{ _369.removeChild(dest); } return src; },getElement:function(id){ var self=MochiKit.DOM; if(arguments.length==1){ return ((typeof (id)=="string")?self._document.getElementById(id):id); }else{ return MochiKit.Base.map(self.getElement,arguments); } },computedStyle:function(_371,_372,_373){ if(arguments.length==2){ _373=_372; } var self=MochiKit.DOM; var el=self.getElement(_371); var _375=self._document; if(!el||el==_375){ return undefined; } if(el.currentStyle){ return el.currentStyle[_372]; } if(typeof (_375.defaultView)=="undefined"){ return undefined; } if(_375.defaultView===null){ return undefined; } var _376=_375.defaultView.getComputedStyle(el,null); if(typeof (_376)=="undefined"||_376===null){ return undefined; } return _376.getPropertyValue(_373); },getElementsByTagAndClassName:function(_377,_378,_379){ var self=MochiKit.DOM; if(typeof (_377)=="undefined"||_377===null){ _377="*"; } if(typeof (_379)=="undefined"||_379===null){ _379=self._document; } _379=self.getElement(_379); var _380=(_379.getElementsByTagName(_377)||self._document.all); if(typeof (_378)=="undefined"||_378===null){ return MochiKit.Base.extend(null,_380); } var _381=[]; for(var i=0;i<_380.length;i++){ var _382=_380[i]; var _383=_382.className.split(" "); for(var j=0;j<_383.length;j++){ if(_383[j]==_378){ _381.push(_382); break; } } } return _381; },_newCallStack:function(path,once){ var rval=function(){ var _386=arguments.callee.callStack; for(var i=0;i<_386.length;i++){ if(_386[i].apply(this,arguments)===false){ break; } } if(once){ try{ this[path]=null; } catch(e){ } } }; rval.callStack=[]; return rval; },addToCallStack:function(_387,path,func,once){ var self=MochiKit.DOM; var _388=_387[path]; var _389=_388; if(!(typeof (_388)=="function"&&typeof (_388.callStack)=="object"&&_388.callStack!==null)){ _389=self._newCallStack(path,once); if(typeof (_388)=="function"){ _389.callStack.push(_388); } _387[path]=_389; } _389.callStack.push(func); },addLoadEvent:function(func){ var self=MochiKit.DOM; self.addToCallStack(self._window,"onload",func,true); },focusOnLoad:function(_390){ var self=MochiKit.DOM; self.addLoadEvent(function(){ _390=self.getElement(_390); if(_390){ _390.focus(); } }); },setElementClass:function(_391,_392){ var self=MochiKit.DOM; var obj=self.getElement(_391); if(self.attributeArray.compliant){ obj.setAttribute("class",_392); }else{ obj.setAttribute("className",_392); } },toggleElementClass:function(_393){ var self=MochiKit.DOM; for(var i=1;i/g,">"); },toHTML:function(dom){ return MochiKit.DOM.emitHTML(dom).join(""); },emitHTML:function(dom,lst){ if(typeof (lst)=="undefined"||lst===null){ lst=[]; } var _409=[dom]; var self=MochiKit.DOM; var _410=self.escapeHTML; var _411=self.attributeArray; while(_409.length){ dom=_409.pop(); if(typeof (dom)=="string"){ lst.push(dom); }else{ if(dom.nodeType==1){ lst.push("<"+dom.nodeName.toLowerCase()); var _412=[]; var _413=_411(dom); for(var i=0;i<_413.length;i++){ var a=_413[i]; _412.push([" ",a.name,"=\"",_410(a.value),"\""]); } _412.sort(); for(i=0;i<_412.length;i++){ var _414=_412[i]; for(var j=0;j<_414.length;j++){ lst.push(_414[j]); } } if(dom.hasChildNodes()){ lst.push(">"); _409.push(""); var _415=dom.childNodes; for(i=_415.length-1;i>=0;i--){ _409.push(_415[i]); } }else{ lst.push("/>"); } }else{ if(dom.nodeType==3){ lst.push(_410(dom.nodeValue)); } } } } return lst; },setDisplayForElement:function(_416,_417){ var m=MochiKit.Base; var _418=m.extend(null,arguments,1); MochiKit.Iter.forEach(m.filter(null,m.map(MochiKit.DOM.getElement,_418)),function(_417){ _417.style.display=_416; }); },scrapeText:function(node,_419){ var rval=[]; (function(node){ var cn=node.childNodes; if(cn){ for(var i=0;i0){ var _424=m.filter; _423=function(node){ return _424(_423.ignoreAttrFilter,node.attributes); }; _423.ignoreAttr={}; MochiKit.Iter.forEach(_422.attributes,function(a){ _423.ignoreAttr[a.name]=a.value; }); _423.ignoreAttrFilter=function(a){ return (_423.ignoreAttr[a.name]!=a.value); }; _423.compliant=false; _423.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor"}; }else{ _423=function(node){ return node.attributes; }; _423.compliant=true; _423.renames={}; } this.attributeArray=_423; var _425=this.createDOMFunc; this.UL=_425("ul"); this.OL=_425("ol"); this.LI=_425("li"); this.TD=_425("td"); this.TR=_425("tr"); this.TBODY=_425("tbody"); this.THEAD=_425("thead"); this.TFOOT=_425("tfoot"); this.TABLE=_425("table"); this.TH=_425("th"); this.INPUT=_425("input"); this.SPAN=_425("span"); this.A=_425("a"); this.DIV=_425("div"); this.IMG=_425("img"); this.BUTTON=_425("button"); this.TT=_425("tt"); this.PRE=_425("pre"); this.H1=_425("h1"); this.H2=_425("h2"); this.H3=_425("h3"); this.BR=_425("br"); this.HR=_425("hr"); this.LABEL=_425("label"); this.TEXTAREA=_425("textarea"); this.FORM=_425("form"); this.P=_425("p"); this.SELECT=_425("select"); this.OPTION=_425("option"); this.OPTGROUP=_425("optgroup"); this.LEGEND=_425("legend"); this.FIELDSET=_425("fieldset"); this.STRONG=_425("strong"); this.CANVAS=_425("canvas"); this.hideElement=m.partial(this.setDisplayForElement,"none"); this.showElement=m.partial(this.setDisplayForElement,"block"); this.removeElement=this.swapDOM; this.$=this.getElement; this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }}); MochiKit.DOM.__new__(((typeof (window)=="undefined")?this:window)); if(!MochiKit.__compat__){ withWindow=MochiKit.DOM.withWindow; withDocument=MochiKit.DOM.withDocument; } MochiKit.Base._exportSymbols(this,MochiKit.DOM); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.LoggingPane"); dojo.require("MochiKit.Logging"); dojo.require("MochiKit.Base"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Logging",[]); JSAN.use("MochiKit.Base",[]); } try{ if(typeof (MochiKit.Base)=="undefined"||typeof (MochiKit.Logging)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.LoggingPane depends on MochiKit.Base and MochiKit.Logging!"; } if(typeof (MochiKit.LoggingPane)=="undefined"){ MochiKit.LoggingPane={}; } MochiKit.LoggingPane.NAME="MochiKit.LoggingPane"; MochiKit.LoggingPane.VERSION="1.3.1"; MochiKit.LoggingPane.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.LoggingPane.toString=function(){ return this.__repr__(); }; MochiKit.LoggingPane.createLoggingPane=function(_426){ var m=MochiKit.LoggingPane; _426=!(!_426); if(m._loggingPane&&m._loggingPane.inline!=_426){ m._loggingPane.closePane(); m._loggingPane=null; } if(!m._loggingPane||m._loggingPane.closed){ m._loggingPane=new m.LoggingPane(_426,MochiKit.Logging.logger); } return m._loggingPane; }; MochiKit.LoggingPane.LoggingPane=function(_427,_428){ if(typeof (_428)=="undefined"||_428===null){ _428=MochiKit.Logging.logger; } this.logger=_428; var _429=MochiKit.Base.update; var _430=MochiKit.Base.updatetree; var bind=MochiKit.Base.bind; var _431=MochiKit.Base.clone; var win=window; var uid="_MochiKit_LoggingPane"; if(typeof (MochiKit.DOM)!="undefined"){ win=MochiKit.DOM.currentWindow(); } if(!_427){ var url=win.location.href.split("?")[0].replace(/[:\/.><&]/g,"_"); var name=uid+"_"+url; var nwin=win.open("",name,"dependent,resizable,height=200"); if(!nwin){ alert("Not able to open debugging window due to pop-up blocking."); return undefined; } nwin.document.write(""+"[MochiKit.LoggingPane]"+""); nwin.document.close(); nwin.document.title+=" "+win.document.title; win=nwin; } var doc=win.document; this.doc=doc; var _434=doc.getElementById(uid); var _435=!!_434; if(_434&&typeof (_434.loggingPane)!="undefined"){ _434.loggingPane.logger=this.logger; _434.loggingPane.buildAndApplyFilter(); return _434.loggingPane; } if(_435){ var _436; while((_436=_434.firstChild)){ _434.removeChild(_436); } }else{ _434=doc.createElement("div"); _434.id=uid; } _434.loggingPane=this; var _437=doc.createElement("input"); var _438=doc.createElement("input"); var _439=doc.createElement("button"); var _440=doc.createElement("button"); var _441=doc.createElement("button"); var _442=doc.createElement("button"); var _443=doc.createElement("div"); var _444=doc.createElement("div"); var _445=uid+"_Listener"; this.colorTable=_431(this.colorTable); var _446=[]; var _447=null; var _448=function(msg){ var _449=msg.level; if(typeof (_449)=="number"){ _449=MochiKit.Logging.LogLevel[_449]; } return _449; }; var _450=function(msg){ return msg.info.join(" "); }; var _451=bind(function(msg){ var _452=_448(msg); var text=_450(msg); var c=this.colorTable[_452]; var p=doc.createElement("span"); p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_452; p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; p.appendChild(doc.createTextNode(_452+": "+text)); _444.appendChild(p); _444.appendChild(doc.createElement("br")); if(_443.offsetHeight>_443.scrollHeight){ _443.scrollTop=0; }else{ _443.scrollTop=_443.scrollHeight; } },this); var _454=function(msg){ _446[_446.length]=msg; _451(msg); }; var _455=function(){ var _456,infore; try{ _456=new RegExp(_437.value); infore=new RegExp(_438.value); } catch(e){ logDebug("Error in filter regex: "+e.message); return null; } return function(msg){ return (_456.test(_448(msg))&&infore.test(_450(msg))); }; }; var _457=function(){ while(_444.firstChild){ _444.removeChild(_444.firstChild); } }; var _458=function(){ _446=[]; _457(); }; var _459=bind(function(){ if(this.closed){ return; } this.closed=true; if(MochiKit.LoggingPane._loggingPane==this){ MochiKit.LoggingPane._loggingPane=null; } this.logger.removeListener(_445); _434.loggingPane=null; if(_427){ _434.parentNode.removeChild(_434); }else{ this.win.close(); } },this); var _460=function(){ _457(); for(var i=0;i<_446.length;i++){ var msg=_446[i]; if(_447===null||_447(msg)){ _451(msg); } } }; this.buildAndApplyFilter=function(){ _447=_455(); _460(); this.logger.removeListener(_445); this.logger.addListener(_445,_447,_454); }; var _461=bind(function(){ _446=this.logger.getMessages(); _460(); },this); var _462=bind(function(_463){ _463=_463||window.event; key=_463.which||_463.keyCode; if(key==13){ this.buildAndApplyFilter(); } },this); var _464="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; if(_427){ _464+="; height: 10em; border-top: 2px solid black"; }else{ _464+="; height: 100%;"; } _434.style.cssText=_464; if(!_435){ doc.body.appendChild(_434); } _464={"cssText":"width: 33%; display: inline; font: "+this.logFont}; _430(_437,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_462,"style":_464}); _434.appendChild(_437); _430(_438,{"value":".*","onkeypress":_462,"style":_464}); _434.appendChild(_438); _464="width: 8%; display:inline; font: "+this.logFont; _439.appendChild(doc.createTextNode("Filter")); _439.onclick=bind("buildAndApplyFilter",this); _439.style.cssText=_464; _434.appendChild(_439); _440.appendChild(doc.createTextNode("Load")); _440.onclick=_461; _440.style.cssText=_464; _434.appendChild(_440); _441.appendChild(doc.createTextNode("Clear")); _441.onclick=_458; _441.style.cssText=_464; _434.appendChild(_441); _442.appendChild(doc.createTextNode("Close")); _442.onclick=_459; _442.style.cssText=_464; _434.appendChild(_442); _443.style.cssText="overflow: auto; width: 100%"; _444.style.cssText="width: 100%; height: "+(_427?"8em":"100%"); _443.appendChild(_444); _434.appendChild(_443); this.buildAndApplyFilter(); _461(); if(_427){ this.win=undefined; }else{ this.win=win; } this.inline=_427; this.closePane=_459; this.closed=false; return this; }; MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; MochiKit.LoggingPane.EXPORT_OK=["LoggingPane"]; MochiKit.LoggingPane.EXPORT=["createLoggingPane"]; MochiKit.LoggingPane.__new__=function(){ this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; MochiKit.Base.nameFunctions(this); MochiKit.LoggingPane._loggingPane=null; }; MochiKit.LoggingPane.__new__(); MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Color"); dojo.require("MochiKit.Base"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Base",[]); } try{ if(typeof (MochiKit.Base)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.Color depends on MochiKit.Base"; } if(typeof (MochiKit.Color)=="undefined"){ MochiKit.Color={}; } MochiKit.Color.NAME="MochiKit.Color"; MochiKit.Color.VERSION="1.3.1"; MochiKit.Color.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Color.toString=function(){ return this.__repr__(); }; MochiKit.Color.Color=function(red,_466,blue,_468){ if(typeof (_468)=="undefined"||_468===null){ _468=1; } this.rgb={r:red,g:_466,b:blue,a:_468}; }; MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_469){ var rgb=this.rgb; var m=MochiKit.Color; return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_469); },colorWithHue:function(hue){ var hsl=this.asHSL(); hsl.h=hue; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },colorWithSaturation:function(_473){ var hsl=this.asHSL(); hsl.s=_473; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },colorWithLightness:function(_474){ var hsl=this.asHSL(); hsl.l=_474; var m=MochiKit.Color; return m.Color.fromHSL(hsl); },darkerColorWithLevel:function(_475){ var hsl=this.asHSL(); hsl.l=Math.max(hsl.l-_475,0); var m=MochiKit.Color; return m.Color.fromHSL(hsl); },lighterColorWithLevel:function(_476){ var hsl=this.asHSL(); hsl.l=Math.min(hsl.l+_476,1); var m=MochiKit.Color; return m.Color.fromHSL(hsl); },blendedColor:function(_477,_478){ if(typeof (_478)=="undefined"||_478===null){ _478=0.5; } var sf=1-_478; var s=this.rgb; var d=_477.rgb; var df=_478; return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); },compareRGB:function(_481){ var a=this.asRGB(); var b=_481.asRGB(); return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); },isLight:function(){ return this.asHSL().b>0.5; },isDark:function(){ return (!this.isLight()); },toHSLString:function(){ var c=this.asHSL(); var ccc=MochiKit.Color.clampColorComponent; var rval=this._hslString; if(!rval){ var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); var a=c.a; if(a>=1){ a=1; rval="hsl("+mid+")"; }else{ if(a<=0){ a=0; } rval="hsla("+mid+","+a+")"; } this._hslString=rval; } return rval; },toRGBString:function(){ var c=this.rgb; var ccc=MochiKit.Color.clampColorComponent; var rval=this._rgbString; if(!rval){ var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); if(c.a!=1){ rval="rgba("+mid+","+c.a+")"; }else{ rval="rgb("+mid+")"; } this._rgbString=rval; } return rval; },asRGB:function(){ return MochiKit.Base.clone(this.rgb); },toHexString:function(){ var m=MochiKit.Color; var c=this.rgb; var ccc=MochiKit.Color.clampColorComponent; var rval=this._hexString; if(!rval){ rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); this._hexString=rval; } return rval; },asHSV:function(){ var hsv=this.hsv; var c=this.rgb; if(typeof (hsv)=="undefined"||hsv===null){ hsv=MochiKit.Color.rgbToHSV(this.rgb); this.hsv=hsv; } return MochiKit.Base.clone(hsv); },asHSL:function(){ var hsl=this.hsl; var c=this.rgb; if(typeof (hsl)=="undefined"||hsl===null){ hsl=MochiKit.Color.rgbToHSL(this.rgb); this.hsl=hsl; } return MochiKit.Base.clone(hsl); },toString:function(){ return this.toRGBString(); },repr:function(){ var c=this.rgb; var col=[c.r,c.g,c.b,c.a]; return this.__class__.NAME+"("+col.join(", ")+")"; }}; MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_486,blue,_487){ var _488=MochiKit.Color.Color; if(arguments.length==1){ var rgb=red; red=rgb.r; _486=rgb.g; blue=rgb.b; if(typeof (rgb.a)=="undefined"){ _487=undefined; }else{ _487=rgb.a; } } return new _488(red,_486,blue,_487); },fromHSL:function(hue,_489,_490,_491){ var m=MochiKit.Color; return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); },fromHSV:function(hue,_492,_493,_494){ var m=MochiKit.Color; return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); },fromName:function(name){ var _495=MochiKit.Color.Color; if(name.charAt(0)=="\""){ name=name.substr(1,name.length-2); } var _496=_495._namedColors[name.toLowerCase()]; if(typeof (_496)=="string"){ return _495.fromHexString(_496); }else{ if(name=="transparent"){ return _495.transparentColor(); } } return null; },fromString:function(_497){ var self=MochiKit.Color.Color; var _498=_497.substr(0,3); if(_498=="rgb"){ return self.fromRGBString(_497); }else{ if(_498=="hsl"){ return self.fromHSLString(_497); }else{ if(_497.charAt(0)=="#"){ return self.fromHexString(_497); } } } return self.fromName(_497); },fromHexString:function(_499){ if(_499.charAt(0)=="#"){ _499=_499.substring(1); } var _500=[]; var i,hex; if(_499.length==3){ for(i=0;i<3;i++){ hex=_499.substr(i,1); _500.push(parseInt(hex+hex,16)/255); } }else{ for(i=0;i<6;i+=2){ hex=_499.substr(i,2); _500.push(parseInt(hex,16)/255); } } var _501=MochiKit.Color.Color; return _501.fromRGB.apply(_501,_500); },_fromColorString:function(pre,_503,_504,_505){ if(_505.indexOf(pre)===0){ _505=_505.substring(_505.indexOf("(",3)+1,_505.length-1); } var _506=_505.split(/\s*,\s*/); var _507=[]; for(var i=0;i<_506.length;i++){ var c=_506[i]; var val; var _508=c.substring(c.length-3); if(c.charAt(c.length-1)=="%"){ val=0.01*parseFloat(c.substring(0,c.length-1)); }else{ if(_508=="deg"){ val=parseFloat(c)/360; }else{ if(_508=="rad"){ val=parseFloat(c)/(Math.PI*2); }else{ val=_504[i]*parseFloat(c); } } } _507.push(val); } return this[_503].apply(this,_507); },fromComputedStyle:function(elem,_509,_510){ var d=MochiKit.DOM; var cls=MochiKit.Color.Color; for(elem=d.getElement(elem);elem;elem=elem.parentNode){ var _511=d.computedStyle.apply(d,arguments); if(!_511){ continue; } var _512=cls.fromString(_511); if(!_512){ break; } if(_512.asRGB().a>0){ return _512; } } return null; },fromBackground:function(elem){ var cls=MochiKit.Color.Color; return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); },fromText:function(elem){ var cls=MochiKit.Color.Color; return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); },namedColors:function(){ return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); }}); MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_513){ v*=_513; if(v<0){ return 0; }else{ if(v>_513){ return _513; }else{ return v; } } },_hslValue:function(n1,n2,hue){ if(hue>6){ hue-=6; }else{ if(hue<0){ hue+=6; } } var val; if(hue<1){ val=n1+(n2-n1)*hue; }else{ if(hue<3){ val=n2; }else{ if(hue<4){ val=n1+(n2-n1)*(4-hue); }else{ val=n1; } } } return val; },hsvToRGB:function(hue,_516,_517,_518){ if(arguments.length==1){ var hsv=hue; hue=hsv.h; _516=hsv.s; _517=hsv.v; _518=hsv.a; } var red; var _519; var blue; if(_516===0){ red=0; _519=0; blue=0; }else{ var i=Math.floor(hue*6); var f=(hue*6)-i; var p=_517*(1-_516); var q=_517*(1-(_516*f)); var t=_517*(1-(_516*(1-f))); switch(i){ case 1: red=q; _519=_517; blue=p; break; case 2: red=p; _519=_517; blue=t; break; case 3: red=p; _519=q; blue=_517; break; case 4: red=t; _519=p; blue=_517; break; case 5: red=_517; _519=p; blue=q; break; case 6: case 0: red=_517; _519=t; blue=p; break; } } return {r:red,g:_519,b:blue,a:_518}; },hslToRGB:function(hue,_521,_522,_523){ if(arguments.length==1){ var hsl=hue; hue=hsl.h; _521=hsl.s; _522=hsl.l; _523=hsl.a; } var red; var _524; var blue; if(_521===0){ red=_522; _524=_522; blue=_522; }else{ var m2; if(_522<=0.5){ m2=_522*(1+_521); }else{ m2=_522+_521-(_522*_521); } var m1=(2*_522)-m2; var f=MochiKit.Color._hslValue; var h6=hue*6; red=f(m1,m2,h6+2); _524=f(m1,m2,h6); blue=f(m1,m2,h6-2); } return {r:red,g:_524,b:blue,a:_523}; },rgbToHSV:function(red,_528,blue,_529){ if(arguments.length==1){ var rgb=red; red=rgb.r; _528=rgb.g; blue=rgb.b; _529=rgb.a; } var max=Math.max(Math.max(red,_528),blue); var min=Math.min(Math.min(red,_528),blue); var hue; var _532; var _533=max; if(min==max){ hue=0; _532=0; }else{ var _534=(max-min); _532=_534/max; if(red==max){ hue=(_528-blue)/_534; }else{ if(_528==max){ hue=2+((blue-red)/_534); }else{ hue=4+((red-_528)/_534); } } hue/=6; if(hue<0){ hue+=1; } if(hue>1){ hue-=1; } } return {h:hue,s:_532,v:_533,a:_529}; },rgbToHSL:function(red,_535,blue,_536){ if(arguments.length==1){ var rgb=red; red=rgb.r; _535=rgb.g; blue=rgb.b; _536=rgb.a; } var max=Math.max(red,Math.max(_535,blue)); var min=Math.min(red,Math.min(_535,blue)); var hue; var _537; var _538=(max+min)/2; var _539=max-min; if(_539===0){ hue=0; _537=0; }else{ if(_538<=0.5){ _537=_539/(max+min); }else{ _537=_539/(2-max-min); } if(red==max){ hue=(_535-blue)/_539; }else{ if(_535==max){ hue=2+((blue-red)/_539); }else{ hue=4+((red-_535)/_539); } } hue/=6; if(hue<0){ hue+=1; } if(hue>1){ hue-=1; } } return {h:hue,s:_537,l:_538,a:_536}; },toColorPart:function(num){ num=Math.round(num); var _540=num.toString(16); if(num<16){ return "0"+_540; } return _540; },__new__:function(){ var m=MochiKit.Base; this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); var _541=1/3; var _542={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_541,_541,_541],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_541,2*_541,2*_541],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; var _543=function(name,r,g,b,a){ var rval=this.fromRGB(r,g,b,a); this[name]=function(){ return rval; }; return rval; }; for(var k in _542){ var name=k+"Color"; var _545=m.concat([_543,this.Color,name],_542[k]); this.Color[name]=m.bind.apply(null,_545); } var _546=function(){ for(var i=0;i1){ var src=MochiKit.DOM.getElement(arguments[0]); var sig=arguments[1]; var obj=arguments[2]; var func=arguments[3]; for(var i=_562.length-1;i>=0;i--){ var o=_562[i]; if(o[0]===src&&o[1]===sig&&o[4]===obj&&o[5]===func){ self._disconnect(o); _562.splice(i,1); return true; } } }else{ var idx=m.findIdentical(_562,_561); if(idx>=0){ self._disconnect(_561); _562.splice(idx,1); return true; } } return false; },disconnectAll:function(src,sig){ src=MochiKit.DOM.getElement(src); var m=MochiKit.Base; var _563=m.flattenArguments(m.extend(null,arguments,1)); var self=MochiKit.Signal; var _564=self._disconnect; var _565=self._observers; if(_563.length===0){ for(var i=_565.length-1;i>=0;i--){ var _566=_565[i]; if(_566[0]===src){ _564(_566); _565.splice(i,1); } } }else{ var sigs={}; for(var i=0;i<_563.length;i++){ sigs[_563[i]]=true; } for(var i=_565.length-1;i>=0;i--){ var _566=_565[i]; if(_566[0]===src&&_566[1] in sigs){ _564(_566); _565.splice(i,1); } } } },signal:function(src,sig){ var _568=MochiKit.Signal._observers; src=MochiKit.DOM.getElement(src); var args=MochiKit.Base.extend(null,arguments,2); var _569=[]; for(var i=0;i<_568.length;i++){ var _570=_568[i]; if(_570[0]===src&&_570[1]===sig){ try{ _570[2].apply(src,args); } catch(e){ _569.push(e); } } } if(_569.length==1){ throw _569[0]; }else{ if(_569.length>1){ var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); e.errors=_569; throw e; } } }}); MochiKit.Signal.EXPORT_OK=[]; MochiKit.Signal.EXPORT=["connect","disconnect","signal","disconnectAll"]; MochiKit.Signal.__new__=function(win){ var m=MochiKit.Base; this._document=document; this._window=win; try{ this.connect(window,"onunload",this._unloadCache); } catch(e){ } this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; m.nameFunctions(this); }; MochiKit.Signal.__new__(this); if(!MochiKit.__compat__){ connect=MochiKit.Signal.connect; disconnect=MochiKit.Signal.disconnect; disconnectAll=MochiKit.Signal.disconnectAll; signal=MochiKit.Signal.signal; } MochiKit.Base._exportSymbols(this,MochiKit.Signal); if(typeof (dojo)!="undefined"){ dojo.provide("MochiKit.Visual"); dojo.require("MochiKit.Base"); dojo.require("MochiKit.DOM"); dojo.require("MochiKit.Color"); } if(typeof (JSAN)!="undefined"){ JSAN.use("MochiKit.Base",[]); JSAN.use("MochiKit.DOM",[]); JSAN.use("MochiKit.Color",[]); } try{ if(typeof (MochiKit.Base)=="undefined"||typeof (MochiKit.DOM)=="undefined"||typeof (MochiKit.Color)=="undefined"){ throw ""; } } catch(e){ throw "MochiKit.Visual depends on MochiKit.Base, MochiKit.DOM and MochiKit.Color!"; } if(typeof (MochiKit.Visual)=="undefined"){ MochiKit.Visual={}; } MochiKit.Visual.NAME="MochiKit.Visual"; MochiKit.Visual.VERSION="1.3.1"; MochiKit.Visual.__repr__=function(){ return "["+this.NAME+" "+this.VERSION+"]"; }; MochiKit.Visual.toString=function(){ return this.__repr__(); }; MochiKit.Visual._RoundCorners=function(e,_571){ e=MochiKit.DOM.getElement(e); this._setOptions(_571); if(this.options.__unstable__wrapElement){ e=this._doWrap(e); } var _572=this.options.color; var C=MochiKit.Color.Color; if(this.options.color=="fromElement"){ _572=C.fromBackground(e); }else{ if(!(_572 instanceof C)){ _572=C.fromString(_572); } } this.isTransparent=(_572.asRGB().a<=0); var _574=this.options.bgColor; if(this.options.bgColor=="fromParent"){ _574=C.fromBackground(e.offsetParent); }else{ if(!(_574 instanceof C)){ _574=C.fromString(_574); } } this._roundCornersImpl(e,_572,_574); }; MochiKit.Visual._RoundCorners.prototype={_doWrap:function(e){ var _575=e.parentNode; var doc=MochiKit.DOM.currentDocument(); if(typeof (doc.defaultView)=="undefined"||doc.defaultView===null){ return e; } var _576=doc.defaultView.getComputedStyle(e,null); if(typeof (_576)=="undefined"||_576===null){ return e; } var _577=MochiKit.DOM.DIV({"style":{display:"block",marginTop:_576.getPropertyValue("padding-top"),marginRight:_576.getPropertyValue("padding-right"),marginBottom:_576.getPropertyValue("padding-bottom"),marginLeft:_576.getPropertyValue("padding-left"),padding:"0px"}}); _577.innerHTML=e.innerHTML; e.innerHTML=""; e.appendChild(_577); return e; },_roundCornersImpl:function(e,_578,_579){ if(this.options.border){ this._renderBorder(e,_579); } if(this._isTopRounded()){ this._roundTopCorners(e,_578,_579); } if(this._isBottomRounded()){ this._roundBottomCorners(e,_578,_579); } },_renderBorder:function(el,_580){ var _581="1px solid "+this._borderColor(_580); var _582="border-left: "+_581; var _583="border-right: "+_581; var _584="style='"+_582+";"+_583+"'"; el.innerHTML="
"+el.innerHTML+"
"; },_roundTopCorners:function(el,_585,_586){ var _587=this._createCorner(_586); for(var i=0;i=0;i--){ _590.appendChild(this._createCornerSlice(_588,_589,i,"bottom")); } el.style.paddingBottom=0; el.appendChild(_590); },_createCorner:function(_591){ var dom=MochiKit.DOM; return dom.DIV({style:{backgroundColor:_591.toString()}}); },_createCornerSlice:function(_592,_593,n,_594){ var _595=MochiKit.DOM.SPAN(); var _596=_595.style; _596.backgroundColor=_592.toString(); _596.display="block"; _596.height="1px"; _596.overflow="hidden"; _596.fontSize="1px"; var _597=this._borderColor(_592,_593); if(this.options.border&&n===0){ _596.borderTopStyle="solid"; _596.borderTopWidth="1px"; _596.borderLeftWidth="0px"; _596.borderRightWidth="0px"; _596.borderBottomWidth="0px"; _596.height="0px"; _596.borderColor=_597.toString(); }else{ if(_597){ _596.borderColor=_597.toString(); _596.borderStyle="solid"; _596.borderWidth="0px 1px"; } } if(!this.options.compact&&(n==(this.options.numSlices-1))){ _596.height="2px"; } this._setMargin(_595,n,_594); this._setBorder(_595,n,_594); return _595; },_setOptions:function(_598){ this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; MochiKit.Base.update(this.options,_598); this.options.numSlices=(this.options.compact?2:4); },_whichSideTop:function(){ var _599=this.options.corners; if(this._hasString(_599,"all","top")){ return ""; } var _600=(_599.indexOf("tl")!=-1); var _601=(_599.indexOf("tr")!=-1); if(_600&&_601){ return ""; } if(_600){ return "left"; } if(_601){ return "right"; } return ""; },_whichSideBottom:function(){ var _602=this.options.corners; if(this._hasString(_602,"all","bottom")){ return ""; } var _603=(_602.indexOf("bl")!=-1); var _604=(_602.indexOf("br")!=-1); if(_603&&_604){ return ""; } if(_603){ return "left"; } if(_604){ return "right"; } return ""; },_borderColor:function(_605,_606){ if(_605=="transparent"){ return _606; }else{ if(this.options.border){ return this.options.border; }else{ if(this.options.blend){ return _606.blendedColor(_605); } } } return ""; },_setMargin:function(el,n,_607){ var _608=this._marginSize(n)+"px"; var _609=(_607=="top"?this._whichSideTop():this._whichSideBottom()); var _610=el.style; if(_609=="left"){ _610.marginLeft=_608; _610.marginRight="0px"; }else{ if(_609=="right"){ _610.marginRight=_608; _610.marginLeft="0px"; }else{ _610.marginLeft=_608; _610.marginRight=_608; } } },_setBorder:function(el,n,_611){ var _612=this._borderSize(n)+"px"; var _613=(_611=="top"?this._whichSideTop():this._whichSideBottom()); var _614=el.style; if(_613=="left"){ _614.borderLeftWidth=_612; _614.borderRightWidth="0px"; }else{ if(_613=="right"){ _614.borderRightWidth=_612; _614.borderLeftWidth="0px"; }else{ _614.borderLeftWidth=_612; _614.borderRightWidth=_612; } } },_marginSize:function(n){ if(this.isTransparent){ return 0; } var o=this.options; if(o.compact&&o.blend){ var _615=[1,0]; return _615[n]; }else{ if(o.compact){ var _616=[2,1]; return _616[n]; }else{ if(o.blend){ var _617=[3,2,1,0]; return _617[n]; }else{ var _618=[5,3,2,1]; return _618[n]; } } } },_borderSize:function(n){ var o=this.options; var _619; if(o.compact&&(o.blend||this.isTransparent)){ return 1; }else{ if(o.compact){ _619=[1,0]; }else{ if(o.blend){ _619=[2,1,1,1]; }else{ if(o.border){ _619=[0,2,0,0]; }else{ if(this.isTransparent){ _619=[5,3,2,1]; }else{ return 0; } } } } } return _619[n]; },_hasString:function(str){ for(var i=1;i"); } } })(); } PKP6p=U>H1H1turbogears/static/js/widget.jsvar Widget={}; Widget.imagedir='/tg_static/images/'; Widget.exists = function(val) { return typeof(val) != 'undefined'; } Widget.renderHandler = function(func,params) { var p=''; for(var i=0;i= 0;i--) { var cell = headers[i]; var column_name = (Widget.exists(cell.column))? cell.column:cell; if(Widget.columnIsHidden(content,column_name)) continue; lastActiveCell = i; break; } for(var i=0;i < headers.length;i++) { var cell = headers[i]; var column_name = (Widget.exists(cell.column))? cell.column:cell; var label = (Widget.exists(cell.label))? cell.label:column_name; var props = {'id':'TH_'+ id +'_'+ column_name,'class':'heading'}; var sortIcon = ''; if(Widget.columnIsHidden(content,column_name)) continue; if(Widget.exists(cell.sort)) { sortIcon = IMG({'id':'TH_IMG_'+ id +'_'+ column_name, 'src':Widget.imagedir +'arrow_'+ cell.sort +'_small.png', 'border':'0'}); } if(Widget.exists(actions.sort)) { var sortOrder = (Widget.exists(cell.sort))? cell.sort:'down'; props = {'onclick':actions.sort +"('"+ column_name +"','"+ sortOrder +"')", 'class':'pointer heading', 'title':'Sort by '+ label}; label = SPAN(null,sortIcon,label); } if(i==lastActiveCell && !(Widget.exists(actions.remove) || Widget.exists(actions.edit) ) && Widget.exists(actions.column_management)) label = SPAN(null,Widget.grid.manageColumns(id,content),label); htr.appendChild(TH(props,label)); } if(Widget.exists(actions.remove) || Widget.exists(actions.edit)) { var cm = (Widget.exists(actions.column_management))? SPAN(null,Widget.grid.manageColumns(id,content)):''; htr.appendChild( TH({'id':'TH_'+ id,'class':'heading','style':'width:40px;'},cm)); } if(!htr.hasChildNodes() && Widget.exists(actions.column_management)) { props = {'id':'TH_'+ id +'_column_manage','class':'heading'}; htr.appendChild(TH(props, SPAN(null,Widget.grid.manageColumns(id,content)) ) ); } return htr; } Widget.grid.manageColumns = function(id,content) { var headers = content['headers']; var dropDown = UL({'id':'column_chooser_list','class':'column_chooser_list'}); for(var i=0;i < headers.length;i++) { var cell = headers[i]; var column_name = (Widget.exists(cell.column))? cell.column:cell; var label = (Widget.exists(cell.label))? cell.label:column_name; var icon = ''; if(!Widget.columnIsHidden(content,column_name)) { icon = IMG({'border':'0','src':Widget.imagedir+'save.png'}); } var p = content.actions.column_management.params.concat(column_name); var action= 'javascript:'+ Widget.renderHandler(content.actions.column_management['function'],p); dropDown.appendChild( LI({'onclick':action},A({'href':'#'},icon,label)) ); } return SPAN({'id':'column_chooser_'+ id,'float':'right'}, A({'href':'#','class':'column_chooser_link', 'onmouseover':'document.getElementById("column_chooser_list").style.display="block"', 'onmouseout':'document.getElementById("column_chooser_list").style.display="none"' }, IMG({'src':Widget.imagedir+'column_chooser.png','border':'0'}), dropDown ) ); } Widget.columnIsHidden = function(content,column_name) { if(!Widget.exists(content['hidden_columns'])) return false; for(var i=0;i< content['hidden_columns'].length;i++) { if(column_name==content['hidden_columns'][i]) return true; } return false; } Widget.grid.renderRows = function(id,content) { var rows = content['rows']; var actions = Widget.exists(content.actions)? content.actions:{}; var tb = TBODY(null); for(var i=0;i < rows.length;i++) { var row= rows[i]; var row_id = (Widget.exists(row[0].value))? row[0].value:row[0]; var cursor =(Widget.exists(actions.select))? ';cursor:pointer':''; var color = (i % 2 == 0)? Widget.grid.oddColor:Widget.grid.evenColor; var gtr = TR( { 'id':'TR_'+ id +'_'+ row_id, 'style':'background-color:#'+ color + cursor, 'class':(i % 2 == 0)?'odd':'even', 'onmouseover':'Widget.grid.highlight(this,true)', 'onmouseout':'Widget.grid.highlight(this,false,"'+ color +'")' } ); for(var j=0;j < row.length;j++) { var cell_value = (Widget.exists(row[j].value))? row[j].value:row[j]; var column_name = (Widget.exists(row[j].column))? row[j].column:cell_value; if(Widget.columnIsHidden(content,column_name)) continue; var cellid = 'TD_'+ id +'_'+ row_id +'_'+ column_name; var props = {'id':cellid,'valign':'top'}; if(Widget.exists(actions.select)) { var p = actions.select.params.concat(row_id); props={'onclick':Widget.renderHandler(actions.select['function'],p), 'class':'pointer', 'nowrap':'nowrap', 'valign':'top', 'id':cellid, 'title':'Select row' }; } gtr.appendChild( TD(props,cell_value)); } if(Widget.exists(actions.remove) || Widget.exists(actions.edit) ) gtr.appendChild( Widget.grid.renderRowActionsLink(actions,row_id) ); tb.appendChild(gtr); } return tb; } Widget.grid.renderRowActionsLink = function(actions,id) { var rem=''; var ed=''; if(Widget.exists(actions.remove)) { var p = actions.remove.params.concat([id]); rem= A({'href':'javascript:'+ Widget.renderHandler(actions.remove['function'],p),'title':'Remove Row'}, IMG({'src':Widget.imagedir+'remove.png','border':'0'}) ); } if(Widget.exists(actions.edit)) { var q = actions.edit.params.concat([id]); ed = A({'href':'javascript:'+ Widget.renderHandler(actions.edit['function'],q),'title':'Edit Row'}, IMG({'src':Widget.imagedir+'edit.png','border':'0'}) ); } return TD({'align':'right'},ed,rem); } Widget.grid.highlight = function(el,state,originalColor) { if(state) { el.style.backgroundColor = '#'+ Widget.grid.highlightColor; } else { el.style.backgroundColor = '#'+ originalColor; } } /*********************************** SELECT ****************************/ Widget.select = {} Widget.select.load = function(id,content) { var list= document.getElementById(id); if(!Widget.exists(list)) { alert('Are you shure the id for the list is correct?'); return; } for(var i=list.options.length-1;i>=0;i--) list.options[i] = null; for(var i=0;i=0;i--) { if(list.options[i]!=null && list.options[i].selected) list.options[i]=null; } } Widget.select.addSelectedOptionsFromSourceToDestination = function(src,dest) { if(src.selectedIndex==-1) return; var newList = []; for(var i=0;i 0) return values; } Widget.select.getOptionValuesAsCSV = function(list) { var csv=''; for(var i=0;i < list.options.length;i++) { if(csv!='')csv+=','; csv+=list.options[i].value; } return csv; } Widget.select.getSelectionsAsCSV = function(list) { var values = Widget.select.getSelections(list); var csv=''; for(var i=0;i < values.length;i++) { if(csv!='')csv+=','; csv+=values[i]; } return csv; } Widget.select.hasValue= function(list,value) { for(var i=0;i= 0) { return this.create(document.body.scrollLeft, document.body.scrollTop) } else { return this.create(0, 0) } }, clientSize : function() { if (window.innerHeight >= 0) { return this.create(window.innerWidth, window.innerHeight) } else if (document.documentElement) { return this.create(document.documentElement.clientWidth, document.documentElement.clientHeight) } else if (document.body.clientHeight >= 0) { return this.create(document.body.clientWidth, document.body.clientHeight) } else { return this.create(0, 0) } }, /** * mouse coordinate relative to the window (technically the * browser client area) i.e. the part showing your page * * NOTE: in Safari the coordinate is relative to the document */ mousePosition : function(event) { event = ToolMan.events().fix(event) return this.create(event.clientX, event.clientY) }, /** * mouse coordinate relative to the document */ mouseOffset : function(event) { event = ToolMan.events().fix(event) if (event.pageX >= 0 || event.pageX < 0) { return this.create(event.pageX, event.pageY) } else if (event.clientX >= 0 || event.clientX < 0) { return this.mousePosition(event).plus(this.scrollOffset()) } }, _size : function(element) { /* TODO: move to a Dimension class */ return this.create(element.offsetWidth, element.offsetHeight) }, _offset : function(element) { return this.create(element.offsetLeft, element.offsetTop) } } function _ToolManCoordinate(factory, x, y) { this.factory = factory this.x = isNaN(x) ? 0 : x this.y = isNaN(y) ? 0 : y } _ToolManCoordinate.prototype = { toString : function() { return "(" + this.x + "," + this.y + ")" }, plus : function(that) { return this.factory.create(this.x + that.x, this.y + that.y) }, minus : function(that) { return this.factory.create(this.x - that.x, this.y - that.y) }, min : function(that) { return this.factory.create( Math.min(this.x , that.x), Math.min(this.y , that.y)) }, max : function(that) { return this.factory.create( Math.max(this.x , that.x), Math.max(this.y , that.y)) }, constrainTo : function (one, two) { var min = one.min(two) var max = one.max(two) return this.max(min).min(max) }, distance : function (that) { return Math.sqrt(Math.pow(this.x - that.x, 2) + Math.pow(this.y - that.y, 2)) }, reposition : function(element) { element.style["top"] = this.y + "px" element.style["left"] = this.x + "px" } } PKP6Wmm%turbogears/static/js/tool-man/core.js/* Copyright (c) 2005 Tim Taylor Consulting Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ var ToolMan = { events : function() { if (!ToolMan._eventsFactory) throw "ToolMan Events module isn't loaded"; return ToolMan._eventsFactory }, css : function() { if (!ToolMan._cssFactory) throw "ToolMan CSS module isn't loaded"; return ToolMan._cssFactory }, coordinates : function() { if (!ToolMan._coordinatesFactory) throw "ToolMan Coordinates module isn't loaded"; return ToolMan._coordinatesFactory }, drag : function() { if (!ToolMan._dragFactory) throw "ToolMan Drag module isn't loaded"; return ToolMan._dragFactory }, dragsort : function() { if (!ToolMan._dragsortFactory) throw "ToolMan DragSort module isn't loaded"; return ToolMan._dragsortFactory }, helpers : function() { return ToolMan._helpers }, cookies : function() { if (!ToolMan._cookieOven) throw "ToolMan Cookie module isn't loaded"; return ToolMan._cookieOven }, junkdrawer : function() { return ToolMan._junkdrawer } } ToolMan._helpers = { map : function(array, func) { for (var i = 0, n = array.length; i < n; i++) func(array[i]) }, nextItem : function(item, nodeName) { if (item == null) return var next = item.nextSibling while (next != null) { if (next.nodeName == nodeName) return next next = next.nextSibling } return null }, previousItem : function(item, nodeName) { var previous = item.previousSibling while (previous != null) { if (previous.nodeName == nodeName) return previous previous = previous.previousSibling } return null }, moveBefore : function(item1, item2) { var parent = item1.parentNode parent.removeChild(item1) parent.insertBefore(item1, item2) }, moveAfter : function(item1, item2) { var parent = item1.parentNode parent.removeChild(item1) parent.insertBefore(item1, item2 ? item2.nextSibling : null) } } /** * scripts without a proper home * * stuff here is subject to change unapologetically and without warning */ ToolMan._junkdrawer = { serializeList : function(list) { var items = list.getElementsByTagName("li") var array = new Array() for (var i = 0, n = items.length; i < n; i++) { var item = items[i] array.push(ToolMan.junkdrawer()._identifier(item)) } return array.join('|') }, inspectListOrder : function(id) { alert(ToolMan.junkdrawer().serializeList(document.getElementById(id))) }, restoreListOrder : function(listID) { var list = document.getElementById(listID) if (list == null) return var cookie = ToolMan.cookies().get("list-" + listID) if (!cookie) return; var IDs = cookie.split('|') var items = ToolMan.junkdrawer()._itemsByID(list) for (var i = 0, n = IDs.length; i < n; i++) { var itemID = IDs[i] if (itemID in items) { var item = items[itemID] list.removeChild(item) list.insertBefore(item, null) } } }, _identifier : function(item) { var trim = ToolMan.junkdrawer().trim var identifier identifier = trim(item.getAttribute("id")) if (identifier != null && identifier.length > 0) return identifier; identifier = trim(item.getAttribute("itemID")) if (identifier != null && identifier.length > 0) return identifier; // FIXME: strip out special chars or make this an MD5 hash or something return trim(item.innerHTML) }, _itemsByID : function(list) { var array = new Array() var items = list.getElementsByTagName('li') for (var i = 0, n = items.length; i < n; i++) { var item = items[i] array[ToolMan.junkdrawer()._identifier(item)] = item } return array }, trim : function(text) { if (text == null) return null return text.replace(/^(\s+)?(.*\S)(\s+)?$/, '$2') } } PKP6yA$turbogears/static/js/tool-man/css.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ // TODO: write unit tests ToolMan._cssFactory = { readStyle : function(element, property) { if (element.style[property]) { return element.style[property] } else if (element.currentStyle) { return element.currentStyle[property] } else if (document.defaultView && document.defaultView.getComputedStyle) { var style = document.defaultView.getComputedStyle(element, null) return style.getPropertyValue(property) } else { return null } } } PKP6ke %turbogears/static/js/tool-man/drag.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ ToolMan._dragFactory = { createSimpleGroup : function(element, handle) { handle = handle ? handle : element var group = this.createGroup(element) group.setHandle(handle) group.transparentDrag() group.onTopWhileDragging() return group }, createGroup : function(element) { var group = new _ToolManDragGroup(this, element) var position = ToolMan.css().readStyle(element, 'position') if (position == 'static') { element.style["position"] = 'relative' } else if (position == 'absolute') { /* for Safari 1.2 */ ToolMan.coordinates().topLeftOffset(element).reposition(element) } // TODO: only if ToolMan.isDebugging() group.register('draginit', this._showDragEventStatus) group.register('dragmove', this._showDragEventStatus) group.register('dragend', this._showDragEventStatus) return group }, _showDragEventStatus : function(dragEvent) { window.status = dragEvent.toString() }, constraints : function() { return this._constraintFactory }, _createEvent : function(type, event, group) { return new _ToolManDragEvent(type, event, group) } } function _ToolManDragGroup(factory, element) { this.factory = factory this.element = element this._handle = null this._thresholdDistance = 0 this._transforms = new Array() // TODO: refactor into a helper object, move into events.js this._listeners = new Array() this._listeners['draginit'] = new Array() this._listeners['dragstart'] = new Array() this._listeners['dragmove'] = new Array() this._listeners['dragend'] = new Array() } _ToolManDragGroup.prototype = { /* * TODO: * - unregister(type, func) * - move custom event listener stuff into Event library * - keyboard nudging of "selected" group */ setHandle : function(handle) { var events = ToolMan.events() handle.toolManDragGroup = this events.register(handle, 'mousedown', this._dragInit) handle.onmousedown = function() { return false } if (this.element != handle) events.unregister(this.element, 'mousedown', this._dragInit) }, register : function(type, func) { this._listeners[type].push(func) }, addTransform : function(transformFunc) { this._transforms.push(transformFunc) }, verticalOnly : function() { this.addTransform(this.factory.constraints().vertical()) }, horizontalOnly : function() { this.addTransform(this.factory.constraints().horizontal()) }, setThreshold : function(thresholdDistance) { this._thresholdDistance = thresholdDistance }, transparentDrag : function(opacity) { var opacity = typeof(opacity) != "undefined" ? opacity : 0.75; var originalOpacity = ToolMan.css().readStyle(this.element, "opacity") this.register('dragstart', function(dragEvent) { var element = dragEvent.group.element element.style.opacity = opacity element.style.filter = 'alpha(opacity=' + (opacity * 100) + ')' }) this.register('dragend', function(dragEvent) { var element = dragEvent.group.element element.style.opacity = originalOpacity element.style.filter = 'alpha(opacity=100)' }) }, onTopWhileDragging : function(zIndex) { var zIndex = typeof(zIndex) != "undefined" ? zIndex : 100000; var originalZIndex = ToolMan.css().readStyle(this.element, "z-index") this.register('dragstart', function(dragEvent) { dragEvent.group.element.style.zIndex = zIndex }) this.register('dragend', function(dragEvent) { dragEvent.group.element.style.zIndex = originalZIndex }) }, _dragInit : function(event) { event = ToolMan.events().fix(event) var group = document.toolManDragGroup = this.toolManDragGroup var dragEvent = group.factory._createEvent('draginit', event, group) group._isThresholdExceeded = false group._initialMouseOffset = dragEvent.mouseOffset group._grabOffset = dragEvent.mouseOffset.minus(dragEvent.topLeftOffset) ToolMan.events().register(document, 'mousemove', group._drag) document.onmousemove = function() { return false } ToolMan.events().register(document, 'mouseup', group._dragEnd) group._notifyListeners(dragEvent) }, _drag : function(event) { event = ToolMan.events().fix(event) var coordinates = ToolMan.coordinates() var group = this.toolManDragGroup if (!group) return var dragEvent = group.factory._createEvent('dragmove', event, group) var newTopLeftOffset = dragEvent.mouseOffset.minus(group._grabOffset) // TODO: replace with DragThreshold object if (!group._isThresholdExceeded) { var distance = dragEvent.mouseOffset.distance(group._initialMouseOffset) if (distance < group._thresholdDistance) return group._isThresholdExceeded = true group._notifyListeners( group.factory._createEvent('dragstart', event, group)) } for (i in group._transforms) { var transform = group._transforms[i] newTopLeftOffset = transform(newTopLeftOffset, dragEvent) } var dragDelta = newTopLeftOffset.minus(dragEvent.topLeftOffset) var newTopLeftPosition = dragEvent.topLeftPosition.plus(dragDelta) newTopLeftPosition.reposition(group.element) dragEvent.transformedMouseOffset = newTopLeftOffset.plus(group._grabOffset) group._notifyListeners(dragEvent) var errorDelta = newTopLeftOffset.minus(coordinates.topLeftOffset(group.element)) if (errorDelta.x != 0 || errorDelta.y != 0) { coordinates.topLeftPosition(group.element).plus(errorDelta).reposition(group.element) } }, _dragEnd : function(event) { event = ToolMan.events().fix(event) var group = this.toolManDragGroup var dragEvent = group.factory._createEvent('dragend', event, group) group._notifyListeners(dragEvent) this.toolManDragGroup = null ToolMan.events().unregister(document, 'mousemove', group._drag) document.onmousemove = null ToolMan.events().unregister(document, 'mouseup', group._dragEnd) }, _notifyListeners : function(dragEvent) { var listeners = this._listeners[dragEvent.type] for (i in listeners) { listeners[i](dragEvent) } } } function _ToolManDragEvent(type, event, group) { this.type = type this.group = group this.mousePosition = ToolMan.coordinates().mousePosition(event) this.mouseOffset = ToolMan.coordinates().mouseOffset(event) this.transformedMouseOffset = this.mouseOffset this.topLeftPosition = ToolMan.coordinates().topLeftPosition(group.element) this.topLeftOffset = ToolMan.coordinates().topLeftOffset(group.element) } _ToolManDragEvent.prototype = { toString : function() { return "mouse: " + this.mousePosition + this.mouseOffset + " " + "xmouse: " + this.transformedMouseOffset + " " + "left,top: " + this.topLeftPosition + this.topLeftOffset } } ToolMan._dragFactory._constraintFactory = { vertical : function() { return function(coordinate, dragEvent) { var x = dragEvent.topLeftOffset.x return coordinate.x != x ? coordinate.factory.create(x, coordinate.y) : coordinate } }, horizontal : function() { return function(coordinate, dragEvent) { var y = dragEvent.topLeftOffset.y return coordinate.y != y ? coordinate.factory.create(coordinate.x, y) : coordinate } } } PKP6wR )turbogears/static/js/tool-man/dragsort.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ ToolMan._dragsortFactory = { makeSortable : function(item) { var group = ToolMan.drag().createSimpleGroup(item) group.register('dragstart', this._onDragStart) group.register('dragmove', this._onDragMove) group.register('dragend', this._onDragEnd) return group }, /** * Iterates over a list's items, making them sortable, applying * optional functions to each item. * * example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN) */ makeListSortable : function(list) { var helpers = ToolMan.helpers() var coordinates = ToolMan.coordinates() var items = list.getElementsByTagName("li") helpers.map(items, function(item) { var dragGroup = dragsort.makeSortable(item) dragGroup.setThreshold(4) var min, max dragGroup.addTransform(function(coordinate, dragEvent) { return coordinate.constrainTo(min, max) }) dragGroup.register('dragstart', function() { var items = list.getElementsByTagName("li") min = max = coordinates.topLeftOffset(items[0]) for (var i = 1, n = items.length; i < n; i++) { var offset = coordinates.topLeftOffset(items[i]) min = min.min(offset) max = max.max(offset) } }) }) for (var i = 1, n = arguments.length; i < n; i++) helpers.map(items, arguments[i]) }, _onDragStart : function(dragEvent) { }, _onDragMove : function(dragEvent) { var helpers = ToolMan.helpers() var coordinates = ToolMan.coordinates() var item = dragEvent.group.element var xmouse = dragEvent.transformedMouseOffset var moveTo = null var previous = helpers.previousItem(item, item.nodeName) while (previous != null) { var bottomRight = coordinates.bottomRightOffset(previous) if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) { moveTo = previous } previous = helpers.previousItem(previous, item.nodeName) } if (moveTo != null) { helpers.moveBefore(item, moveTo) return } var next = helpers.nextItem(item, item.nodeName) while (next != null) { var topLeft = coordinates.topLeftOffset(next) if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) { moveTo = next } next = helpers.nextItem(next, item.nodeName) } if (moveTo != null) { helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName)) return } }, _onDragEnd : function(dragEvent) { ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element) } } PKP6U-'turbogears/static/js/tool-man/events.js/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ ToolMan._eventsFactory = { fix : function(event) { if (!event) event = window.event if (event.target) { if (event.target.nodeType == 3) event.target = event.target.parentNode } else if (event.srcElement) { event.target = event.srcElement } return event }, register : function(element, type, func) { if (element.addEventListener) { element.addEventListener(type, func, false) } else if (element.attachEvent) { if (!element._listeners) element._listeners = new Array() if (!element._listeners[type]) element._listeners[type] = new Array() var workaroundFunc = function() { func.apply(element, new Array()) } element._listeners[type][func] = workaroundFunc element.attachEvent('on' + type, workaroundFunc) } }, unregister : function(element, type, func) { if (element.removeEventListener) { element.removeEventListener(type, func, false) } else if (element.detachEvent) { if (element._listeners && element._listeners[type] && element._listeners[type][func]) { element.detachEvent('on' + type, element._listeners[type][func]) } } } } PKP6XIturbogears/tests/config.cfg[global] foo.bar = "BAZ!" tg.something = 10 tg.something.other = "another thing" my.static = "%(package_dir)s/static" [/static] static_filter.on = True [logging] [[formatters]] [[[coolformat]]] format="F1 *(asctime)s *(levelname)s *(message)s" datefmt= [[handlers]] [[[mystream]]] class='StreamHandler' level='NOTSET' formatter='coolformat' args='(logout,)' [[loggers]] [[[tester]]] level='DEBUG' handlers=['mystream'] propogate=1 qualname="turbogears.tests.test_config.logconfig" PKP6 88turbogears/tests/configfile.cfg[global] foo.bar = "blurb" test.dir = "%(package_dir)s" PKP6}turbogears/tests/form.kid ${css.display()} ${js.display()}
PKP6h``"turbogears/tests/othertemplate.kid This is the other template. PKP6l"turbogears/tests/simple.kid This is the groovy test template. Paging all defaults. PKs6i turbogears/tests/test_catwalk.pyimport unittest import turbogears from turbogears import testutil from turbogears import controllers from turbogears.toolbox.catwalk import CatWalk import cherrypy import simplejson from catwalk_models import browse import timeit import time #verbose run nosetests -s -v -f test_catwalk.py #run nosetests -v -f test_catwalk.py def browse_data(model): """load some test data, only once""" if model.Artist.select().count() > 0: return #only load once genres = ['Latin','Jazz','Rock','Pop','Metal','Dance','Hall', 'Reggae','Disco','Funk','Ska','Swing','Acid','Folk','Reggaeton', 'World','Clasic','Hip-Hop','Rythm & Blues','Blues'] instruments = ['bass', 'drum'] for g in genres: model.Genre(name=g) for i in instruments: model.Instrument(name=i) for artist_id in range(15): a = model.Artist(name='Artist #%s'% artist_id) for album_id in range(15): alb = model.Album(name='Album #%s_%s' % (artist_id,album_id),artist=a) for song_id in range(15): s = model.Song(name='Song #%s_%s_%s' % (artist_id,album_id,song_id),album=alb) for g in model.Genre.select(): g.addArtist(a) class MyRoot(controllers.RootController): def index(self): pass index = turbogears.expose()(index) class Browse(unittest.TestCase): def setUp(self): browse_data(browse) cherrypy.root = MyRoot() def test_wrong_filter_format(self): cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Song&filters=Guantanemera&tg_format=json") response = cherrypy.response.body[0] assert 'filter_format_error' in response def test_wrong_filter_column(self): cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Song&filters=guacamole:2&tg_format=json") response = cherrypy.response.body[0] assert 'filter_column_error' in response def test_filters(self): cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Song&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values['total'] == 15 * 15 * 15 #without the filters we get all songs (3375) testutil.createRequest("/catwalk/browse/?object_name=Song&filters=album:1&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values['total'] == 15 #filter by album id (only 15 songs) def test_response_fields(self): #Check that the response contains the expected keys cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Artist&start=3&page_size=20&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values.has_key('headers') assert values.has_key('rows') assert values.has_key('start') assert values.has_key('page_size') assert values.has_key('total') assert values['start'] == 3 assert values['page_size'] == 20 assert values['total'] == 15 def test_rows_joins_count(self): #Control that the count for related and multiple joins match #the number of related instances when accessed as a field cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) artist = browse.Artist.get(1) assert int(values['rows'][0]['genres']) == len(list(artist.genres)) assert int(values['rows'][0]['albums']) == len(list(artist.albums)) def test_rows_column_number(self): #Control that the number of columns match the number of fields in the model cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert len(values['rows'][0]) == 4 def test_rows_limit(self): #Update the limit of rows for the query and control the number of rows returned cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values.has_key('rows') assert len(values['rows']) == 10 testutil.createRequest("/catwalk/browse/?object_name=Artist&page_size=15&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert values.has_key('rows') assert len(values['rows']) == 15 def test_header_labels(self): #Check that the returned header labels match the the model cherrypy.root.catwalk = CatWalk(browse) testutil.createRequest("/catwalk/browse/?object_name=Artist&tg_format=json") response = cherrypy.response.body[0] values = simplejson.loads(response) assert len(values['headers']) == 5 for header in values['headers']: assert header['name'] in ['id','name','albums','genres', 'plays_instruments'] class TestJoinedOperations( testutil.DBTest): model = browse def setUp(self): cherrypy.root = MyRoot() cherrypy.root.catwalk = CatWalk(browse) testutil.DBTest.setUp(self) browse_data(browse) def test_addremove_related_joins(self): # check the update_join function when nondefault add/remove are used artist = self.model.Artist.get(1) assert len(artist.plays_instruments) == 0 testutil.createRequest("/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1%2C2&tg_format=json") assert len(artist.plays_instruments) == 2 testutil.createRequest("/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1&tg_format=json") assert len(artist.plays_instruments) == 1, str(artist.plays_instruments) PKh6>hY%%!turbogears/tests/test_catwalk.pyc; *Fc@sdkZdkZdklZdklZdklZdkZdkZdkl Z dk Z dk Z dZ dei fdYZdeifd YZd eifd YZdS( N(stestutil(s controllers(sCatWalk(sbrowsec Cs|iiidjodSnddddddd d d d d dddddddddg}ddg}x|D]}|id|qyWx|D]}|i d|qWxt dD]} |idd| }xrt dD]d}|idd| |fd|}x9t dD]+}|idd| ||fd|} qWqWx$|iiD]}|i|qbWqWdS( sload some test data, only onceiNsLatinsJazzsRocksPopsMetalsDancesHallsReggaesDiscosFunksSkasSwingsAcidsFolks ReggaetonsWorldsClasicsHip-Hops Rythm & BluessBluessbasssdrumsnameis Artist #%ss Album #%s_%ssartistsSong #%s_%s_%ssalbum(smodelsArtistsselectscountsgenress instrumentssgsGenresis Instrumentsranges artist_idsasalbum_idsAlbumsalbssong_idsSongsss addArtist( smodelsasgenressgsalbum_idsis instrumentssalbssong_idsss artist_id((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pys browse_datas.B   " -sMyRootcBs#tZdZeieZRS(NcCsdS(N((sself((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysindex's(s__name__s __module__sindexs turbogearssexpose(((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysMyRoot&s sBrowsecBsYtZdZdZdZdZdZdZdZdZ d Z RS( NcCstttt_dS(N(s browse_datasbrowsesMyRootscherrypysroot(sself((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pyssetUp,s cCsGttti_tidtiid}d|jpt dS(NsE/catwalk/browse/?object_name=Song&filters=Guantanemera&tg_format=jsonisfilter_format_error( sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodysAssertionError(sselfsresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_wrong_filter_format0s cCsGttti_tidtiid}d|jpt dS(NsD/catwalk/browse/?object_name=Song&filters=guacamole:2&tg_format=jsonisfilter_column_error( sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodysAssertionError(sselfsresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_wrong_filter_column6s cCsttti_tidtiid}t i |}|ddddjpt tidtiid}t i |}|ddjpt dS(Ns0/catwalk/browse/?object_name=Song&tg_format=jsonistotalis@/catwalk/browse/?object_name=Song&filters=album:1&tg_format=json( sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodys simplejsonsloadssvaluessAssertionError(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pys test_filters<s   cCsttti_tidtiid}t i |}|i dpt |i dpt |i dpt |i dpt |i dpt |ddjpt |dd jpt |dd jpt dS( NsG/catwalk/browse/?object_name=Artist&start=3&page_size=20&tg_format=jsonisheaderssrowssstarts page_sizestotaliii(sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodys simplejsonsloadssvaluesshas_keysAssertionError(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_response_fieldsIs cCsttti_tidtiid}t i |}ti i d}t|dddtt|ijptt|dddtt|ijptdS(Ns2/catwalk/browse/?object_name=Artist&tg_format=jsoniisrowssgenressalbums(sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodys simplejsonsloadssvaluessArtistsgetsartistsintslenslistsgenressAssertionErrorsalbums(sselfsartistsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_rows_joins_countYs 5cCsdttti_tidtiid}t i |}t |dddjpt dS(Ns2/catwalk/browse/?object_name=Artist&tg_format=jsonisrowsi(sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodys simplejsonsloadssvaluesslensAssertionError(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_rows_column_numberes  cCsttti_tidtiid}t i |}|i dpt t|ddjpt tidtiid}t i |}|i dpt t|ddjpt dS(Ns2/catwalk/browse/?object_name=Artist&tg_format=jsonisrowsi s?/catwalk/browse/?object_name=Artist&page_size=15&tg_format=jsoni(sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodys simplejsonsloadssvaluesshas_keysAssertionErrorslen(sselfsvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_rows_limitms  cCsttti_tidtiid}t i |}t |ddjpt x9|dD]-}|dddddd gjpt qgWdS( Ns2/catwalk/browse/?object_name=Artist&tg_format=jsonisheadersisnamesidsalbumssgenressplays_instruments(sCatWalksbrowsescherrypysrootscatwalkstestutils createRequestsresponsesbodys simplejsonsloadssvaluesslensAssertionErrorsheader(sselfsheadersvaluessresponse((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_header_labels|s  ( s__name__s __module__ssetUpstest_wrong_filter_formatstest_wrong_filter_columns test_filtersstest_response_fieldsstest_rows_joins_countstest_rows_column_numberstest_rows_limitstest_header_labels(((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysBrowse+s      sTestJoinedOperationscBs tZeZdZdZRS(NcCs<tt_ttti_tii|t tdS(N( sMyRootscherrypysrootsCatWalksbrowsescatwalkstestutilsDBTestssetUpsselfs browse_data(sself((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pyssetUps cCs|iiid}t|idjptti dt|idjptti dt|idjptt |idS(Niis/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1%2C2&tg_format=jsonis}/catwalk/updateJoins?objectName=Artist&id=1&join=plays_instruments&joinType=&joinObjectName=Instrument&joins=1&tg_format=json( sselfsmodelsArtistsgetsartistslensplays_instrumentssAssertionErrorstestutils createRequestsstr(sselfsartist((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pystest_addremove_related_joinss   (s__name__s __module__sbrowsesmodelssetUpstest_addremove_related_joins(((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pysTestJoinedOperationss (sunittests turbogearsstestutils controllerssturbogears.toolbox.catwalksCatWalkscherrypys simplejsonscatwalk_modelssbrowsestimeitstimes browse_datasRootControllersMyRootsTestCasesBrowsesDBTestsTestJoinedOperations(stestutilsCatWalkstimeits turbogearsscherrypysTestJoinedOperationssbrowsesunittestsMyRoots controllerssBrowses simplejsonstimes browse_data((s6build\bdist.win32\egg\turbogears\tests\test_catwalk.pys?s           \PKP6\_]..%turbogears/tests/test_command_i18n.pyimport sys import os import kid import tempfile from datetime import datetime import turbogears from turbogears.command.i18n import InternationalizationTool work_dir = tempfile.mkdtemp() locale_dir = os.path.join(work_dir, 'locale') tool = None turbogears.config.update({ 'i18n.locale_dir':locale_dir, 'i18n.domain':'testmessages', }) def setup(m): global tool tool = InternationalizationTool('0.9') def teardown(m): import shutil shutil.rmtree(work_dir) def test_creates_locale_dir(): "Verify the locale directory got created as needed." assert not os.path.isdir(locale_dir) test_src_dir = os.path.join(work_dir, 'src') sys.argv = ['i18n.py', '--src-dir', test_src_dir, 'collect'] tool.run() assert os.path.isdir(locale_dir), "locale directory not created" PKh6(NN&turbogears/tests/test_command_i18n.pyc; IEc@sdkZdkZdkZdkZdklZdkZdklZeiZ ei i e dZ e aeiihde <dd<dZdZd ZdS( N(sdatetime(sInternationalizationToolslocalesi18n.locale_dirs i18n.domains testmessagescCstdadS(Ns0.9(sInternationalizationToolstool(sm((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pyssetupscCsdk}|itdS(N(sshutilsrmtreeswork_dir(smsshutil((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pysteardowns cCsptiit pttiitd}dd|dgt_ t i tiitp tddS(s2Verify the locale directory got created as needed.ssrcsi18n.pys --src-dirscollectslocale directory not createdN( sosspathsisdirs locale_dirsAssertionErrorsjoinswork_dirs test_src_dirssyssargvstoolsrun(s test_src_dir((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pystest_creates_locale_dirs  (ssyssosskidstempfilesdatetimes turbogearssturbogears.command.i18nsInternationalizationToolsmkdtempswork_dirspathsjoins locale_dirsNonestoolsconfigsupdatessetupsteardownstest_creates_locale_dir( s locale_dirsInternationalizationTools turbogearsswork_dirstempfilesdatetimessyssteardownsosssetupstest_creates_locale_dirskid((s;build\bdist.win32\egg\turbogears\tests\test_command_i18n.pys?s        "  PKP6C&Xturbogears/tests/test_config.pyimport turbogears import pkg_resources import sys from cStringIO import StringIO import logging import re testfile = pkg_resources.resource_filename(__name__, "configfile.cfg") rfn = pkg_resources.resource_filename logout = StringIO() logging.logout = logout def test_update_from_package(): turbogears.update_config(modulename="turbogears.tests.config") assert turbogears.config.get("foo.bar") == "BAZ!" print turbogears.config.get("my.static") assert turbogears.config.get("my.static").endswith( "turbogears/tests/static") assert turbogears.config.get("static_filter.on", path="/static") == True def test_update_from_both(): turbogears.update_config(configfile = testfile, modulename="turbogears.tests.config") print turbogears.config.get("foo.bar") assert turbogears.config.get("foo.bar") == "blurb" assert turbogears.config.get("tg.something") == 10 print turbogears.config.get("test.dir") assert turbogears.config.get("test.dir").endswith("turbogears/tests") callnum = 0 def windows_filename(*args, **kw): global callnum callnum += 1 if callnum > 1: return "c:\\foo\\bar\\" else: return rfn(*args, **kw) def test_windows_filenames(): pkg_resources.resource_filename = windows_filename turbogears.update_config(configfile = testfile, modulename="turbogears.tests.config") testdir = turbogears.config.get("test.dir") print testdir assert testdir == "c:/foo/bar" def test_logging_config(): logout.truncate(0) log = logging.getLogger("turbogears.tests.test_config.logconfig") log.info("Testing") logged = logout.getvalue() print "Logged: %s" % logged assert re.match(r'F1 \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d INFO ' 'Testing', logged) assert turbogears.config.get("tg.new_style_logging", False) def teardown_module(): pkg_resources.resource_filename = rfn PKh6P^{ turbogears/tests/test_config.pyc; IEc@sdkZdkZdkZdklZdkZdkZeiedZ eiZ eZ e e_ dZ dZ dadZdZdZd ZdS( N(sStringIOsconfigfile.cfgcCstiddtiiddjpttiidGHtiididpttiiddd tjptdS( Ns modulenamesturbogears.tests.configsfoo.barsBAZ!s my.staticsturbogears/tests/staticsstatic_filter.onspaths/static(s turbogearss update_configsconfigsgetsAssertionErrorsendswithsTrue(((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_update_from_packages  #cCstidtddtiidGHtiiddjpttiiddjpttiidGHtiidid ptdS( Ns configfiles modulenamesturbogears.tests.configsfoo.barsblurbs tg.somethingi stest.dirsturbogears/tests(s turbogearss update_configstestfilesconfigsgetsAssertionErrorsendswith(((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_update_from_boths    icOs0td7atdjodSnt||SdS(Nis c:\foo\bar\(scallnumsrfnsargsskw(sargsskw((s5build\bdist.win32\egg\turbogears\tests\test_config.pyswindows_filename"s   cCsNtt_tidtddtiid}|GH|djpt dS(Ns configfiles modulenamesturbogears.tests.configstest.dirs c:/foo/bar( swindows_filenames pkg_resourcessresource_filenames turbogearss update_configstestfilesconfigsgetstestdirsAssertionError(stestdir((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_windows_filenames*s    cCsytidtid}|idti}d|GHti d|pt t i i dtpt dS(Nis&turbogears.tests.test_config.logconfigsTestings Logged: %ss8F1 \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d INFO Testingstg.new_style_logging(slogoutstruncatesloggings getLoggerslogsinfosgetvaluesloggedsresmatchsAssertionErrors turbogearssconfigsgetsFalse(slogslogged((s5build\bdist.win32\egg\turbogears\tests\test_config.pystest_logging_config2s     cCs tt_dS(N(srfns pkg_resourcessresource_filename(((s5build\bdist.win32\egg\turbogears\tests\test_config.pysteardown_module<s(s turbogearss pkg_resourcesssyss cStringIOsStringIOsloggingsresresource_filenames__name__stestfilesrfnslogoutstest_update_from_packagestest_update_from_bothscallnumswindows_filenamestest_windows_filenamesstest_logging_configsteardown_module(stest_logging_configswindows_filenamesloggings turbogearssStringIOsteardown_modulestest_update_from_packagestest_update_from_boths pkg_resourcesssyssrestest_windows_filenamesslogoutsrfnstestfile((s5build\bdist.win32\egg\turbogears\tests\test_config.pys?s              PK<6ܞE^^$turbogears/tests/test_controllers.pyimport unittest from cStringIO import StringIO import sys import turbogears from turbogears import controllers from turbogears import url from turbogears import validators from turbogears import database from turbogears import testutil import cherrypy import formencode import pkg_resources class SubApp(controllers.RootController): def index(self): return url("/Foo/") index = turbogears.expose()(index) class MyRoot(controllers.RootController): def index(self): pass index = turbogears.expose()(index) def validation_error_handler(self, tg_source, tg_errors, *args, **kw): self.functionname = tg_source.__name__ self.values = kw self.errors = tg_errors return "Error Message" def test(self): return dict(title="Foobar", mybool=False, someval="niggles") test = turbogears.expose(html=".simple", allow_json=True)(test) def invalid(self): return None invalid = turbogears.expose()(invalid) def pos(self, posvalue): self.posvalue = posvalue return "" pos = turbogears.expose()(pos) def servefile(self, tg_exceptions=None): self.servedit = True self.serve_exceptions = tg_exceptions return cherrypy.lib.cptools.serveFile( pkg_resources.resource_filename( "turbogears.tests", "test_controllers.py")) servefile = turbogears.expose()(servefile) def unicode(self): cherrypy.response.headers["Content-Type"] = "text/html" return u'\u00bfHabla espa\u00f1ol?' unicode = turbogears.expose()(unicode) def returnedtemplate(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template="turbogears.tests.simple") returnedtemplate = turbogears.expose()(returnedtemplate) def returnedtemplate_short(self): return dict(title="Foobar", mybool=False, someval="foo", tg_template=".simple") returnedtemplate_short = turbogears.expose()(returnedtemplate_short) def exposetemplate_short(self): return dict(title="Foobar", mybool=False, someval="foo") exposetemplate_short = turbogears.expose(html=".simple")(exposetemplate_short) def istrue(self, value): self.value = value return str(value) istrue = turbogears.error_handler(validation_error_handler)(istrue) istrue = turbogears.validate(validators={ 'value': validators.StringBoolean()})(istrue) istrue = turbogears.expose()(istrue) def callsanother(self): return self.istrue(True) callsanother = turbogears.expose()(callsanother) def returnjson(self): return dict(title="Foobar", mybool=False, someval="foo", tg_html="turbogears.tests.simple") returnjson = turbogears.expose(format="json", html="turbogears.tests.simple")(returnjson) def allowjson(self): return dict(title="Foobar", mybool=False, someval="foo", tg_html="turbogears.tests.simple") allowjson = turbogears.expose(html="turbogears.tests.simple", allow_json=False)(allowjson) def impliedjson(self): return dict(title="Blah") impliedjson = turbogears.expose(format="json")(impliedjson) def contenttype(self): return "Foobar" contenttype = turbogears.expose(content_type="xml/atom")(contenttype) def save(self, submit, firstname, lastname="Miller"): self.submit = submit self.firstname = firstname self.lastname = lastname self.fullname = "%s %s" % (self.firstname, self.lastname) return self.fullname save = turbogears.error_handler(validation_error_handler)(save) save = turbogears.validate(validators={ "firstname": validators.String(min=2, not_empty=True), "lastname": validators.String()})(save) save = turbogears.expose()(save) class Registration(formencode.Schema): allow_extra_fields = True firstname = validators.String(min=2, not_empty=True) lastname = validators.String() def save2(self, submit, firstname, lastname="Miller"): return self.save(submit, firstname, lastname) save2 = turbogears.error_handler(validation_error_handler)(save2) save2 = turbogears.validate(validators=Registration())(save2) save2 = turbogears.expose()(save2) def useother(self): return dict(tg_template="turbogears.tests.othertemplate") useother = turbogears.expose(html="turbogears.tests.simple")(useother) rwt_called = 0 def rwt(self, func, *args, **kw): self.rwt_called += 1 func(*args, **kw) def flash_plain(self): turbogears.flash("plain") return dict(title="Foobar", mybool=False, someval="niggles") flash_plain = turbogears.expose(html=".simple", allow_json=True)(flash_plain) def flash_unicode(self): turbogears.flash(u"\xfcnicode") return dict(title="Foobar", mybool=False, someval="niggles") flash_unicode = turbogears.expose(html=".simple", allow_json=True)(flash_unicode) def flash_data_structure(self): turbogears.flash(dict(uni=u"\xfcnicode", testing=[1, 2, 3])) return dict(title="Foobar", mybool=False, someval="niggles") flash_data_structure = turbogears.expose(html=".simple", allow_json=True)(flash_data_structure) def flash_redirect(self): turbogears.flash(u"redirect \xfcnicode") turbogears.redirect("/flash_redirected?tg_format=json") flash_redirect = turbogears.expose(html=".simple", allow_json=True)(flash_redirect) def flash_redirected(self): return dict(title="Foobar", mybool=False, someval="niggles") flash_redirected = turbogears.expose(html=".simple", allow_json=True)(flash_redirected) def exc_h_value(self, tg_exceptions=None): ''' exception handler for the ValueError of the raise_value_exc controller or the all exc controller ''' return dict(handling_value=True, exception=str(tg_exceptions)) def raise_value_exc(self): raise ValueError('Some Error in the controller') raise_value_exc = turbogears.exception_handler( exc_h_value, "isinstance(tg_exceptions, ValueError)")(raise_value_exc) raise_value_exc = turbogears.expose()(raise_value_exc) def exc_h_key(self, tg_exceptions=None): ''' exception handler for KeyErrors raised in the raise_all_exc exposed method ''' return dict(handling_key=True, exception=str(tg_exceptions)) def exc_h_index(self, tg_exceptions=None): ''' exception handler for the ValueError of the raise_value_exc controller or the all exc controller ''' return dict(handling_index=True, exception=str(tg_exceptions)) def raise_index_exc(self): raise IndexError('Some IndexError') raise_index_exc = turbogears.exception_handler( exc_h_index, "isinstance(tg_exceptions, IndexError)")(raise_index_exc) raise_index_exc = turbogears.expose()(raise_index_exc) def raise_all_exc(self, num=2): num = int(num) if num < 2: raise ValueError('Inferior to 2') elif num == 2: raise IndexError('Equals to 2') elif num > 2: raise KeyError('No such number 2 in the integer range') raise_all_exc = turbogears.exception_handler( exc_h_index, "isinstance(tg_exceptions, IndexError)")(raise_all_exc) raise_all_exc = turbogears.exception_handler( exc_h_value, "isinstance(tg_exceptions, ValueError)")(raise_all_exc) raise_all_exc = turbogears.exception_handler( exc_h_key, "isinstance(tg_exceptions, KeyError)")(raise_all_exc) raise_all_exc = turbogears.expose()(raise_all_exc) class TestRoot(unittest.TestCase): def setUp(self): cherrypy.root = None cherrypy.tree.mount_points = {} cherrypy.tree.mount(MyRoot(), "/") cherrypy.tree.mount(SubApp(), "/subthing") def tearDown(self): cherrypy.root = None cherrypy.tree.mount_points = {} def test_jsFiles(self): 'Can access the JavaScript files' testutil.createRequest("/tg_js/MochiKit.js") self.failUnlessEqual("application/x-javascript", cherrypy.response.headers["Content-Type"]) self.failUnlessEqual("200 OK", cherrypy.response.status) def test_jsonOutput(self): testutil.createRequest("/test?tg_format=json") import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values == dict(title="Foobar", mybool=False, someval="niggles", tg_flash=None) assert cherrypy.response.headers["Content-Type"] == "text/javascript" def test_impliedJson(self): testutil.createRequest("/impliedjson?tg_format=json") assert '"title": "Blah"' in cherrypy.response.body[0] def test_allowJson(self): testutil.createRequest("/allowjson?tg_format=json") assert cherrypy.response.headers["Content-Type"] == "text/html" def test_allowJsonConfig(self): "JSON output can be enabled via config." turbogears.config.update({'tg.allow_json':True}) testutil.capture_log("tubrogears.controllers") class JSONRoot(controllers.RootController): def allowjsonconfig(self): return dict(title="Foobar", mybool=False, someval="foo", tg_html="turbogears.tests.simple") allowjsonconfig = turbogears.expose(html="turbogears.tests.simple")(allowjsonconfig) testutil.print_log() cherrypy.root = JSONRoot() testutil.createRequest('/allowjsonconfig?tg_format=json') assert cherrypy.response.headers["Content-Type"]=="text/javascript" turbogears.config.update({'tg.allow_json':False}) def test_allowJsonConfigFalse(self): "Make sure JSON can still be restricted with a global config on." turbogears.config.update({'tg.allow_json':True}) testutil.capture_log("tubrogears.controllers") class JSONRoot(controllers.RootController): def allowjsonconfig(self): return dict(title="Foobar", mybool=False, someval="foo", tg_html="turbogears.tests.simple") allowjsonconfig = turbogears.expose(html="turbogears.tests.simple")(allowjsonconfig) testutil.print_log() cherrypy.root = JSONRoot() testutil.createRequest('/allowjson?tg_format=json') print cherrypy.response.body[0] assert cherrypy.response.headers["Content-Type"]=="text/html" turbogears.config.update({'tg.allow_json':False}) def test_invalidreturn(self): testutil.create_request("/invalid") print cherrypy.response.status assert cherrypy.response.status.startswith("500") def test_strict_parameters(self): turbogears.config.update({"tg.strict_parameters" : True}) testutil.create_request("/save?submit=save&firstname=Foo&lastname=Bar&badparam=1") print cherrypy.response.status assert cherrypy.response.status.startswith("500") assert not hasattr(cherrypy.root, "errors") def test_retrieveDictDirectly(self): d = testutil.call(cherrypy.root.returnjson) assert d["title"] == "Foobar" def test_templateOutput(self): testutil.createRequest("/test") assert "Paging all niggles" in cherrypy.response.body[0] def test_throw_out_random(self): """A random value can be appended to the URL to avoid caching problems.""" testutil.createRequest("/test?tg_random=1") assert "Paging all niggles" in cherrypy.response.body[0] def test_safariUnicodeFix(self): testutil.createRequest("/unicode", headers={'User-Agent' : "Apple WebKit Safari/412.2"}) firstline = cherrypy.response.body[0].split('\n')[0] self.failUnlessEqual("¿Habla español?", firstline) self.failUnless(isinstance(firstline, str)) def test_defaultFormat(self): """The default format can be set via expose""" testutil.createRequest("/returnjson") firstline = cherrypy.response.body[0] assert '"title": "Foobar"' in firstline testutil.createRequest("/returnjson?tg_format=html") firstline = cherrypy.response.body[0] assert '"title": "Foobar"' not in firstline def test_contentType(self): """The content-type can be set via expose""" testutil.createRequest("/contenttype") assert cherrypy.response.headers["Content-Type"] == "xml/atom" def test_returnedTemplateName(self): testutil.createRequest("/returnedtemplate") data = cherrypy.response.body[0].lower() assert "" in data assert 'groovy test template' in data def test_returnedTemplateShort(self): testutil.createRequest("/returnedtemplate_short") assert "Paging all foo" in cherrypy.response.body[0] def test_exposeTemplateShort(self): testutil.createRequest("/exposetemplate_short") assert "Paging all foo" in cherrypy.response.body[0] def test_validation(self): "Data can be converted and validated" testutil.createRequest("/istrue?value=true") assert cherrypy.root.value is True testutil.createRequest("/istrue?value=false") assert cherrypy.root.value is False cherrypy.root = MyRoot() testutil.createRequest("/istrue?value=foo") assert not hasattr(cherrypy.root, "value") assert cherrypy.root.functionname == "istrue" testutil.createRequest("/save?submit=send&firstname=John&lastname=Doe") assert cherrypy.root.fullname == "John Doe" assert cherrypy.root.submit == "send" testutil.createRequest("/save?submit=send&firstname=Arthur") assert cherrypy.root.fullname == "Arthur Miller" testutil.createRequest("/save?submit=send&firstname=Arthur&lastname=") assert cherrypy.root.fullname == "Arthur " testutil.createRequest("/save?submit=send&firstname=D&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") assert "characters" in cherrypy.root.errors["firstname"].msg.lower() testutil.createRequest("/save?submit=send&firstname=&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") def test_validationwithschema(self): "Data can be converted and validated with formencode.Schema instance" testutil.createRequest("/save2?submit=send&firstname=John&lastname=Doe") assert cherrypy.root.fullname == "John Doe" assert cherrypy.root.submit == "send" testutil.createRequest("/save2?submit=send&firstname=Arthur&lastname=") assert cherrypy.root.fullname == "Arthur " testutil.createRequest("/save2?submit=send&firstname=&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") testutil.createRequest("/save2?submit=send&firstname=D&lastname=") assert len(cherrypy.root.errors) == 1 assert cherrypy.root.errors.has_key("firstname") def test_othertemplate(self): "'tg_html' in a returned dict will use the template specified there" testutil.createRequest("/useother") assert "This is the other template" in cherrypy.response.body[0] def test_runwithtrans(self): "run_with_transaction is called only on topmost exposed method" oldrwt = database.run_with_transaction database.run_with_transaction = cherrypy.root.rwt testutil.createRequest("/callsanother") database.run_with_transaction = oldrwt assert cherrypy.root.value assert cherrypy.root.rwt_called == 1 def test_positional(self): "Positional parameters should work" testutil.createRequest("/pos/foo") assert cherrypy.root.posvalue == "foo" def test_flash_plain(self): "turbogears.flash with strings should work" testutil.createRequest("/flash_plain?tg_format=json") import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"]=="plain" assert not cherrypy.response.simple_cookie.has_key("tg_flash") def test_flash_unicode(self): "turbogears.flash with unicode objects should work" testutil.createRequest("/flash_unicode?tg_format=json") import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"]==u"\xfcnicode" assert not cherrypy.response.simple_cookie.has_key("tg_flash") def test_flash_on_redirect(self): "turbogears.flash must survive a redirect" testutil.createRequest("/flash_redirect?tg_format=json") assert cherrypy.response.status.startswith("302") testutil.createRequest( cherrypy.response.headers["Location"], headers=dict(Cookie=cherrypy.response.simple_cookie.output(header="").strip())) import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"]==u"redirect \xfcnicode" def test_double_flash(self): """latest set flash should have precedence""" # Here we are calling method that sets a flash message. However flash # cookie is still there. Turbogears should discard old flash message # from cookie and use new one, set by flash_plain(). testutil.createRequest("/flash_plain?tg_format=json", headers=dict(Cookie='tg_flash="old flash"; Path=/;')) import simplejson values = simplejson.loads(cherrypy.response.body[0]) assert values["tg_flash"]=="plain" assert cherrypy.response.simple_cookie.has_key("tg_flash"), \ "Cookie clearing request should be present" flashcookie = cherrypy.response.simple_cookie['tg_flash'] assert flashcookie['expires'] == 0 def test_set_kid_outputformat_in_config(self): "the outputformat for kid can be set in the config" turbogears.config.update({'kid.outputformat': 'xhtml'}) testutil.createRequest('/test') response = cherrypy.response.body[0] assert 'scCstdddtddSdS(NstitlesFoobarsmyboolssomevalsfoo(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysexposetemplate_shortCscCs||_t|SdS(N(svaluesselfsstr(sselfsvalue((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysistrueGs s validatorssvaluecCs|itSdS(N(sselfsistruesTrue(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys callsanotherOsc Cs#tdddtddddSdS(NstitlesFoobarsmyboolssomevalsfoostg_htmlsturbogears.tests.simple(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys returnjsonSssformatsjsonsturbogears.tests.simplec Cs#tdddtddddSdS(NstitlesFoobarsmyboolssomevalsfoostg_htmlsturbogears.tests.simple(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys allowjsonYscCstddSdS(NstitlesBlah(sdict(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys impliedjson_scCsdSdS(NsFoobar((sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys contenttypecss content_typesxml/atomsMillercCs?||_||_||_d|i|if|_|iSdS(Ns%s %s(ssubmitsselfs firstnameslastnamesfullname(sselfssubmits firstnameslastname((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pyssavegs    s firstnamesminis not_emptyslastnames RegistrationcBs2tZeZeidddeZeiZRS(Nsminis not_empty(s__name__s __module__sTruesallow_extra_fieldss validatorssStrings firstnameslastname(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys RegistrationsscCs|i|||SdS(N(sselfssavessubmits firstnameslastname(sselfssubmits firstnameslastname((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pyssave2xscCstddSdS(Ns tg_templatesturbogears.tests.othertemplate(sdict(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysuseother~sicOs |id7_|||dS(Ni(sselfs rwt_calledsfuncsargsskw(sselfsfuncsargsskw((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysrwtscCs*tidtdddtddSdS(NsplainstitlesFoobarsmyboolssomevalsniggles(s turbogearssflashsdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys flash_plains cCs*tidtdddtddSdS(NuünicodestitlesFoobarsmyboolssomevalsniggles(s turbogearssflashsdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys flash_unicodes cCsBtitddddddgtddd td d SdS( NsuniuünicodestestingiiistitlesFoobarsmyboolssomevalsniggles(s turbogearssflashsdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysflash_data_structures%cCstidtiddS(Nuredirect ünicodes /flash_redirected?tg_format=json(s turbogearssflashsredirect(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysflash_redirects cCstdddtddSdS(NstitlesFoobarsmyboolssomevalsniggles(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysflash_redirectedscCstdtdt|SdS(sz exception handler for the ValueError of the raise_value_exc controller or the all exc controller shandling_values exceptionN(sdictsTruesstrs tg_exceptions(sselfs tg_exceptions((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys exc_h_valuescCstddS(NsSome Error in the controller(s ValueError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysraise_value_excss%isinstance(tg_exceptions, ValueError)cCstdtdt|SdS(sd exception handler for KeyErrors raised in the raise_all_exc exposed method s handling_keys exceptionN(sdictsTruesstrs tg_exceptions(sselfs tg_exceptions((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys exc_h_keyscCstdtdt|SdS(sz exception handler for the ValueError of the raise_value_exc controller or the all exc controller shandling_indexs exceptionN(sdictsTruesstrs tg_exceptions(sselfs tg_exceptions((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys exc_h_indexscCstddS(NsSome IndexError(s IndexError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysraise_index_excss%isinstance(tg_exceptions, IndexError)cCsgt|}|djotdn;|djotdn|djotdndS(Nis Inferior to 2s Equals to 2s%No such number 2 in the integer range(sintsnums ValueErrors IndexErrorsKeyError(sselfsnum((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys raise_all_excs    s#isinstance(tg_exceptions, KeyError)(0s__name__s __module__sindexs turbogearssexposesvalidation_error_handlerstestsTruesinvalidspossNones servefilesunicodesreturnedtemplatesreturnedtemplate_shortsexposetemplate_shortsistrues error_handlersvalidates validatorss StringBooleans callsanothers returnjsons allowjsonsFalses impliedjsons contenttypessavesStrings formencodesSchemas Registrationssave2suseothers rwt_calledsrwts flash_plains flash_unicodesflash_data_structuresflash_redirectsflash_redirecteds exc_h_valuesraise_value_excsexception_handlers exc_h_keys exc_h_indexsraise_index_excs raise_all_exc(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysMyRoots            '        B                       sTestRootcBs1tZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"RS("NcCsEtt_hti_tiitdtiitddS(Ns/s /subthing(sNonescherrypysrootstrees mount_pointssmountsMyRootsSubApp(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pyssetUps  cCstt_hti_dS(N(sNonescherrypysrootstrees mount_points(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystearDowns cCsAtid|idtiid|idtiidS(sCan access the JavaScript filess/tg_js/MochiKit.jssapplication/x-javascripts Content-Types200 OKN(stestutils createRequestsselfsfailUnlessEqualscherrypysresponsesheaderssstatus(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys test_jsFiless   c Cstiddk}|itiid}|tdddt dddt jpt tii d d jpt dS( Ns/test?tg_format=jsonistitlesFoobarsmyboolssomevalsnigglesstg_flashs Content-Typestext/javascript( stestutils createRequests simplejsonsloadsscherrypysresponsesbodysvaluessdictsFalsesNonesAssertionErrorsheaders(sselfs simplejsonsvalues((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_jsonOutputs   cCs/tiddtiidjptdS(Ns/impliedjson?tg_format=jsons"title": "Blah"i(stestutils createRequestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_impliedJsons cCs/tidtiiddjptdS(Ns/allowjson?tg_format=jsons Content-Types text/html(stestutils createRequestscherrypysresponsesheaderssAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_allowJsons cCstiihdt<tiddtifdY}ti |t _ ti dt i iddjpttiihdt<dS( s&JSON output can be enabled via config.s tg.allow_jsonstubrogears.controllerssJSONRootcBs)tZdZeiddeZRS(Nc Cs#tdddtddddSdS(NstitlesFoobarsmyboolssomevalsfoostg_htmlsturbogears.tests.simple(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysallowjsonconfigsshtmlsturbogears.tests.simple(s__name__s __module__sallowjsonconfigs turbogearssexpose(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysJSONRoots s/allowjsonconfig?tg_format=jsons Content-Typestext/javascriptN(s turbogearssconfigsupdatesTruestestutils capture_logs controllerssRootControllersJSONRoots print_logscherrypysroots createRequestsresponsesheaderssAssertionErrorsFalse(sselfsJSONRoot((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_allowJsonConfigs    cCstiihdt<tiddtifdY}ti |t _ ti dt i idGHt i iddjpttiihdt<d S( s?Make sure JSON can still be restricted with a global config on.s tg.allow_jsonstubrogears.controllerssJSONRootcBs)tZdZeiddeZRS(Nc Cs#tdddtddddSdS(NstitlesFoobarsmyboolssomevalsfoostg_htmlsturbogears.tests.simple(sdictsFalse(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysallowjsonconfigsshtmlsturbogears.tests.simple(s__name__s __module__sallowjsonconfigs turbogearssexpose(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysJSONRoots s/allowjson?tg_format=jsonis Content-Types text/htmlN(s turbogearssconfigsupdatesTruestestutils capture_logs controllerssRootControllersJSONRoots print_logscherrypysroots createRequestsresponsesbodysheaderssAssertionErrorsFalse(sselfsJSONRoot((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_allowJsonConfigFalse s    cCs9tidtiiGHtiiidptdS(Ns/invalids500(stestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_invalidreturns  cCsmtiihdt<tidtiiGHtiii dpt t ti d pt dS(Nstg.strict_parameterss7/save?submit=save&firstname=Foo&lastname=Bar&badparam=1s500serrors( s turbogearssconfigsupdatesTruestestutilscreate_requestscherrypysresponsesstatuss startswithsAssertionErrorshasattrsroot(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_strict_parameters!s   cCs1titii}|ddjptdS(NstitlesFoobar(stestutilscallscherrypysroots returnjsonsdsAssertionError(sselfsd((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_retrieveDictDirectly(scCs/tiddtiidjptdS(Ns/testsPaging all nigglesi(stestutils createRequestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_templateOutput,s cCs/tiddtiidjptdS(sLA random value can be appended to the URL to avoid caching problems.s/test?tg_random=1sPaging all nigglesiN(stestutils createRequestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_throw_out_random0s cCsctiddhdd<tiididd}|id||i t |t dS(Ns/unicodesheaderss User-AgentsApple WebKit Safari/412.2is s¿Habla español?( stestutils createRequestscherrypysresponsesbodyssplits firstlinesselfsfailUnlessEquals failUnlesss isinstancesstr(sselfs firstline((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_safariUnicodeFix6scCsftidtiid}d|jpttidtiid}d|jptdS(s(The default format can be set via exposes /returnjsonis"title": "Foobar"s/returnjson?tg_format=htmlN(stestutils createRequestscherrypysresponsesbodys firstlinesAssertionError(sselfs firstline((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_defaultFormat=s  cCs/tidtiiddjptdS(s&The content-type can be set via exposes /contenttypes Content-Typesxml/atomN(stestutils createRequestscherrypysresponsesheaderssAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_contentTypeFs cCsOtidtiidi}d|jptd|jptdS(Ns/returnedtemplateissgroovy test template(stestutils createRequestscherrypysresponsesbodyslowersdatasAssertionError(sselfsdata((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_returnedTemplateNameKs cCs/tiddtiidjptdS(Ns/returnedtemplate_shortsPaging all fooi(stestutils createRequestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_returnedTemplateShortQs cCs/tiddtiidjptdS(Ns/exposetemplate_shortsPaging all fooi(stestutils createRequestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_exposeTemplateShortUs cCstidtiitjpttidtiitjpttt_tidt tid pttii djpttidtii djpttii djpttid tii d jpttid tii d jpttid t tiidjpttiiidptdtiidiijpttidt tiidjpttiiidptdS(s#Data can be converted and validateds/istrue?value=trues/istrue?value=falses/istrue?value=foosvaluesistrues-/save?submit=send&firstname=John&lastname=DoesJohn Doessends"/save?submit=send&firstname=Arthurs Arthur Millers,/save?submit=send&firstname=Arthur&lastname=sArthur s'/save?submit=send&firstname=D&lastname=is firstnames characterss&/save?submit=send&firstname=&lastname=N(stestutils createRequestscherrypysrootsvaluesTruesAssertionErrorsFalsesMyRootshasattrs functionnamesfullnamessubmitslenserrorsshas_keysmsgslower(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_validationYs.         '  cCstidtiidjpttiidjpttidtiidjpttidttiidjpttiii dpttid ttiidjpttiii dptd S( sCData can be converted and validated with formencode.Schema instances./save2?submit=send&firstname=John&lastname=DoesJohn Doessends-/save2?submit=send&firstname=Arthur&lastname=sArthur s'/save2?submit=send&firstname=&lastname=is firstnames(/save2?submit=send&firstname=D&lastname=N( stestutils createRequestscherrypysrootsfullnamesAssertionErrorssubmitslenserrorsshas_key(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_validationwithschemass      cCs/tiddtiidjptdS(sB'tg_html' in a returned dict will use the template specified theres /useothersThis is the other templateiN(stestutils createRequestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_othertemplates cCs`ti}tiit_tid|t_tiipt tii djpt dS(s=run_with_transaction is called only on topmost exposed methods /callsanotheriN( sdatabasesrun_with_transactionsoldrwtscherrypysrootsrwtstestutils createRequestsvaluesAssertionErrors rwt_called(sselfsoldrwt((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_runwithtranss   cCs+tidtiidjptdS(s!Positional parameters should works/pos/foosfooN(stestutils createRequestscherrypysrootsposvaluesAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_positionals cCsitiddk}|itiid}|ddjpttii i d ptdS(s)turbogears.flash with strings should works/flash_plain?tg_format=jsonNistg_flashsplain( stestutils createRequests simplejsonsloadsscherrypysresponsesbodysvaluessAssertionErrors simple_cookieshas_key(sselfsvaluess simplejson((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_flash_plains   cCsitiddk}|itiid}|ddjpttii i d ptdS(s1turbogears.flash with unicode objects should works/flash_unicode?tg_format=jsonNistg_flashuünicode( stestutils createRequests simplejsonsloadsscherrypysresponsesbodysvaluessAssertionErrors simple_cookieshas_key(sselfsvaluess simplejson((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_flash_unicodes   cCstidtiiidpttitiiddtdtii i ddi dk }|i tiid }|d d jptdS( s(turbogears.flash must survive a redirects/flash_redirect?tg_format=jsons302sLocationsheaderssCookiesheadersNistg_flashuredirect ünicode(stestutils createRequestscherrypysresponsesstatuss startswithsAssertionErrorsheaderssdicts simple_cookiesoutputsstrips simplejsonsloadssbodysvalues(sselfs simplejsonsvalues((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_flash_on_redirects + cCstiddtdddk}|itiid}|ddjpt tii i dp t d tii d}|d djpt dS( s'latest set flash should have precedences/flash_plain?tg_format=jsonsheaderssCookiestg_flash="old flash"; Path=/;Nistg_flashsplains)Cookie clearing request should be presentsexpires( stestutils createRequestsdicts simplejsonsloadsscherrypysresponsesbodysvaluessAssertionErrors simple_cookieshas_keys flashcookie(sselfs simplejsons flashcookiesvalues((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_double_flashs   cCstiihdd<tidtiid}d|jpttiihdd<tidtiid}d|jptd|jpttiihdd <tidtiid}d|jptd |jptd |jptd S( s1the outputformat for kid can be set in the configskid.outputformatsxhtmls/testis)tidtiidGHdtiidjptdS(s our exception raised in the controller should be handled gracefully by the right exception handler registered for this task s/raise_value_excishandling_valueN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_exc_values cCs>tidtiidGHdtiidjptdS(s our exception raised in the controller should be handled gracefully by the right exception handler registered for this... s/raise_index_excishandling_indexN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_exc_indexs cCstidtiidGHdtiidjpttidtiidGHdtiidjpttidtiidGHdtiidjptdS( s test a controller that is protected by multiple exception handlers it should raise either of the 3 exceptions but all should be handled by their respective handlers without problem... s/raise_all_exc?num=1ishandling_values/raise_all_exc?num=2shandling_indexs/raise_all_exc?num=3s handling_keyN(stestutilscreate_requestscherrypysresponsesbodysAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys test_exc_alls   (#s__name__s __module__ssetUpstearDowns test_jsFilesstest_jsonOutputstest_impliedJsonstest_allowJsonstest_allowJsonConfigstest_allowJsonConfigFalsestest_invalidreturnstest_strict_parametersstest_retrieveDictDirectlystest_templateOutputstest_throw_out_randomstest_safariUnicodeFixstest_defaultFormatstest_contentTypestest_returnedTemplateNamestest_returnedTemplateShortstest_exposeTemplateShortstest_validationstest_validationwithschemastest_othertemplatestest_runwithtransstest_positionalstest_flash_plainstest_flash_unicodestest_flash_on_redirectstest_double_flashs#test_set_kid_outputformat_in_configstest_fileservingstest_exc_valuestest_exc_indexs test_exc_all(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysTestRootsB                            sTestURLscBsPtZdZdZdZdZdZdZdZdZ RS( NcCs=hti_tt_tti_ttii_dS(N(scherrypystrees mount_pointssMyRootsrootsSubAppssubthings subsubthing(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pyssetUps  cCstid|idtd|idtddgtdddddd d gjpttdtddddd d gjpttdtdddtd jptdS( Ns/s/foosfoo/barsfoosbarisbazis/foo?bar=1&baz=2s/foo?baz=2&bar=1s /foo?bar=1(stestutils createRequestsselfsfailUnlessEqualsurlsAssertionErrorsdictsNone(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_basicurlss  ,2cCs)tti_|idtiddS(Ns/foo(sNonescherrypysservingsrequestsselfs assertEqualss turbogearssurl(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys"test_url_without_request_availables cCs=tid|idtd|idtddS(Ns /subthing/sfoos /subthing/foos/foo(stestutils createRequestsselfsfailUnlessEqualsurl(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys test_approotss cCs6tidtdGHdtdjptdS(Ns/subthing/subsubthing/s/foos/subthing/subsubthing/foo(stestutilscreate_requestsurlsAssertionError(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_lowerapprootss  cCs[tiihdd<tiitidtii GH|i dt ddS(Nsserver.webpaths/coolsite/roots/coolsite/root/subthing/s/coolsite/root/subthing/foos/foo( s turbogearssconfigsupdatesstartupsstartTurboGearsstestutils createRequestscherrypystrees mount_pointsselfsfailUnlessEqualsurl(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_approotsWithPaths    cCstiihdd<tiitidy"tidtp t dWn7t i j o(}|i GHd|i jpt nXy$tidtp t dWn7t i j o(}|i GHd|i jpt nXdS(Nsserver.webpaths/coolsite/roots/coolsite/root/subthing/s/foos*redirect exception should have been raiseds+http://localhost/coolsite/root/subthing/foo(s turbogearssconfigsupdatesstartupsstartTurboGearsstestutils createRequestsredirectsFalsesAssertionErrorscherrypys HTTPRedirectsesurls(sselfse((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys test_redirect%s   cCs*tiihdd<tiidS(Nsserver.webpaths(s turbogearssconfigsupdatesstartupsstartTurboGears(sself((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystearDown8s( s__name__s __module__ssetUpstest_basicurlss"test_url_without_request_availables test_approotsstest_lowerapprootsstest_approotsWithPaths test_redirectstearDown(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysTestURLss      cCsTtt_tti_tidtiiGHtiiidpt dS(s?If there is no trailing slash on an index method call, redirects/foos302N( sSubAppscherrypysrootsfoostestutils createRequestsresponsesstatuss startswithsAssertionError(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pystest_index_trailing_slash<s    cCsdtifdY}|t_tidtiid}|GHd|jpt d|jpt d|jpt dS( skTests that we can use argument names that are internally used by TG in controllers:_execute_func et al.sAppcBs#tZdZeieZRS(NcKs<digi}|iD]}|d|q~SdS(Ns s%s:%s(sjoinsappends_[1]skws iteritemssi(sselfskws_[1]si((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysindexHs(s__name__s __module__sindexs turbogearssexpose(((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pysAppGs s&/?format=foo&template=bar&fragment=boois format:foos template:bars fragment:booN( s controllerssRootControllersAppscherrypysrootstestutils createRequestsresponsesbodysoutputsAssertionError(sAppsoutput((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys)test_can_use_internally_defined_argumentsDs  (sunittests cStringIOsStringIOssyss turbogearss controllerssurls validatorssdatabasestestutilscherrypys formencodes pkg_resourcessRootControllersSubAppsMyRootsTestCasesTestRootsTestURLsstest_index_trailing_slashs)test_can_use_internally_defined_arguments(stestutils controllersstest_index_trailing_slashscherrypys turbogearssStringIOsurls)test_can_use_internally_defined_argumentssunittestsdatabasesMyRoots pkg_resourcess formencodessyssTestURLssSubAppsTestRoots validators((s:build\bdist.win32\egg\turbogears\tests\test_controllers.pys?s$            $> PK,W6D !turbogears/tests/test_database.pyfrom turbogears import database from sqlobject import dbconnection import cherrypy hub = database.AutoConnectHub("sqlite:///:memory:") def test_registry(): "hubs appear in a registry" assert hub in database.hub_registry def test_alwaysTransaction(): "hub.getConnection always returns a Transaction" assert isinstance(hub.getConnection(), dbconnection.Transaction) database.end_all() assert not isinstance(hub.threadingLocal.connection, dbconnection.Transaction) class DatabaseStandIn: committed = False rolled_back = False ended = False successful_called = False def __init__(self): self.old_commit = database.commit_all self.old_rollback = database.rollback_all self.old_end = database.end_all database.commit_all = self.commit database.end_all = self.end database.rollback_all = self.rollback def commit(self): self.committed = True def rollback(self): self.rolled_back = True def end(self): self.ended = True self.old_end() def successful(self): self.successful_called = True def failure(self): self.failure_called = True raise Warning("Oh my!") def redirect(self): self.redirect_called = True raise cherrypy.HTTPRedirect("/") def restore(self): database.commit_all = self.old_commit database.rollback_all = self.old_rollback database.end_all = self.end def test_good_transaction(): "successful runs automatically commit" dsi = DatabaseStandIn() database.run_with_transaction(dsi.successful) dsi.restore() assert dsi.successful_called assert dsi.committed assert dsi.ended def test_bad_transaction(): "failed runs automatically rollback" dsi = DatabaseStandIn() try: database.run_with_transaction(dsi.failure) dsi.restore() assert False, "exception should have been raised" except: pass dsi.restore() assert dsi.failure_called assert dsi.rolled_back assert dsi.ended def test_redirection(): "Redirects count as successful runs, not failures" dsi = DatabaseStandIn() try: database.run_with_transaction(dsi.redirect) except cherrypy.HTTPRedirect: pass dsi.restore() assert dsi.redirect_called assert dsi.committed assert dsi.ended def test_so_to_dict(): from sqlobject import IntCol from sqlobject.inheritance import InheritableSQLObject class Parent(InheritableSQLObject): _connection = hub a = IntCol() class Child(Parent): _connection = hub b = IntCol() Parent.createTable() Child.createTable() p = Parent(a=1) c = Child(a=1, b=2) p_dict = database.so_to_dict(p) assert p_dict['a'] == 1 c_dict = database.so_to_dict(c) assert c_dict['a'] == 1 assert c_dict['b'] == 2 assert None == c_dict.get('childName', None) assert None == p_dict.get('childName', None) PKh6g^^"turbogears/tests/test_database.pyc; uR8Fc@sdklZdklZdkZeidZdZdZdfdYZ dZ d Z d Z d Z dS( (sdatabase(s dbconnectionNssqlite:///:memory:cCsttijptdS(shubs appear in a registryN(shubsdatabases hub_registrysAssertionError(((s7build\bdist.win32\egg\turbogears\tests\test_database.pys test_registryscCsOttitipttittii ti ptdS(s.hub.getConnection always returns a TransactionN( s isinstanceshubs getConnections dbconnections TransactionsAssertionErrorsdatabasesend_allsthreadingLocals connection(((s7build\bdist.win32\egg\turbogears\tests\test_database.pystest_alwaysTransaction s  sDatabaseStandIncBshtZeZeZeZeZdZdZdZ dZ dZ dZ dZ dZRS( NcCsLti|_ti|_ti|_|it_|i t_|i t_dS(N( sdatabases commit_allsselfs old_commits rollback_alls old_rollbacksend_allsold_endscommitsendsrollback(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pys__init__s      cCs t|_dS(N(sTruesselfs committed(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pyscommitscCs t|_dS(N(sTruesselfs rolled_back(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pysrollback"scCst|_|idS(N(sTruesselfsendedsold_end(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pysend%s cCs t|_dS(N(sTruesselfssuccessful_called(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pys successful)scCst|_tddS(NsOh my!(sTruesselfsfailure_calledsWarning(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pysfailure,s cCst|_tiddS(Ns/(sTruesselfsredirect_calledscherrypys HTTPRedirect(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pysredirect0s cCs(|it_|it_|it_dS(N(sselfs old_commitsdatabases commit_alls old_rollbacks rollback_allsendsend_all(sself((s7build\bdist.win32\egg\turbogears\tests\test_database.pysrestore4s  (s__name__s __module__sFalses committeds rolled_backsendedssuccessful_calleds__init__scommitsrollbacksends successfulsfailuresredirectsrestore(((s7build\bdist.win32\egg\turbogears\tests\test_database.pysDatabaseStandIns       cCsZt}ti|i|i|ipt|ipt|i ptdS(s$successful runs automatically commitN( sDatabaseStandInsdsisdatabasesrun_with_transactions successfulsrestoressuccessful_calledsAssertionErrors committedsended(sdsi((s7build\bdist.win32\egg\turbogears\tests\test_database.pystest_good_transaction9s  cCst}y/ti|i|itp tdWnnX|i|ipt|i pt|i ptdS(s"failed runs automatically rollbacks!exception should have been raisedN( sDatabaseStandInsdsisdatabasesrun_with_transactionsfailuresrestoresFalsesAssertionErrorsfailure_calleds rolled_backsended(sdsi((s7build\bdist.win32\egg\turbogears\tests\test_database.pystest_bad_transactionBs   cCswt}yti|iWntij onX|i|ipt |i pt |i pt dS(s0Redirects count as successful runs, not failuresN( sDatabaseStandInsdsisdatabasesrun_with_transactionsredirectscherrypys HTTPRedirectsrestoresredirect_calledsAssertionErrors committedsended(sdsi((s7build\bdist.win32\egg\turbogears\tests\test_database.pystest_redirectionPs  cs.dkldkl}d|fdY}d|fdY}|i|i|dd}|ddd d }t i |}|ddjpt t i |}|ddjpt |d d jpt t|id tjpt t|id tjpt dS( N(sIntCol(sInheritableSQLObjectsParentcstZeZZRS(N(s__name__s __module__shubs _connectionsIntColsa((sIntCol(s7build\bdist.win32\egg\turbogears\tests\test_database.pysParent`ssChildcstZeZZRS(N(s__name__s __module__shubs _connectionsIntColsb((sIntCol(s7build\bdist.win32\egg\turbogears\tests\test_database.pysChilddssaisbis childName(s sqlobjectsIntColssqlobject.inheritancesInheritableSQLObjectsParentsChilds createTablespscsdatabases so_to_dictsp_dictsAssertionErrorsc_dictsNonesget(scsc_dictsParentspsp_dictsIntColsChildsInheritableSQLObject((sIntCols7build\bdist.win32\egg\turbogears\tests\test_database.pystest_so_to_dict\s     (s turbogearssdatabases sqlobjects dbconnectionscherrypysAutoConnectHubshubs test_registrystest_alwaysTransactionsDatabaseStandInstest_good_transactionstest_bad_transactionstest_redirectionstest_so_to_dict( stest_good_transactionstest_redirectionscherrypyshubsdatabasestest_so_to_dictsDatabaseStandInstest_bad_transactions dbconnections test_registrystest_alwaysTransaction((s7build\bdist.win32\egg\turbogears\tests\test_database.pys?s     (  PKP6u, "turbogears/tests/test_decorator.pyimport unittest from turbogears.decorator import * from turbogears import testutil def d1(func): def call(func, *args, **kw): return func(*args, **kw) return call d1 = decorator(d1) def d2(func): def call(func, *args, **kw): return func(*args, **kw) return call d2 = decorator(d2) def d3(func): func.baz2 = 2 def call(func, *args, **kw): return func(*args, **kw) return call d3 = decorator(d3) def foo(a, b): return a+b foo.baz1 = 1 bar = foo foo = d1(foo) foo = d2(foo) foo = d3(foo) def addn(n): def entangle(func): def call(func, *args, **kw): return func(*args, **kw) + n return call return decorator(entangle) [addn(11)] def py23(a): return a [compose(addn(1), addn(2))] def composed(a): return a def weakener(): def entangle(func): def call(func, *args, **kw): return len(args) return call return weak_signature_decorator(entangle) [weakener()] def weakling(): pass def sig_changer(): def entangle(func): def call(func, a, b): return func(b) return call return decorator(entangle, (["a", "b"], None, None, None)) [sig_changer()] def new_sig(a): return a def simple(func, *args, **kw): return func(*args, **kw) + 1 simple = simple_decorator(simple) def simple_weakener(func, *args, **kw): return len(args) simple_weakener = simple_weak_signature_decorator(simple_weakener) def simple_weakling(): pass simple_weakling = simple_weakener(simple_weakling) def simple_adder1(a): return a simple_adder1 = simple(simple_adder1) class TestDecorator(unittest.TestCase): def test_preservation(self): for key, value in bar.__dict__.iteritems(): self.failUnless(key in foo.__dict__) self.failUnless(value == foo.__dict__[key]) self.failUnless(bar.__name__ == foo.__name__) self.failUnless(bar.__module__ == foo.__module__) self.failUnless(bar.__doc__ == foo.__doc__) def test_eq(self): self.failUnless(func_id(foo) == func_id(bar)) self.failUnless(func_eq(foo, bar)) self.failUnless(bar == func_original(foo)) self.failUnless(bar is func_original(foo)) def test_history(self): self.failUnless(len(func_composition(foo)) == 4) self.failUnless(func_composition(foo)[:-1] == func_composition(func_composition(foo)[-2])) def test_23compatibility(self): self.failUnless(py23(2)==13) def test_attributes(self): self.failUnless(foo.baz1==1) self.failUnless(foo.baz2==2) def test_composition(self): self.failUnless(addn(3)(py23)(2)==16) self.failUnless(composed(1)==4, composed(1)) self.failUnless(composed.__name__ == "composed") def test_signature(self): self.failUnless(make_weak_signature(bar)[1:3]==( "_decorator__varargs", "_decorator__kwargs")) self.failUnless(weakling(1,2)==2) self.failUnless(new_sig(1,2)==2) def test_simple_decorators(self): self.failUnless(simple_adder1(1)==2) self.failUnless(simple_weakling(1,2)==2) PKh6>""#turbogears/tests/test_decorator.pyc; IEc@sdkZdkTdklZdZeeZdZeeZdZeeZdZde_ eZ eeZeeZeeZdZ e d gd Z e e de d gd Zd ZegdZdZegdZdZeeZdZeeZdZeeZdZeeZdeifdYZdS(N(s*(stestutilcCsd}|SdS(NcOs|||SdS(N(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscalls(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysd1s cCsd}|SdS(NcOs|||SdS(N(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscalls(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysd2 s cCsd|_d}|SdS(NicOs|||SdS(N(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscalls(sfuncsbaz2scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysd3s  cCs ||SdS(N(sasb(sasb((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysfoosicsd}t|SdS(Ncsd}|SdS(Ncs|||SdS(N(sfuncsargsskwsn(sfuncsargsskw(sn(s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscall&s(scall(sfuncscall(sn(s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysentangle%s (sentangles decorator(snsentangle((sns8build\bdist.win32\egg\turbogears\tests\test_decorator.pysaddn$s i cCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyspy23,sicCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscomposed0scCsd}t|SdS(NcCsd}|SdS(NcOst|SdS(N(slensargs(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscall5s(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysentangle4s (sentanglesweak_signature_decorator(sentangle((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysweakener3s cCsdS(N((((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysweakling;scCs,d}t|ddgtttfSdS(NcCsd}|SdS(NcCs||SdS(N(sfuncsb(sfuncsasb((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyscall@s(scall(sfuncscall((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysentangle?s sasb(sentangles decoratorsNone(sentangle((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys sig_changer>s cCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pysnew_sigFscOs|||dSdS(Ni(sfuncsargsskw(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyssimpleIscOst|SdS(N(slensargs(sfuncsargsskw((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyssimple_weakenerMscCsdS(N((((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pyssimple_weaklingQscCs|SdS(N(sa(sa((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys simple_adder1Uss TestDecoratorcBsPtZdZdZdZdZdZdZdZdZ RS( NcCsxMtiiD]<\}}|i|tij|i|ti|jqW|ititij|iti ti j|iti ti jdS(N( sbars__dict__s iteritemsskeysvaluesselfs failUnlesssfoos__name__s __module__s__doc__(sselfsvalueskey((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_preservation[s cCsk|ittttj|ittt|itttj|itttjdS(N(sselfs failUnlesssfunc_idsfoosbarsfunc_eqs func_original(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_eqcscCsP|itttdj|ittd tttdjdS(Niii(sselfs failUnlessslensfunc_compositionsfoo(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys test_historyiscCs|itddjdS(Nii (sselfs failUnlessspy23(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_23compatibilitynscCs0|itidj|itidjdS(Nii(sselfs failUnlesssfoosbaz1sbaz2(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_attributesqscCsa|itdtddj|itddjtd|itidjdS(Niiiiiscomposed(sselfs failUnlesssaddnspy23scomposeds__name__(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_compositionus%"cCsb|ittdd!ddfj|itdddj|itdddjdS(Niis_decorator__varargss_decorator__kwargsi(sselfs failUnlesssmake_weak_signaturesbarsweaklingsnew_sig(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_signaturezs&cCs9|itddj|itdddjdS(Nii(sselfs failUnlesss simple_adder1ssimple_weakling(sself((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pystest_simple_decoratorss( s__name__s __module__stest_preservationstest_eqs test_historystest_23compatibilitystest_attributesstest_compositionstest_signaturestest_simple_decorators(((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys TestDecoratorYs       (sunitteststurbogears.decorators turbogearsstestutilsd1s decoratorsd2sd3sfoosbaz1sbarsaddnspy23scomposescomposedsweakenersweaklings sig_changersnew_sigssimplessimple_decoratorssimple_weakenerssimple_weak_signature_decoratorssimple_weaklings simple_adder1sTestCases TestDecorator(stestutilscomposedssimplesunittests sig_changersd2sd3s TestDecoratorsd1sweakenerssimple_weakenersaddnsfoosnew_sigsbarspy23s simple_adder1ssimple_weaklingsweakling((s8build\bdist.win32\egg\turbogears\tests\test_decorator.pys?sD                               PKP6>>&turbogears/tests/test_errorhandling.pyimport unittest import cherrypy from turbogears.controllers import error_handler, exception_handler, \ expose, validate, RootController, Controller from turbogears.errorhandling import FailsafeSchema from turbogears.util import bind_args from turbogears import validators from turbogears import testutil def _errors_to_str(errors): if isinstance(errors, dict): return dict(map(lambda (k,v): (k, str(v)), errors.iteritems())) else: return str(errors) class MyRoot(RootController): def defaulterrorhandler(self, tg_source, tg_errors, tg_exceptions, *args, **kw): return dict(title="Default error handler", errors=_errors_to_str(tg_errors), args=args, kw=kw) def specialisederrorhandler(self, tg_source, tg_errors, *args, **kw): return dict(title="Specialised error handler", errors=_errors_to_str(tg_errors), args=args, kw=kw) def defaulterror(self, bar=""): return dict(title="Default error provider") defaulterror = error_handler(defaulterrorhandler)(defaulterror) defaulterror = validate(validators={"bar":validators.StringBoolean()})( defaulterror) defaulterror = expose()(defaulterror) def specialisederror(self, bar="", baz=""): return dict(title="Specialised error provider") specialisederror = error_handler(defaulterrorhandler)( specialisederror) specialisederror = error_handler(specialisederrorhandler, "'baz' in tg_errors")(specialisederror) specialisederror = validate(validators={"bar":validators.Int(not_empty=True), "baz":validators.Email()})( specialisederror) specialisederror = expose()(specialisederror) def exceptionerror(self): raise Exception("Exception 1") exceptionerror = exception_handler(defaulterrorhandler)(exceptionerror) exceptionerror = expose()(exceptionerror) def exceptionerror2(self): raise Exception("Exception 2") exceptionerror2 = exception_handler(exceptionerror2)(exceptionerror2) exceptionerror2 = expose()(exceptionerror2) def recursiveerror(self, tg_errors=None, bar=""): if tg_errors: return dict(title="Recursive error handler") else: return dict(title="Recursive error provider") recursiveerror = error_handler()(recursiveerror) recursiveerror = validate(validators={"bar":validators.Int(not_empty=True)})( recursiveerror) recursiveerror = expose()(recursiveerror) def impliciterror(self, tg_errors=None, bar=""): if tg_errors: return dict(title="Implicit error handler", tg_errors=str(tg_errors)) else: return dict(title="Implicit error provider") impliciterror = validate(validators={"bar":validators.Int(not_empty=True)})( impliciterror) impliciterror = expose()(impliciterror) def normalmethod(self): return dict(title="Normal method") normalmethod = expose()(normalmethod) def normalmethodcaller(self, bar=""): return dict(title="Normal method caller") normalmethodcaller = error_handler(normalmethod)(normalmethodcaller) normalmethodcaller = validate(validators={ "bar":validators.StringBoolean()})( normalmethodcaller) normalmethodcaller = expose()(normalmethodcaller) def infiniteloop(self): try: self.exceptionerror2() except Exception, e: return dict(title=str(e)) else: return dict(title="Infinite loop provider") infiniteloop = expose()(infiniteloop) def positionalargs(self, first, second, *args, **kw): self.first = first self.second = second self.third = args[0] return dict(title="Positional arguments", first=first, second=second, args=args, bar=kw["bar"]) positionalargs = error_handler(defaulterrorhandler)( positionalargs) positionalargs = validate(validators={"bar":validators.StringBoolean(), "second":validators.Int(not_empty=True)})( positionalargs) positionalargs = expose()(positionalargs) def missingargs(self, bar=""): return dict(title="Missing args provider") missingargs = error_handler(defaulterrorhandler)(missingargs) missingargs = validate(validators={"bar":validators.Int(not_empty=True)})(missingargs) missingargs = expose()(missingargs) def nohandler2(self, bar=""): return dict(title="No handler inner") nohandler2 = validate(validators={"bar":validators.Int(not_empty=True)})(nohandler2) nohandler2 = expose()(nohandler2) def nohandler(self): try: self.nohandler2("abc") except Exception, NotImplementedError: return dict(title="Exception raised") else: return dict(title="No handler") nohandler = expose()(nohandler) def simpleerrorhandler(self, baz=None): return dict(title="Default error handler", baz=baz) def bindargs(self, bar=""): return dict(title="Bind arguments to error handler") bindargs = error_handler(bind_args(baz=123)(simpleerrorhandler))(bindargs) bindargs = validate(validators={"bar":validators.Int(not_empty=True)})(bindargs) bindargs = expose()(bindargs) def notexposed(self, bar, tg_errors = None): if tg_errors: return dict(title="Not exposed error", bar=bar) else: return dict(title="Not exposed", bar=bar) notexposed = validate(validators={"bar":validators.Int(not_empty=True)})(notexposed) def notexposedcaller(self, foo="", bar="", baz=""): return self.notexposed(bar) notexposedcaller = expose()(notexposedcaller) def continuation(self, tg_source): self.continuation = True return tg_source(self) def continuationcaller(self, bar=""): return dict(title="Continuation caller") continuationcaller = error_handler(continuation)(continuationcaller) continuationcaller = validate(validators={"bar":validators.Int(not_empty=True)})( continuationcaller) continuationcaller = expose()(continuationcaller) def nest(self, bar=""): return dict(title="Nested") nest = error_handler(defaulterrorhandler)(nest) nest = validate(validators={"bar":validators.Int(not_empty=True)})(nest) nest = expose()(nest) def failsafenone(self, tg_errors=None, bar="", baz=""): return dict(title="No failsafe", bar=bar, baz=baz) failsafenone = validate(validators={"bar":validators.Int(not_empty=True), "baz":validators.Int(not_empty=True)})(failsafenone) failsafenone = expose()(failsafenone) def failsafevaluesdict(self, tg_errors=None, bar="", baz=""): return dict(title="Failsafe values-dict", bar=bar, baz=baz) failsafevaluesdict = validate(validators={"bar":validators.Int(not_empty=True), "baz":validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.values, failsafe_values={"bar":1, "baz":2})(failsafevaluesdict) failsafevaluesdict = expose()(failsafevaluesdict) def failsafevaluesatom(self, tg_errors=None, bar="", baz=""): return dict(title="Failsafe values-atom", bar=bar, baz=baz) failsafevaluesatom = validate(validators={"bar":validators.Int(not_empty=True), "baz":validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.values, failsafe_values=13)(failsafevaluesatom) failsafevaluesatom = expose()(failsafevaluesatom) def failsafemaperrors(self, tg_errors=None, bar="", baz=""): return dict(title="Failsafe map errors", bar=str(bar), baz=str(baz)) failsafemaperrors = validate(validators={"bar":validators.Int(not_empty=True), "baz":validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.map_errors)( failsafemaperrors) failsafemaperrors = expose()(failsafemaperrors) def failsafeformencode(self, tg_errors=None, bar="", baz=""): return dict(title="Formencode if_invalid", bar=bar, baz=baz) failsafeformencode = validate(validators={"bar":validators.Int( if_invalid=1), "baz":validators.Int(if_invalid=2)})(failsafeformencode) failsafeformencode = expose()(failsafeformencode) def failsafedefaults(self, tg_errors=None, bar=1, baz=2): return dict(title="Failsafe map defaults", bar=bar, baz=baz) failsafedefaults = validate(validators={"bar":validators.Int(not_empty=True), "baz":validators.Int(not_empty=True)}, failsafe_schema=FailsafeSchema.defaults)( failsafedefaults) failsafedefaults = expose()(failsafedefaults) class NestedController(Controller): def nest(self, bar=""): return dict(title="Nested") nest = error_handler()(nest) nest = validate(validators={"bar":validators.Int(not_empty=True)})(nest) nest = expose()(nest) class TestErrorHandler(unittest.TestCase): def setUp(self): cherrypy.root = MyRoot() cherrypy.root.nestedcontroller = NestedController() def test_defaultErrorHandler(self): """ Default error handler. """ testutil.createRequest("/defaulterror?bar=abc") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/defaulterror?bar=true") self.failUnless("Default error provider" in cherrypy.response.body[0]) def test_specialisedErrorHandler(self): """ Error handler specialisation. """ testutil.createRequest("/specialisederror?bar=abc&baz=a@b.com") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/specialisederror?baz=abc&bar=1") self.failUnless("Specialised error handler" in cherrypy.response.body[0]) testutil.createRequest("/specialisederror?bar=1&baz=a@b.com") self.failUnless("Specialised error provider" in cherrypy.response.body[0]) def test_exceptionErrorHandler(self): """ Error handler for exceptions. """ testutil.createRequest("/exceptionerror") self.failUnless("Default error handler" in cherrypy.response.body[0]) def test_recursiveErrorHandler(self): """ Recursive error handler. """ testutil.createRequest("/recursiveerror?bar=abc") self.failUnless("Recursive error handler" in cherrypy.response.body[0]) testutil.createRequest("/recursiveerror?bar=1") self.failUnless("Recursive error provider" in cherrypy.response.body[0]) def test_implicitErrorHandler(self): """ Implicit error handling. """ testutil.createRequest("/impliciterror?bar=abc") self.failUnless("Implicit error handler" in cherrypy.response.body[0]) testutil.createRequest("/impliciterror?bar=1") self.failUnless("Implicit error provider" in cherrypy.response.body[0]) def test_normalMethodErrorHandler(self): """ Normal method as an error handler. """ testutil.createRequest("/normalmethodcaller?bar=abc") self.failUnless("Normal method" in cherrypy.response.body[0]) testutil.createRequest("/normalmethodcaller?bar=true") self.failUnless("Normal method caller" in cherrypy.response.body[0]) def test_infiniteRecursionPrevention(self): """ Infinite recursion prevention. """ testutil.createRequest("/infiniteloop") self.failUnless("Exception 2" in cherrypy.response.body[0]) def test_positionalArgs(self): """ Positional argument validation. """ testutil.createRequest("/positionalargs/first/23/third?bar=abc") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/positionalargs/first/abc/third?bar=false") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/positionalargs/first/abc/third?bar=abc") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/positionalargs/first/23/third?bar=true") self.failUnless("Positional arguments" in cherrypy.response.body[0]) self.failUnless(cherrypy.root.first == "first") self.failUnless(cherrypy.root.second == 23) self.failUnless(cherrypy.root.third == "third") def test_missingArgs(self): """ Arguments required in validation missing. """ testutil.createRequest("/missingargs") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/missingargs?bar=12") self.failUnless("Missing args provider" in cherrypy.response.body[0]) def test_nohandler(self): """ No error hanlder declared. """ testutil.createRequest("/nohandler") self.failUnless("Exception raised" in cherrypy.response.body[0]) def test_bindArgs(self): """ Arguments can be bond to an error handler. """ testutil.createRequest("/bindargs") self.failUnless("123" in cherrypy.response.body[0]) def test_notExposed(self): """ Validation error handling is decoupled from expose. """ testutil.createRequest("/notexposedcaller?foo=a&bar=rab&baz=c") self.failUnless("Not exposed error" in cherrypy.response.body[0]) self.failUnless("rab" in cherrypy.response.body[0]) def test_continuations(self): """ Continuations via error handling mechanism. """ testutil.createRequest("/continuationcaller?bar=a") self.failUnless("Continuation caller" in cherrypy.response.body[0]) self.failUnless(cherrypy.root.continuation == True) def test_nested(self): """ Potentially ambiguous cases. """ testutil.createRequest("/nest?bar=a") self.failUnless("Default error handler" in cherrypy.response.body[0]) testutil.createRequest("/nestedcontroller/nest?bar=a") self.failUnless("Nested" in cherrypy.response.body[0]) def test_failsafe(self): """ Failsafe values for erroneous input. """ testutil.createRequest("/failsafenone?bar=a&baz=b") self.failUnless('"bar": "a"' in cherrypy.response.body[0]) self.failUnless('"baz": "b"' in cherrypy.response.body[0]) testutil.createRequest("/failsafevaluesdict?bar=a&baz=b") self.failUnless('"bar": 1' in cherrypy.response.body[0]) self.failUnless('"baz": 2' in cherrypy.response.body[0]) testutil.createRequest("/failsafevaluesatom?bar=a&baz=b") self.failUnless('"bar": 13' in cherrypy.response.body[0]) self.failUnless('"baz": 13' in cherrypy.response.body[0]) testutil.createRequest("/failsafemaperrors?bar=a&baz=b") self.failUnless('"bar": "Please enter an integer value"' in cherrypy.response.body[0]) self.failUnless('"baz": "Please enter an integer value"' in cherrypy.response.body[0]) testutil.createRequest("/failsafeformencode?bar=a&baz=b") self.failUnless('"bar": 1' in cherrypy.response.body[0]) self.failUnless('"baz": 2' in cherrypy.response.body[0]) testutil.createRequest("/failsafedefaults?bar=a&baz=b") self.failUnless('"bar": 1' in cherrypy.response.body[0],cherrypy.response.body[0]) self.failUnless('"baz": 2' in cherrypy.response.body[0]) PKh6O%iViV'turbogears/tests/test_errorhandling.pyc; IEc@sdkZdkZdklZlZlZlZlZlZdk l Z dk l Z dk lZdk lZdZdefdYZd efd YZd eifd YZdS( N(s error_handlersexception_handlersexposesvalidatesRootControllers Controller(sFailsafeSchema(s bind_args(s validators(stestutilcCs>t|to ttd|iSn t|SdS(NcCs|\}}|t|fS(N(sksvsstr(s.0sksv((s<build\bdist.win32\egg\turbogears\tests\test_errorhandling.pyss(s isinstanceserrorssdictsmaps iteritemssstr(serrors((s<build\bdist.win32\egg\turbogears\tests\test_errorhandling.pys_errors_to_str s sMyRootc BsvtZdZdZddZeeeZedhdei<eZe eZdddZ eee Z eede Z edhdei d e <d ei <e Z e e Z d ZeeeZe eZd ZeeeZe eZedd ZeeZedhdei d e <eZe eZeddZedhdei d e <eZe eZdZe eZddZeeeZedhdei<eZe eZdZe eZdZeeeZedhdei<dei d e <eZe eZddZeeeZedhdei d e <eZe eZddZedhdei d e <eZe eZdZe eZedZddZeed deeZedhdei d e <eZe eZedZedhdei d e <eZddddZe eZdZ ddZ!ee e!Z!edhdei d e <e!Z!e e!Z!ddZ"eee"Z"edhdei d e <e"Z"e e"Z"edddZ#edhdei d e <d ei d e <e#Z#e e#Z#eddd Z$edhdei d e <d ei d e MochiKit can be included everywhere by setting tg.mochikit_allsglobalstg.mochikit_alls/is MochiKit.jsN( scherrypysroots turbogearssconfigsupdatesTruestestutils createRequestsFalsesresponsesbodysAssertionError(sroot((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_mochikit_everywhere_s " "cCsti}tiihdhddg<<tidtiihdhdt<<tii dGHdtii djpt dS(sDAny widget Can be included everywhere by setting tg.include_widgetssglobalstg.include_widgetssturbogears.mochikits/is MochiKit.jsN( scherrypysroots turbogearssconfigsupdatestestutils createRequestsNonesresponsesbodysAssertionError(sroot((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_include_widgetshs % "sStatecBstZdZRS(Ni(s__name__s __module__scounter(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysStaterssAddingValidatorcBstZedZRS(NcCs|id7_|SdS(Ni(sstatescountersvalue(sselfsvaluesstate((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys _to_pythonus(s__name__s __module__sNones _to_python(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysAddingValidatortss AddingSchemacBstZeZeZRS(N(s__name__s __module__sAddingValidatorsasb(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys AddingSchemaxs sAddingNestedSchemacBstZeZRS(N(s__name__s __module__s AddingSchemasc(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysAddingNestedSchema{ssTestValidationStatecBs3tZdeifdYZdZdZRS(Ns ControllercBsDtZdZeieZeidedeeZRS(NcCsdtiiiSdS(Ns counter: %d(scherrypysrequestsvalidation_statescounter(sselfsasbsc((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysvalidatess validatorss state_factory(s__name__s __module__svalidates turbogearssexposesAddingNestedSchemasState(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys Controllers cOs,tt|i|||it_dS(N( ssupersTestValidationStatesselfs__init__sargsskws Controllerscherrypysroot(sselfsargsskw((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys__init__scCsHd}ti|tiid}|GHd}|id|j|dS(Ns/validate?a=1&b=2&c.a=3&c.b=4is(Validation state is not handled properlys counter: 4( surlstestutilscreate_requestscherrypysresponsesbodysmsgsselfs failUnless(sselfsbodysurlsmsg((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pystest_counter_is_incrementeds  (s__name__s __module__s controllerssRootControllers Controllers__init__stest_counter_is_incremented(((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pysTestValidationState~s (sunittestsTestCases turbogearsswidgetss controllerss validatorsstestutilscherrypysdatetimes WidgetsLists MyFormFieldss TableFormsmyformsRootControllersMyRootstest_form_translationstest_form_translation_new_styles%test_invalid_form_with_error_handlingstest_css_should_appearstest_javascript_should_appearstest_include_mochikitstest_mochikit_everywherestest_include_widgetssobjectsStatesFancyValidatorsAddingValidatorsSchemas AddingSchemasAddingNestedSchemasTestValidationState(stestutilstest_css_should_appearscherrypystest_form_translation_new_stylesdatetimesStates validatorss AddingSchemasmyforms%test_invalid_form_with_error_handlings turbogearsstest_include_widgetssTestCasestest_form_translationsTestValidationStates MyFormFieldsstest_include_mochikitstest_javascript_should_appearstest_mochikit_everywheresAddingNestedSchemasMyRootswidgetss controllerssAddingValidator((s?build\bdist.win32\egg\turbogears\tests\test_form_controllers.pys?s.             PKP6PP)turbogears/tests/test_genericfunctions.pyimport unittest from dispatch import generic from turbogears.genericfunctions import * mo_state = [] def mo(a): pass mo = generic(MultiorderGenericFunction)(mo) def mo2(next_method, a): mo_state.append(2) mo2 = mo.when("a>0", order=2)(mo2) def mo0(next_method, a): mo_state.append(0) return next_method(a) mo0 = mo.when("a>0")(mo0) def mo1(next_method, a): mo_state.append(1) return next_method(a) mo1 = mo.when("a>0", order=1)(mo1) def moa0(next_method, a): mo_state.append("a") return next_method(a) moa0 = mo.around("a<23")(moa0) def moa1(next_method, a): mo_state.append("b") return next_method(a) moa0 = mo.around("a<123")(moa1) class TestGenericFunctions(unittest.TestCase): def test_multiorder(self): mo(2) self.failUnless(mo_state == ["a", "b", 0,1,2]) def test_getter(self): foo = 123 _get_foo = getter("foo") _get_bar = getter("bar") self.failUnless(_get_foo() == 123) foo = 2 self.failUnless(_get_foo() == 2) bar = 67 self.failUnless(_get_bar() == 67) PKh6~(p *turbogears/tests/test_genericfunctions.pyc; IEc@sdkZdklZdkTgZdZeeeZdZeidddeZdZ eide Z d Z eiddd e Z d Z ei d e Z d Z ei de Z deifdYZdS(N(sgeneric(s*cCsdS(N((sa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo scCstiddS(Ni(smo_statesappend(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo2ssa>0sordericCstid||SdS(Ni(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo0s cCstid||SdS(Ni(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmo1s icCstid||SdS(Nsa(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmoa0s sa<23cCstid||SdS(Nsb(smo_statesappends next_methodsa(s next_methodsa((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysmoa1!s sa<123sTestGenericFunctionscBstZdZdZRS(NcCs0td|itdddddgjdS(Nisasbii(smosselfs failUnlesssmo_state(sself((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pystest_multiorder(s cCspd}td}td}|i|djd}|i|djd}|i|djdS(Ni{sfoosbariiC(sfoosgetters_get_foos_get_barsselfs failUnlesssbar(sselfsbars_get_bars_get_foosfoo((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pys test_getter,s  (s__name__s __module__stest_multiorders test_getter(((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pysTestGenericFunctions&s (sunittestsdispatchsgenericsturbogears.genericfunctionssmo_statesmosMultiorderGenericFunctionsmo2swhensmo0smo1smoa0saroundsmoa1sTestCasesTestGenericFunctions( smo1smo_statesgenericsmo2sunittestsmo0sTestGenericFunctionssmosmoa1smoa0((s?build\bdist.win32\egg\turbogears\tests\test_genericfunctions.pys?s        PKP6U~~#turbogears/tests/test_sqlalchemy.py"Tests for SQLAlchemy support" import cherrypy from sqlalchemy import * from sqlalchemy.ext.activemapper import ActiveMapper, column, one_to_many from turbogears import config, redirect, expose, database, errorhandling from turbogears.testutil import create_request, capture_log, print_log, \ sqlalchemy_cleanup from turbogears.database import session, metadata, bind_meta_data from turbogears.controllers import RootController config.update({"sqlalchemy.dburi" : "sqlite:///:memory:"}) bind_meta_data() metadata.engine.echo = True users_table = Table("users", metadata, Column("user_id", Integer, primary_key=True), Column("user_name", String(40)), Column("password", String(10)) ) class User(object): def __repr__(self): return "(User %s, password %s)" % (self.user_name, self.password) usermapper = mapper(User, users_table) class Person(ActiveMapper): class mapping: id = column(Integer, primary_key=True) name = column(String(40)) addresses = one_to_many("Address") class Address(ActiveMapper): class mapping: id = column(Integer, primary_key=True) address = column(String(40)) city = column(String(40)) person_id = column(Integer, foreign_key=ForeignKey("person.id")) def setup_module(): metadata.create_all() def teardown_module(): sqlalchemy_cleanup() def test_query_in_session(): i = users_table.insert() i.execute(user_name="globbo", password="thegreat!") query = session.query(User) globbo = query.select_by(user_name="globbo")[0] assert globbo.password == "thegreat!" users_table.delete().execute() def test_create_and_query(): i = users_table.insert() i.execute(user_name="globbo", password="thegreat!") s = users_table.select() r = s.execute() assert len(r.fetchall()) == 1 users_table.delete().execute() def test_active_mapper(): p = Person(name="Ford Prefect") a = Address(address="1 West Guildford", city="Betelgeuse") p.addresses.append(a) session.flush() session.clear() q = session.query(Person) ford = q.select_by(name="Ford Prefect")[0] assert ford is not p assert len(ford.addresses) == 1 class MyRoot(RootController): def no_error(self, name): p = Person(name=name) raise redirect("/confirm") no_error = expose()(no_error) def e_handler(self, tg_exceptions=None): cherrypy.response.code = 501 return "An exception ocurred: %r (%s)" % ((tg_exceptions,)*2) def create_person(self, **kw): id = kw.pop('id', None) if id is not None: kw['id'] = int(id) p = Person(**kw) return "No exceptions ocurred" create_person = expose()(create_person) create_person = errorhandling.exception_handler(e_handler)(create_person) def test_implicit_trans_no_error(): capture_log("turbogears.database") cherrypy.root = MyRoot() create_request("/no_error?name=A.%20Dent") print_log() session.clear() q = session.query(Person) arthur = q.select_by(name="A. Dent")[0] def test_raise_sa_exception(): capture_log("turbogears.database") cherrypy.root = MyRoot() create_request("/create_person?id=20") output = cherrypy.response.body[0] print output assert "No exceptions" in output create_request("/create_person?id=20") output = cherrypy.response.body[0] print output # Note that the specific DB2API may be either OperationalError or # IntegrityError depending on what version of sqlite and pysqlite # is used. assert "SQLError" in output assert cherrypy.response.code == 501 PKh6BS$turbogears/tests/test_sqlalchemy.pyc; IEc @sdZdkZdkTdklZlZlZdklZl Z l Z l Z l Z dk lZlZlZlZdklZlZlZdklZeihdd <eeei_ed eed ed eed edededZ de!fdYZ"e#e"e Z$defdYZ%defdYZ&dZ'dZ(dZ)dZ*dZ+defdYZ,dZ-dZ.dS( sTests for SQLAlchemy supportN(s*(s ActiveMapperscolumns one_to_many(sconfigsredirectsexposesdatabases errorhandling(screate_requests capture_logs print_logssqlalchemy_cleanup(ssessionsmetadatasbind_meta_data(sRootControllerssqlalchemy.dburissqlite:///:memory:suserssuser_ids primary_keys user_namei(spasswordi sUsercBstZdZRS(NcCsd|i|ifSdS(Ns(User %s, password %s)(sselfs user_namespassword(sself((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys__repr__s(s__name__s __module__s__repr__(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysUserssPersoncBstZdfdYZRS(NsmappingcBs8tZeedeZeedZedZ RS(Ns primary_keyi(sAddress( s__name__s __module__scolumnsIntegersTruesidsStringsnames one_to_manys addresses(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysmapping!s(s__name__s __module__smapping(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysPerson ssAddresscBstZdfdYZRS(NsmappingcBsVtZeedeZeedZeedZeede dZ RS(Ns primary_keyi(s foreign_keys person.id( s__name__s __module__scolumnsIntegersTruesidsStringsaddressscitys ForeignKeys person_id(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysmapping's(s__name__s __module__smapping(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysAddress&scCstidS(N(smetadatas create_all(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys setup_module-scCs tdS(N(ssqlalchemy_cleanup(((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysteardown_module0scCsrti}|iddddtit}|iddd}|i djpt ti idS(Ns user_namesglobbospasswords thegreat!i( s users_tablesinsertsisexecutessessionsquerysUsers select_bysglobbospasswordsAssertionErrorsdelete(sisglobbosquery((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_query_in_session3s  cCsnti}|iddddti}|i}t|idjpt ti idS(Ns user_namesglobbospasswords thegreat!i( s users_tablesinsertsisexecutesselectsssrslensfetchallsAssertionErrorsdelete(sisssr((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_create_and_query;s     cCstdd}tdddd}|ii|tititi t}|i ddd}||j pt t|idjpt dS( Nsnames Ford Prefectsaddresss1 West Guildfordscitys Betelgeuseii(sPersonspsAddresssas addressessappendssessionsflushsclearsquerysqs select_bysfordsAssertionErrorslen(sasfordsqsp((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pystest_active_mapperCs  sMyRootcBsYtZdZeeZedZdZeeZeieeZRS(NcCstd|}tddS(Nsnames/confirm(sPersonsnamespsredirect(sselfsnamesp((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pysno_errorOscCsdti_d|fdSdS(NisAn exception ocurred: %r (%s)i(scherrypysresponsescodes tg_exceptions(sselfs tg_exceptions((s9build\bdist.win32\egg\turbogears\tests\test_sqlalchemy.pys e_handlerTs cKsG|idt}|tj ot||dtZdZeieZdZeieZRS(NcCs"tii}||ddklZdZdZdZdZdZdS((s validatorscCsstidt}d|itjptd|itjptd|idjptd|idjpt|idtjpt|idtjpt|idtjpt|idtjpt|idtjpt|ittjpty"|id tp td Wnti j onXd S( s@'False', 'false', 'True', 'true' should be proper boolean valuessif_emptysfalsestrueiisTruesFalsessfoobars%random strings should fail validationN( s validatorss StringBooleansFalsesbs from_pythonsAssertionErrorsTrues to_pythonsNonesInvalid(sb((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_booleanstringss" cCsdk}|iddddd}ti}||i|jp td||i|i|jp tdy"|idtp tdWnti j onXdS( Nii iisAccepts datetime OKsGood datetime passes validationsfoos%random strings should fail validation( sdatetimesdates validatorssDateTimeConvertersdts to_pythonsAssertionErrors from_pythonsFalsesInvalid(sdatesdtsdatetime((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_datetimeconverters   ) cCsoti}dddg}|i|}|GH|djpt|i|}|GH||jptdS(NsFoosBarsBazs["Foo", "Bar", "Baz"]( s validatorss JSONValidatorsvsoriglists from_pythonsjsonsAssertionErrors to_pythonsl(soriglistsjsonslsv((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_jsonvalidator$s cCsti}d|idjptd|idjpttidd}t|iddjpt|iddjptti}y$|id GHd p td Wntij onXdS( Nu TurboGearss TurboGearss inputEncodingscp1251ss!u'\u0440\u0443\u043b\u0438\u0442'u рулитs рулитismalformed data not detected(s validatorss UnicodeStringsvs to_pythonsAssertionErrors from_pythonsreprsInvalid(sv((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_unicodestring_validator.s # cCsDtiiddjpttiiddjptdS(Ns45i-(s validatorssNumbers to_pythonsAssertionError(((s9build\bdist.win32\egg\turbogears\tests\test_validators.pystest_number_validador?s N(s turbogearss validatorsstest_booleanstringsstest_datetimeconverterstest_jsonvalidatorstest_unicodestring_validatorstest_number_validador(stest_unicodestring_validatorstest_datetimeconverterstest_number_validadorstest_jsonvalidatorstest_booleanstringss validators((s9build\bdist.win32\egg\turbogears\tests\test_validators.pys?s   PKP6$ɰDturbogears/tests/test_view.py# -*- coding: utf-8 -*- from turbogears import view, config import unittest class TestView(unittest.TestCase): def test_UnicodeValueAppearingInATemplateIsFine(self): ustr = u"micro-eXtreme Programming ( µ XP): Embedding XP Within Standard Projects" info = dict(someval=ustr) val = view.render(info, template="turbogears.tests.simple") self.failUnless(u"Paging all " + ustr in val.decode("utf-8")) def test_templateRetrievalByPath(self): config.update({'server.environment' : 'development'}) from turbokid import kidsupport ks = kidsupport.KidSupport() cls = ks.load_template("turbogears.tests.simple") assert cls is not None t = cls() t.someval = "hello" filled = str(t) assert "groovy" in filled assert "html" in filled # the following import should not fail, if everything is working correctly. import turbogears.tests.simple def test_default_output_encoding(self): info = dict(someval="someval") # default encoding is utf-8 val = view.render(info, template="turbogears.tests.simple") assert 'utf-8' in view.cherrypy.response.headers["Content-Type"] config.update({'tg.defaultview':'kid', 'kid.encoding':'iso-8859-1'}) val = view.render(info, template="turbogears.tests.simple") assert 'iso-8859-1' in view.cherrypy.response.headers["Content-Type"] PKh6#6 turbogears/tests/test_view.pyc; IEc@s9dklZlZdkZdeifdYZdS((sviewsconfigNsTestViewcBs#tZdZdZdZRS(NcCsNd}td|}ti|dd}|id||idjdS(NuImicro-eXtreme Programming ( µ XP): Embedding XP Within Standard Projectsssomevalstemplatesturbogears.tests.simpleu Paging all sutf-8( sustrsdictsinfosviewsrendersvalsselfs failUnlesssdecode(sselfsinfosustrsval((s3build\bdist.win32\egg\turbogears\tests\test_view.pys+test_UnicodeValueAppearingInATemplateIsFinescCstihdd<dkl}|i}|id}|tj pt |}d|_ t |}d|jpt d|jpt dk}dS(Nsserver.environments development(s kidsupportsturbogears.tests.simpleshellosgroovyshtml(sconfigsupdatesturbokids kidsupports KidSupportskss load_templatesclssNonesAssertionErrorstssomevalsstrsfilledsturbogears.tests.simples turbogears(sselfs kidsupports turbogearssksstsfilledscls((s3build\bdist.win32\egg\turbogears\tests\test_view.pystest_templateRetrievalByPaths     cCstdd}ti|dd}dtiiidjptt i hdd<dd <ti|dd}d tiiidjptdS( Nssomevalstemplatesturbogears.tests.simplesutf-8s Content-Typestg.defaultviewskids kid.encodings iso-8859-1( sdictsinfosviewsrendersvalscherrypysresponsesheaderssAssertionErrorsconfigsupdate(sselfsinfosval((s3build\bdist.win32\egg\turbogears\tests\test_view.pystest_default_output_encodings !(s__name__s __module__s+test_UnicodeValueAppearingInATemplateIsFinestest_templateRetrievalByPathstest_default_output_encoding(((s3build\bdist.win32\egg\turbogears\tests\test_view.pysTestViews  (s turbogearssviewsconfigsunittestsTestCasesTestView(sunittestsTestViewsconfigsview((s3build\bdist.win32\egg\turbogears\tests\test_view.pys?s PKP6΍""turbogears/tests/textfmt.tmplThis is a plain text for $someval.PKP6Aturbogears/tests/util.pyfrom turbogears.testutil import * from warnings import warn warn("turbogears.tests.util has been replaced by turbogears.testutil", DeprecationWarning, 2)PKh6aWWturbogears/tests/util.pyc; IEc@s(dkTdklZededdS((s*(swarns>turbogears.tests.util has been replaced by turbogears.testutiliN(sturbogears.testutilswarningsswarnsDeprecationWarning(swarn((s.build\bdist.win32\egg\turbogears\tests\util.pys?s PKP6turbogears/tests/__init__.pyPKh6wturbogears/tests/__init__.pyc; IEc@sdS(N((((s2build\bdist.win32\egg\turbogears\tests\__init__.pys?sPKs6mЯ)turbogears/tests/catwalk_models/browse.pyfrom sqlobject import * __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class Genre(SQLObject): name = StringCol() artists = RelatedJoin('Artist') class Artist(SQLObject): name = StringCol() genres = RelatedJoin('Genre') albums = MultipleJoin('Album') plays_instruments = RelatedJoin('Instrument', addRemoveName='anInstrument', joinColumn='artist_id', otherColumn='plays_instrument_id', intermediateTable='artist_plays_instrument') class Album(SQLObject): name = StringCol() artist = ForeignKey('Artist') songs = MultipleJoin('Song') class Instrument(SQLObject): name = StringCol() played_by = RelatedJoin( 'Artist', joinColumn='artist_id', otherColumn='plays_instrument_id', intermediateTable='artist_plays_instrument') class Song(SQLObject): name = StringCol() album = ForeignKey('Album') Genre.createTable(ifNotExists=True) Artist.createTable(ifNotExists=True) Album.createTable(ifNotExists=True) Song.createTable(ifNotExists=True) Instrument.createTable(ifNotExists=True) PKh6C[˼ *turbogears/tests/catwalk_models/browse.pyc; *Fc@sdkTedZeZdefdYZdefdYZdefdYZdefd YZd efd YZ ei d e ei d e ei d e e i d e ei d e d S((s*ssqlite:///:memory:sGenrecBstZeZedZRS(NsArtist(s__name__s __module__s StringColsnames RelatedJoinsartists(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysGenres sArtistc BsMtZeZedZedZeddddddd d d ZRS( NsGenresAlbums Instruments addRemoveNames anInstruments joinColumns artist_ids otherColumnsplays_instrument_idsintermediateTablesartist_plays_instrument( s__name__s __module__s StringColsnames RelatedJoinsgenress MultipleJoinsalbumssplays_instruments(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysArtist s    sAlbumcBs)tZeZedZedZRS(NsArtistsSong(s__name__s __module__s StringColsnames ForeignKeysartists MultipleJoinssongs(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysAlbums  s InstrumentcBs/tZeZedddddddZRS(NsArtists joinColumns artist_ids otherColumnsplays_instrument_idsintermediateTablesartist_plays_instrument(s__name__s __module__s StringColsnames RelatedJoins played_by(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pys Instruments  sSongcBstZeZedZRS(NsAlbum(s__name__s __module__s StringColsnames ForeignKeysalbum(((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pysSongs s ifNotExistsN( s sqlobjectsconnectionForURIs__connection__shubs SQLObjectsGenresArtistsAlbums InstrumentsSongs createTablesTrue(sAlbumshubsArtistsSongs Instruments__connection__sGenre((s?build\bdist.win32\egg\turbogears\tests\catwalk_models\browse.pys?s  PKP6 -turbogears/tests/catwalk_models/model_list.pyfrom sqlobject import SQLObject, StringCol, IntCol, connectionForURI __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class FirstClass(SQLObject): name = StringCol(title="This is a title",length=200,default="new name") class SecondClass(SQLObject): name = StringCol() class ThirdClass(SQLObject): name = StringCol() FirstClass.createTable(ifNotExists=True) SecondClass.createTable(ifNotExists=True) ThirdClass.createTable(ifNotExists=True) PKh6.d=.turbogears/tests/catwalk_models/model_list.pyc; HEc@sdklZlZlZlZedZeZdefdYZdefdYZdefdYZ ei de ei de e i de d S( (s SQLObjects StringColsIntColsconnectionForURIssqlite:///:memory:s FirstClasscBs#tZeddddddZRS(NstitlesThis is a titleslengthisdefaultsnew name(s__name__s __module__s StringColsname(((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys FirstClassss SecondClasscBstZeZRS(N(s__name__s __module__s StringColsname(((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys SecondClass ss ThirdClasscBstZeZRS(N(s__name__s __module__s StringColsname(((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys ThirdClass ss ifNotExistsN( s sqlobjects SQLObjects StringColsIntColsconnectionForURIs__connection__shubs FirstClasss SecondClasss ThirdClasss createTablesTrue( s SQLObjects FirstClasssconnectionForURIshubsIntCols__connection__s SecondClasss ThirdClasss StringCol((sCbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_list.pys?s PKP6J&p2turbogears/tests/catwalk_models/model_structure.pyfrom sqlobject import SQLObject, StringCol, IntCol, connectionForURI __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class StringTest(SQLObject): name = StringCol(title="This is a title",length=200,default="new name") StringTest.createTable(ifNotExists=True) class NumTest(SQLObject): an_integer = IntCol(title="This is an integer",default=123) NumTest.createTable(ifNotExists=True) PKh6m)3turbogears/tests/catwalk_models/model_structure.pyc; HEc@sdklZlZlZlZedZeZdefdYZeide defdYZ e ide dS((s SQLObjects StringColsIntColsconnectionForURIssqlite:///:memory:s StringTestcBs#tZeddddddZRS(NstitlesThis is a titleslengthisdefaultsnew name(s__name__s __module__s StringColsname(((sHbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_structure.pys StringTestss ifNotExistssNumTestcBstZeddddZRS(NstitlesThis is an integersdefaulti{(s__name__s __module__sIntCols an_integer(((sHbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_structure.pysNumTest sN( s sqlobjects SQLObjects StringColsIntColsconnectionForURIs__connection__shubs StringTests createTablesTruesNumTest(s SQLObjectsconnectionForURIshubs StringTestsNumTestsIntCols__connection__s StringCol((sHbuild\bdist.win32\egg\turbogears\tests\catwalk_models\model_structure.pys?s  PKP6gUc.turbogears/tests/catwalk_models/single_join.pyfrom sqlobject import * __connection__ = connectionForURI("sqlite:///:memory:") hub = __connection__ class Client(SQLObject): name = StringCol() physical_address=SingleJoin('Address') #shipping_address=SingleJoin('Address') class Address(SQLObject): client=ForeignKey('Client',default=None) street=StringCol() Client.createTable(ifNotExists=True) Address.createTable(ifNotExists=True) PKh6-11/turbogears/tests/catwalk_models/single_join.pyc; HEc@sidkTedZeZdefdYZdefdYZeideeidedS((s*ssqlite:///:memory:sClientcBstZeZedZRS(NsAddress(s__name__s __module__s StringColsnames SingleJoinsphysical_address(((sDbuild\bdist.win32\egg\turbogears\tests\catwalk_models\single_join.pysClients sAddresscBs#tZeddeZeZRS(NsClientsdefault(s__name__s __module__s ForeignKeysNonesclients StringColsstreet(((sDbuild\bdist.win32\egg\turbogears\tests\catwalk_models\single_join.pysAddress ss ifNotExistsN( s sqlobjectsconnectionForURIs__connection__shubs SQLObjectsClientsAddresss createTablesTrue(shubsClients__connection__sAddress((sDbuild\bdist.win32\egg\turbogears\tests\catwalk_models\single_join.pys?s  PKP6+turbogears/tests/catwalk_models/__init__.pyPKh6/n,turbogears/tests/catwalk_models/__init__.pyc; HEc@sdS(N((((sAbuild\bdist.win32\egg\turbogears\tests\catwalk_models\__init__.pys?sPKP6 8;turbogears/tests/catwalk_models/catwalk-session/session.pkl}q(U model_orderq]q(U SecondClassqU FirstClassqU ThirdClassqeUcolumnsq}q(UAddressq Ustreetq UArtistq Unameq uUorderq }qUAlbumq]q(UartistIDqUidqUsongsqUnameqesUhidden_columnsq}qUAlbumq]q(UidqUsongsqesu.PKP6wَyy2turbogears/tests/locale/en/LC_MESSAGES/messages.mo$,K-Project-Id-Version: PACKAGE VERSION POT-Creation-Date: Thu Oct 07 15:40:37 2004 PO-Revision-Date: 2005-11-10 09:23+0200 Last-Translator: Dan Jacob Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 PKP6& ,MM2turbogears/tests/locale/en/LC_MESSAGES/messages.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: Thu Oct 07 15:40:37 2004\n" "PO-Revision-Date: 2005-11-10 09:23+0200\n" "Last-Translator: Dan Jacob \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" msgid "Welcome" msgstr "" msgid "You have %i apple" msgstr "" msgid "You have %i apples" msgstr "" PKP6?PP2turbogears/tests/locale/fi/LC_MESSAGES/messages.mo*l "(,07;DHPT] akovz K%.29?HNW Zdjsy       ';%d/%m/%YAprAprilAugAugustDecDecemberFebFebruaryFriFridayJanJanuaryJulJulyJunJuneMarMarchMayMonMondayNovNovemberOctOctoberSatSaturdaySepSeptemberSunSundayThuThursdayTueTuesdayWedWednesdayWelcomeYou have %i appleYou have %i applesProject-Id-Version: PACKAGE VERSION POT-Creation-Date: Thu Oct 07 15:40:37 2004 PO-Revision-Date: 2005-11-10 09:23+0200 Last-Translator: Dan Jacob Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 %d.%m.%YhuhtihuhtikuueloelokuujoulujoulukuuhelmihelmikuupeperjantaitammitammikuuheinheinkuukeskeskuumaalismaaliskuutoukomamaanantaimarrasmarraskuulokalokakuulalauantaisyyssyyskuususunnuntaitotorstaititiistaikekeskiviikkoTervetuloaSinulla on %i omenaSinulla on %i omenaaPKP6m~~2turbogears/tests/locale/fi/LC_MESSAGES/messages.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: Thu Oct 07 15:40:37 2004\n" "PO-Revision-Date: 2005-11-10 09:23+0200\n" "Last-Translator: Dan Jacob \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" msgid "Welcome" msgstr "Tervetuloa" msgid "You have %i apple" msgstr "Sinulla on %i omena" msgid "You have %i apples" msgstr "Sinulla on %i omenaa" PKP69turbogears/toolbox/base.py"""Graphical user interface for managing TurboGears projects""" from turbogears import controllers from turbogears.util import setlike from turbogears import identity import pkg_resources import turbogears import cherrypy import shell import admi18n import designer class Info(controllers.Controller): """TurboGears System Information. Lists your TurboGears packages and version information """ __label__ ="System Info" __version__ = "0.1" __author__ = "Ronald Jaramillo" __email__ = "ronald@checkandshare.com" __copyright__ = "Copyright 2005 Ronald Jaramillo" __license__ = "MIT" icon = "/tg_static/images/info.png" def index(self): from turbogears.command.info import retrieve_info packages, plugins = retrieve_info() return dict(packages=packages, plugins=plugins) index = turbogears.expose(template='turbogears.toolbox.info')(index) class WidgetBrowser(controllers.Controller): """Browse usage samples, description and source code for the available TurboGears Widgets""" __label__ ="Widget Browser" __version__ = "0.1" __author__ = "Kevin Dangoor" __email__ = "dangoor+turbogears@gmail.com" __copyright__ = "Copyright 2005 Kevin Dangoor" __license__ = "MIT" all_descs = None icon = "/tg_static/images/widgets.png" [turbogears.expose(template="turbogears.toolbox.widgets")] def index(self, name=None): from turbogears import widgets from turbogears.widgets import js_location, Tabber, SyntaxHighlighter all_descs = self.all_descs if not all_descs: widgets.load_widgets() all_descs = dict() for widgetdesc in widgets.all_widgets: wd = widgetdesc() all_descs[wd.full_class_name.replace(".", "_")] = wd self.all_descs = all_descs if name: all_descs = {name : all_descs[name]} desclist = list(all_descs.values()) desclist.sort(cmp=lambda x,y: cmp(x.name, y.name)) output = dict(descs=desclist, viewing_one=name != None) if name: # do not extend desclist! desclist = desclist + [Tabber(), SyntaxHighlighter()] css = setlike() js = dict() for l in js_location: js[l] = setlike() for widgetdesc in desclist: if not name and widgetdesc.show_separately: continue css.add_all(widgetdesc.retrieve_css()) for l in js_location: for script in widgetdesc.retrieve_javascript(): if hasattr(script, "location"): js[script.location].add(script) else: js[js_location.head].add(script) output["widget_css"] = css for l in js_location: output["widget_js_%s" % str(l)] = js[l] return output def __getattr__(self, widgetname): try: return self.all_descs[widgetname] except: raise AttributeError(widgetname) class Toolbox(controllers.RootController): def __init__(self): self.toolbox = self.get_tools() def tool_icon(self,tool): icon = getattr(tool,'icon','') if icon: return icon def get_tools(self): tools = [] for i in pkg_resources.iter_entry_points("turbogears.toolboxcommand"): tool = i.load() tools.append((tool,i.name)) setattr(self, i.name, tool()) toolbox = [] for tool, name in tools: args = { 'path':name, 'label':getattr(tool,'__label__',tool), 'description':getattr(tool,'__doc__',''), 'version':getattr(tool,'__version__',''), 'author':getattr(tool,'__author__',''), 'email':getattr(tool,'__email__',''), 'copyright':getattr(tool,'__copyright__',''), 'license':getattr(tool,'__license__',''), 'icon':self.tool_icon(tool), 'disabled': False } if not turbogears.util.get_project_name() and getattr(tool, 'need_project', False): args["disabled"] = 'disabled' toolbox.append(args) return toolbox def arrange_in_pairs(self,tools): p = [[],[]] for idx,tool in enumerate(tools): p[idx%2].append(tool) pairs = zip(p[0],p[1]) if len(p[0]) > len(p[1]): pairs.append([p[0][-1],None]) if len(p[0]) < len(p[1]): pairs.append([p[1][-1],None]) return pairs def index(self): return dict(toolbox = self.arrange_in_pairs(self.toolbox), project = turbogears.util.get_project_name()) index = turbogears.expose(template="turbogears.toolbox.main")(index) def noaccess(self): return """

No access for %s

By default only localhost (127.0.0.1) has access to the Toolbox

You can provide access to your client by passing your host address to Toolbox as a parameter. Ex:

                        tg-admin toolbox -c %s
                    
"""% (cherrypy.request.remoteAddr,cherrypy.request.remoteAddr) noaccess = turbogears.expose()(noaccess) PKh6$turbogears/toolbox/base.pyc; DEc@sdZdklZdklZdklZdkZdkZdkZdkZdk Z dk Z dei fdYZ dei fdYZ d eifd YZdS( s9Graphical user interface for managing TurboGears projects(s controllers(ssetlike(sidentityNsInfocBsYtZdZdZdZdZdZdZdZdZ dZ e i d d e Z RS( saTurboGears System Information. Lists your TurboGears packages and version information s System Infos0.1sRonald Jaramillosronald@checkandshare.comsCopyright 2005 Ronald JaramillosMITs/tg_static/images/info.pngcCs3dkl}|\}}td|d|SdS(N(s retrieve_infospackagessplugins(sturbogears.command.infos retrieve_infospackagesspluginssdict(sselfspackagess retrieve_infosplugins((s0build\bdist.win32\egg\turbogears\toolbox\base.pysindexs stemplatesturbogears.toolbox.info( s__name__s __module__s__doc__s __label__s __version__s __author__s __email__s __copyright__s __license__siconsindexs turbogearssexpose(((s0build\bdist.win32\egg\turbogears\toolbox\base.pysInfo s  s WidgetBrowsercBsftZdZdZdZdZdZdZdZe Z dZ e i dd ge d Zd ZRS( sVBrowse usage samples, description and source code for the available TurboGears WidgetssWidget Browsers0.1s Kevin Dangoorsdangoor+turbogears@gmail.comsCopyright 2005 Kevin DangoorsMITs/tg_static/images/widgets.pngstemplatesturbogears.toolbox.widgetscCsdkl} dkl}l}l}|i} | oV| it } x3| i D](}|}|| |i idd;ssdescss viewing_oneslocations widget_csss widget_js_%s($s turbogearsswidgetssturbogears.widgetss js_locationsTabbersSyntaxHighlightersselfs all_descss load_widgetssdicts all_widgetss widgetdescswdsfull_class_namesreplacesnameslistsvaluessdesclistssortsNonesoutputssetlikescsssjsslsshow_separatelysadd_alls retrieve_csssretrieve_javascriptsscriptshasattrslocationsaddsheadsstr(sselfsnamesTabberswdslsdesclistsscripts js_locationsSyntaxHighlighterswidgetssoutputsjss all_descsscsss widgetdesc((s0build\bdist.win32\egg\turbogears\toolbox\base.pysindex-sP            cCs)y|i|SWnt|nXdS(N(sselfs all_descss widgetnamesAttributeError(sselfs widgetname((s0build\bdist.win32\egg\turbogears\toolbox\base.pys __getattr__Ws(s__name__s __module__s__doc__s __label__s __version__s __author__s __email__s __copyright__s __license__sNones all_descssicons turbogearssexposesindexs __getattr__(((s0build\bdist.win32\egg\turbogears\toolbox\base.pys WidgetBrowser s  *sToolboxcBshtZdZdZdZdZdZeiddeZdZ eie Z RS( NcCs|i|_dS(N(sselfs get_toolsstoolbox(sself((s0build\bdist.win32\egg\turbogears\toolbox\base.pys__init__^scCs%t|dd}|o|SndS(Nsicons(sgetattrstoolsicon(sselfstoolsicon((s0build\bdist.win32\egg\turbogears\toolbox\base.pys tool_iconascCsyg}xOtidD]>}|i}|i||ift||i|qWg}x|D]\}}hd|<dt |d|<dt |dd<dt |d d<d t |d d<d t |d d<dt |dd<dt |dd<d|i |<dt <}tii ot |dt od|dNo access for %s

By default only localhost (127.0.0.1) has access to the Toolbox

You can provide access to your client by passing your host address to Toolbox as a parameter. Ex:

                        tg-admin toolbox -c %s
                    
(scherrypysrequests remoteAddr(sself((s0build\bdist.win32\egg\turbogears\toolbox\base.pysnoaccesss( s__name__s __module__s__init__s tool_icons get_toolssarrange_in_pairssindexs turbogearssexposesnoaccess(((s0build\bdist.win32\egg\turbogears\toolbox\base.pysToolbox]s      (s__doc__s turbogearss controllerssturbogears.utilssetlikesidentitys pkg_resourcesscherrypysshellsadmi18nsdesigners ControllersInfos WidgetBrowsersRootControllersToolbox( sInfossetlikesshells turbogearsscherrypys pkg_resourcessdesigners controllerss WidgetBrowsersadmi18nsToolboxsidentity((s0build\bdist.win32\egg\turbogears\toolbox\base.pys?s         =PKP6p:turbogears/toolbox/console.kid Interpreter

Toolbox » WebConsole

>>>

Multiline (code-block) Input:


PKP6#q@@turbogears/toolbox/info.kid TurboGears Toolbox

Toolbox » Info

TurboGears Version Info

  • ${package}

Installed Plugins

${name}

  • ${plugin}
PKP6*LLturbogears/toolbox/main.kid TurboGears Toolbox

Toolbox

Welcome to the TurboGears ToolBox

A collection of web based tools for TurboGears applications.

Note: Some functions are not available as the toolbox was not started in a valid TurboGears project directory.

${tool['label']}

${tool['description']}
PKP6ILssturbogears/toolbox/master.kid Your title goes here ${css.display()} ${js.display()}
${js.display()}
${js.display()}
PKP6? turbogears/toolbox/shell.pyimport turbogears from turbogears import controllers import sys import StringIO from code import InteractiveConsole from textwrap import TextWrapper class WebConsole(controllers.RootController): """Web based Python interpreter""" __label__='WebConsole' icon = "/tg_static/images/shell.png" def __init__(self, width=80): self.console = None try: sys.ps1 except AttributeError: sys.ps1 = '>>> ' try: sys.ps2 except AttributeError: sys.ps2 = '... ' def process_request(self, line): more, output = self._process_request(line) return dict(more=more, output=output) process_request = turbogears.expose()(process_request) def process_multiline_request(self, block): outlines = [] response = '' lines = [line for line in block.split('\n')] for line in lines: more, output = self._process_request(line) if output[-1] == '\n': # we'll handle the newlines later. output = output[:-1] outlines.append(output) return dict(more=more,output='\n'.join(outlines)) process_multiline_request = turbogears.expose()(process_multiline_request) def _process_request(self, line): if len(self.console.buffer): prompt = sys.ps2 else: prompt = sys.ps1 myout = StringIO.StringIO() output = "%s%s" % ( prompt, line ) # hopefully python doesn't interrupt in this block lest we'll get some curious output. try: sys.stdout = myout sys.stderr = myout more = self.console.push(line) finally: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ stdout = myout.getvalue() if stdout: output = '%s\n%s' % ( output, stdout ) return ( more, output.rstrip() ) def new_console(self): locs = dict(__name__='tg-admin',__doc__=None,reload_console=self.new_console) mod = turbogears.util.get_model() if mod: locs.update(mod.__dict__) self.console = InteractiveConsole(locals=locs) def index(self): if not self.console: self.new_console() return dict() index = turbogears.expose(html="turbogears.toolbox.console")(index) PKh6 turbogears/toolbox/shell.pyc; DEc@s_dkZdklZdkZdkZdklZdklZdeifdYZ dS(N(s controllers(sInteractiveConsole(s TextWrappers WebConsolecBstZdZdZdZddZdZeieZdZ eie Z dZ dZ d Z eid d e Z RS( sWeb based Python interpreters WebConsoles/tg_static/images/shell.pngiPcCsat|_y tiWntj odt_nXy tiWntj odt_nXdS(Ns>>> s... (sNonesselfsconsolessyssps1sAttributeErrorsps2(sselfswidth((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys__init__s   cCs,|i|\}}td|d|SdS(Nsmoresoutput(sselfs_process_requestslinesmoresoutputsdict(sselfslinesoutputsmore((s1build\bdist.win32\egg\turbogears\toolbox\shell.pysprocess_requestsc Csg}d}gi}|idD]}||q#~}xO|D]G}|i |\}}|ddjo|d }n|i|qCWt d|ddi |SdS(Nss ismoresoutput(soutlinessresponsesappends_[1]sblockssplitslineslinessselfs_process_requestsmoresoutputsdictsjoin( sselfsblockslinessresponses_[1]soutputslinesoutlinessmore((s1build\bdist.win32\egg\turbogears\toolbox\shell.pysprocess_multiline_requests0cCst|iio ti}n ti}ti}d||f}z(|t_ |t_ |ii|}Wdtit_ tit_ X|i}|od||f}n||ifSdS(Ns%s%ss%s %s(slensselfsconsolesbufferssyssps2spromptsps1sStringIOsmyoutslinesoutputsstdoutsstderrspushsmores __stdout__s __stderr__sgetvaluesrstrip(sselfslinespromptsstdoutsmyoutsoutputsmore((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys_process_request0s         cCs^tdddtd|i}tii}|o|i |i nt d||_ dS(Ns__name__stg-admins__doc__sreload_consoleslocals( sdictsNonesselfs new_consoleslocss turbogearssutils get_modelsmodsupdates__dict__sInteractiveConsolesconsole(sselfslocssmod((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys new_consoleHs cCs$|i o|intSdS(N(sselfsconsoles new_consolesdict(sself((s1build\bdist.win32\egg\turbogears\toolbox\shell.pysindexOs shtmlsturbogears.toolbox.console( s__name__s __module__s__doc__s __label__sicons__init__sprocess_requests turbogearssexposesprocess_multiline_requests_process_requests new_consolesindex(((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys WebConsoles      ( s turbogearss controllersssyssStringIOscodesInteractiveConsolestextwraps TextWrappersRootControllers WebConsole(ssyss turbogearssStringIOs WebConsoles controllerss TextWrappersInteractiveConsole((s1build\bdist.win32\egg\turbogears\toolbox\shell.pys?s      PKP65eZturbogears/toolbox/widgets.kid ${css.display()} ${js.display()} TurboGears Widget Browser

Toolbox » Widget Browser » ${descs[0].name}

${js.display()}

Sample

${widgetdesc.display()}

This widget can only be viewed separately

Description

                

Source Code

PKP6d *@@:turbogears/toolbox/designer/static/diagram/images/back.gifGIF89a !, ˬ\rVxtP;PKP6ǡ  <turbogears/toolbox/designer/static/diagram/images/shadow.pngPNG  IHDR n 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-gAMA|Q cHRMz%u0`:o_F2IDATxbd``f 000|%VGb!V3HXQ}0iIENDB`PKP6?lґ Cturbogears/toolbox/designer/static/diagram/images/shadow_bottom.pngPNG  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-gAMA|Q cHRMz%u0`:o_FIDATxڱ 0@ћDEm7~hF >$IJa}6<Hށo{pK/^4I|^ py$Iʡj8!*^$I]e]`n&I-IRN?g+nIENDB`PKP6XM M Cturbogears/toolbox/designer/static/diagram/images/shadow_corner.pngPNG  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-gAMA|Q cHRMz%u0`:o_FhIDATx\ @ b_ܓAni 0f23&<3g/T8a Yq2&,W`r1v[ڀO8}IENDB`PKP6lS Bturbogears/toolbox/designer/static/diagram/images/shadow_right.pngPNG  IHDR$b 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-gAMA|Q cHRMz%u0`:o_FIDATx1NQ Eћd" bKAPA# 6cuU:Z}N_;Trwĥ>WkR=zքKuePn"YWp,Oղ^78e{!%Џ YIENDB`PKP6g5turbogears/toolbox/designer/static/diagram/js/ajax.js/* ajax_command(method, target, data_func, return_func); ajax_manage(id, event, method, target, data_func, return_func); */ var GET = 1; var POST = 2; function ajax_command(method, target, data_func, return_func) { var xmlhttp = new XMLHTTP(); var data = null; /* default - no data */ var callback_response = function() { if (xmlhttp.getReadyState() == 4) { if (xmlhttp.getStatus() == 200) { return_func(xmlhttp.getResponseText()); } else { xmlhttp.error("problem retrieving data"); } } /* response complete */ } /* callback_response */ xmlhttp.setResponse(callback_response); data = data_func(); /* request them from some user-specified routine */ switch (method) { case GET: var newtarget = (/\?/.test(target) ? target+"&"+data : target+"?"+data); xmlhttp.open("GET",newtarget,true); break; case POST: xmlhttp.open("POST",target,true); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); break; } /* method */ xmlhttp.send(data); /* off we go */ } function ajax_manage(id, event, method, target, data_func, return_func) { var element = document.getElementById(id); if (!element) { alert("Element '"+id+"' not found"); return; } if (method == POST && !XMLHTTP_supported()) { alert("IFRAME mode active -> POSTs not allowed"); return; } var callback_request = function() { ajax_command(method,target,data_func,return_func); } /* callback_request */ universalAttacher(element,event,callback_request); } function XMLHTTP_error(text) { alert('XMLHTTP error: "'+text+'", sorry...'); } function XMLHTTP_open(method, target, async) { if (this.iframe) { this.temp_src = target; } else { this.obj.open(method, target, async); } } function XMLHTTP_send(data) { if (this.iframe) { this.ifr.src = this.temp_src; } else { this.obj.send(data); } } function XMLHTTP_setResponse(callback) { if (this.iframe) { universalAttacher(this.ifr,"load",callback); } else { this.obj.onreadystatechange = callback; } } function XMLHTTP_getResponseText() { if (this.iframe) { var data = this.ifr.contentWindow.document.body.innerHTML; /* uncomment this to save memory and confuse gecko: */ /* this.ifr.parentNode.removeChild(this.ifr); */ return data; } else { return this.obj.responseText; } } function XMLHTTP_getResponseXML() { if (this.iframe) { this.error("IFRAME mode active -> XML data not supported"); return ""; } else { return this.obj.responseXML; } } function XMLHTTP_getReadyState() { if (this.iframe) { return 4; } else { return this.obj.readyState; } } function XMLHTTP_getStatus() { if (this.iframe) { return 200; } else { return this.obj.status; } } function XMLHTTP_setRequestHeader(name,value) { if (!this.iframe) { this.obj.setRequestHeader(name,value); } } function XMLHTTP_isIframe() { return this.iframe; } function XMLHTTP() { this.iframe = false; this.open = XMLHTTP_open; this.send = XMLHTTP_send; this.error = XMLHTTP_error; this.setResponse = XMLHTTP_setResponse; this.getResponseText = XMLHTTP_getResponseText; this.getResponseXML = XMLHTTP_getResponseXML; this.getReadyState = XMLHTTP_getReadyState; this.getStatus = XMLHTTP_getStatus; this.setRequestHeader = XMLHTTP_setRequestHeader; this.isIframe = XMLHTTP_isIframe; this.obj = false; if (window.XMLHttpRequest) { /* gecko */ this.obj = new XMLHttpRequest(); } else if (window.ActiveXObject) { /* ie */ this.obj = new ActiveXObject("Microsoft.XMLHTTP"); } if (!this.obj) { /* no luck -> iframe */ this.iframe = true; this.ifr = document.createElement("iframe"); this.ifr.style.display = "none"; this.ifr.src = "javascript:;"; document.body.appendChild(this.ifr); } } function XMLHTTP_supported() { var dummy = new XMLHTTP(); return (!dummy.isIframe()); } PKP6Ħ9 9turbogears/toolbox/designer/static/diagram/js/animator.js/* WWW SQL Designer, (C) 2005 Ondra Zara, o.z.fw@seznam.cz This file is part of WWW SQL Designer. WWW SQL Designer is free software; 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. WWW SQL Designer is distributed in the hope that it will be useful, but WITHOUT 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 WWW SQL Designer; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ var animation_lock = 0; /* kolik prave bezi animaci */ var animation_end_queue = Array(); /* az skonci _posledni_ animace, tohle vsecko spustime */ function animation_queue_add(funcRef) { var i = get_free_index(animation_end_queue); animation_end_queue[i] = funcRef; } function animation_function(row_element,direction,endFunc) { var h = parseInt(row_element.style.height); h=h+direction; row_element.style.height = h+"px"; if ((direction == 1 && h < ROW_HEIGHT) || (direction == -1 && h > 1)) { var funcRef = function() { animation_function(row_element,direction,endFunc); } setTimeout(funcRef,DELAY); } else { var funcRef = function() { end_animation(row_element,direction,endFunc); } setTimeout(funcRef,0); } } function start_animation(row_element,direction,endFunc) { animation_lock++; var number = parseInt(row_element.getAttribute("parent_number")); table_array[number].hideShadow(); var h; if (direction == 1) { h = 1; } if (direction == -1) { h = ROW_HEIGHT; } row_element.style.height = h+ "px"; var funcRef = function() { animation_function(row_element,direction,endFunc); } setTimeout(funcRef,DELAY); } function end_animation(row_element,direction,endFunc) { animation_lock--; if (endFunc) { /* na konci kazde animace muze neco byt */ endFunc(); } if (!animation_lock) { /* az skonci posledni animace, jeste neco pustime */ for (var i=0;i([^<]*)<\/table_1>/); var table_2 = relation.match(/([^<]*)<\/table_2>/); var row_1 = relation.match(/([^<]*)<\/row_1>/); var row_2 = relation.match(/([^<]*)<\/row_2>/); add_relation(table_1[1],row_1[1],table_2[1],row_2[1]); } function import_xml_row(table, row) { var r; var head = row.match(/]*>/); var id = head[0].match(/id="([^"]*)"/); var title = row.match(/([^<]*)<\/title>/); var stype = row.match(/<type>([^<]*)<\/type>/); var type=0; for (var i=0;i<SQL_TYPES_DEFAULT.length;i++) { if (stype[1] == SQL_TYPES_DEFAULT[i]) { type = i; } } if (id) { r=table.addRow(title[1],type,id[1]); } else { r=table.addRow(title[1],type); } var def = row.match(/<default>([^<]*)<\/default>/); r.setDef(def[1]); var index = head[0].match(/index="[^"]*"/); if (index) { r.setIndex(); } var pk = head[0].match(/pk="[^"]*"/); if (pk) { r.setPK(); } var fk = head[0].match(/fk="[^"]*"/); if (fk) { r.setFK(); } var nn = head[0].match(/nn="[^"]*"/); if (nn) { r.setNN(); } var spec = head[0].match(/special="([^"]*)"/); if (spec) { r.setSpec(spec[1]); } } function import_xml_table(table) { var t; var head = table.match(/<table[^>]*>/); var id = head[0].match(/id="([^"]*)"/); var title = head[0].match(/title="([^"]*)"/); var x = head[0].match(/x="([^"]*)"/); var y = head[0].match(/y="([^"]*)"/); if (id) { t = add_table(x[1],y[1],title[1],id[1]); } else { t = add_table(x[1],y[1],title[1]); } var rows = table.match(/<row[^>]*>.*?<\/row>/g); for (var i=0;i<rows.length;i++) { import_xml_row(t,rows[i]); } } function import_xml(data) { /* nacte data z drive ulozeneho souboru */ /* zadne newliny, delaji bordel */ data = data.replace(/[\n\r]/g,''); /* jen vnitrek globalniho tagu <sql> */ var clear = data.match(/<sql>(.*)<\/sql>/); if (!clear) { alert('No data!'); return; } /* vsechno vycistime */ clear_tables(); /* a jedeme - tabulky */ var tables = clear[1].match(/<table[^>]*>.*?<\/table>/g); for (var i=0;i<tables.length;i++) { import_xml_table(tables[i]); } /* vposled relace */ var relations = clear[1].match(/<relation[^>]*>.*?<\/relation>/g); for (var i=0;i<relations.length;i++) { import_xml_relation(relations[i]); } } function export_xml() { /* vyexportuje data do xml souboru. priklad: <?xml version="1.0" ?> <!-- WWWSQLEditor XML export --> <sql> <table id="3" title="tabulka" x="30" y="50"> <row id="0" pk="pk"> <default>0</default> <title>id Integer Integer 0 id_neco String hodnota 3 4 0 0 */ /* hlavicka */ var x,y; var str, row; var data = '\n'; data += '\n'; data += '\n'; /* tabulky a radky */ for (var i=0;i\n'; for (var j=0;j\n'; data += '\t\t\t'+row._title.innerHTML+'\n'; data += '\t\t\t'+row.def+'\n'; data += '\t\t\t'+SQL_TYPES_DEFAULT[row.type]+'\n'; data += '\t\t\n'; } /* pro vsechny radky */ data += '\t
\n'; } /* pokud tabulka existuje */ } /* pro vsechny tabulky */ /* relace */ var table_1, table_2, row_1, row_2; for (var k=0;k\n'; data += '\t\t'+row_1+'\n'; data += '\t\t'+table_2+'\n'; data += '\t\t'+row_2+'\n'; data += '\t\n'; } } /* paticka */ data += ''; return data; } function io_show(import_btn) { var btn = document.getElementById("import"); if (import_btn) { btn.style.display = "block"; } else { btn.style.display = "none"; } var area = document.getElementById("area"); area.parentNode.style.display = "block"; }PKP66D@@5turbogears/toolbox/designer/static/diagram/js/main.js/* WWW SQL Designer, (C) 2005 Ondra Zara, o.z.fw@seznam.cz This file is part of WWW SQL Designer. WWW SQL Designer is free software; 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. WWW SQL Designer is distributed in the hope that it will be useful, but WITHOUT 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 WWW SQL Designer; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ var drag_lock = 0; /* hybeme-li tabulkou */ var new_table_flag = 0; /* cekame-li na click pro vytvoreni nove tabulky */ var new_table_name = ""; /* jak se bude nova jmenovat */ var table_array = Array(); /* ukazatele na tabulky */ var relation_array = Array(); /* ukazatele na relace */ var drag_start; /* prvni element dragu */ var rel_hover_lock = -1; /* mame zvyraznenou relaci */ var mouse_x,mouse_y; /* souradnice */ var table_admin, row_admin, io_admin; /* tooly na baru */ /* --------------------------------------------------------------------------- */ function renumber_indexes(limit) { var zIndex; for (var i=0;i limit) table_array[i]._div.style.zIndex = zIndex-1; } } function get_max_zIndex() { var max_zIndex = 0; var zIndex; for (var i=0;i max_zIndex) max_zIndex = zIndex; } } return max_zIndex; } function raise_table(number) { row_admin.manageTable(table_array[number]); table_admin.manageTable(table_array[number]); for (var i=0;i bude posun */ var rel; var src = universalSource(co); var index = drag_start.getAttribute("parent_number"); if (index != null) { var moving_elm = table_array[index]._div; var new_x = parseInt(moving_elm.style.left) + (co.clientX - mouse_x); var new_y = parseInt(moving_elm.style.top) + (co.clientY - mouse_y); table_array[index].moveTo(new_x,new_y); table_array[index].updateMini(); mouse_x = co.clientX; mouse_y = co.clientY; } else { /* necim hybeme, ale nema to parent number -> tak je to mapa */ var moving_elm = document.getElementById("map_"); var offs_x = co.clientX - mouse_x; var offs_y = co.clientY - mouse_y; var coef = DESK_SIZE / MAP_SIZE; window.scrollBy(coef * offs_x, coef * offs_y); mouse_x = co.clientX; mouse_y = co.clientY; update_map_(); } } } function global_event_resize(co) { update_map_(); update_bar(); } function global_event_scroll(co) { update_map_(); update_bar(); } /* ------------------------------------------------------------------------------------ */ function get_target_tablerow(x, y) { var table=-1; var row=-1; var table_left, table_top, table_width, table_height; var row_left, row_top, row_width, row_height; /* pro dane souradnice vratime odpovidajici tabulku a radku. -1 pokud nee. */ for (var i=0;i table_left && x < table_left + table_width && y > table_top && y < table_top + table_height) { table = i; } for (var j=0;j row_left && x < row_left + row_width && y > row_top && y < row_top + row_height) { row = j; } } /* if not null */ } /* for vsecky radky */ } /* if not null */ } /* for vsechny tabulky */ return [table,row]; } function add_table(x,y,title,custom_index) { var count = get_free_index(table_array); if (custom_index) { count = custom_index; } var max_zIndex = get_max_zIndex(); var root=document.getElementById("root"); /* sem tabulku napojime */ var table = new Table(x,y,count,max_zIndex+1,title); /* to je ona */ table_array[count] = table; /* dame si objekt do pole */ root.appendChild(table._div); /* a pridame i do HTML stromu */ table.updateMini(); raise_table(count); var bar = document.getElementById("bar"); bar.style.zIndex = max_zIndex+2; var map = document.getElementById("map"); map.style.zIndex = max_zIndex+2; return table; } function remove_table(index,no_animation) { for (var i=0;i avail_width) { actual_x = 10; actual_y += 10 + max_height; max_height = 0; } table_array[i].moveTo(actual_x,actual_y); actual_x += 10 + table_width; if (table_height > max_height) { max_height = table_height; } } } for (var j=0;j je-li vybrano _title => html element _div => html element */ function abstractParent_setTitle(text) { this._title.innerHTML = text; } function abstractParent_destroy() { this._div.parentNode.removeChild(this._div); if (this._mini) { this._mini.parentNode.removeChild(this._mini); } } function abstractParent_select() { this._div.className = this._div.className + " " + this._div.className + "_selected"; this.selected = true; } function abstractParent_deselect() { this._div.className = this._div.getAttribute("defaultClassName"); this.selected = false; } function abstractParent(type, parent_number, row_number, className) { this._div = document.createElement("div"); this._title = document.createElement("div"); this._title.className = "title"; this._div.className = className; this._div.setAttribute("defaultClassName",className); this._div.setAttribute("parent_number",parent_number); this._div.setAttribute("row_number",row_number); this._div.setAttribute("element_type",type); this._title.setAttribute("parent_number",parent_number); this._title.setAttribute("row_number",row_number); this._title.setAttribute("element_type",TYPE_TITLE); this._div.appendChild(this._title); this.selected = false; this.select = abstractParent_select; this.deselect = abstractParent_deselect; this.destroy = abstractParent_destroy; this.setTitle = abstractParent_setTitle; /* universalAttacher(this._div,"mousedown",global_event_mousedown); */ } /* objekt Row setPK(), losePK() - primary key setFK(), loseFK() - foreign key setIndex(), loseIndex() - index setNN(), loseNN() - not null setDef() - default updateTitle() - updatne title="xxx" atribut setTitle() - updatne title="xxx" atribut setType() - updatne typ a defaultni hodnotu updateSpecial() - updatne special updateColor() - updatne pozadi dle datoveho typu _special - drzadlo na specialni PK a FK, vpravo pk - je-li primary key fk - je-li foreign key index - je-li index nn - je-li notnull def - defaultni hodnota type - datovy typ (resp. jeho index) spec - delka ci vycet */ function Row_setPK() { this.pk = 1; this.setIndex(); this.updateTitle(); this.updateSpecial(); this._title.style.fontWeight = "bold"; } function Row_losePK() { this.pk = 0; this.updateTitle(); this.updateSpecial(); this._title.style.fontWeight = "normal"; } function Row_setFK() { this.fk = 1; this.updateTitle(); this.updateSpecial(); } function Row_loseFK() { this.fk = 0; this.updateTitle(); this.updateSpecial(); } function Row_setNN() { this.nn = 1; this.updateTitle(); } function Row_loseNN() { this.nn = 0; this.updateTitle(); } function Row_setIndex() { this.index = 1; this.updateTitle(); this._title.style.fontStyle = "italic"; } function Row_loseIndex() { this.index = 0; this.updateTitle(); this._title.style.fontStyle = "normal"; } function Row_updateTitle() { str = this._title.innerHTML + ": "; str += SQL_TYPES_DEFAULT[this.type]; if (SQL_TYPES_SPEC[this.type]) { str += "(" + this.spec + ")"; } str += ", default: '" + this.def + "'"; if (this.pk) { str += ", Primary key"; } if (this.fk) { str += ", Foreign key"; } if (this.nn) { str += ", NOT NULL"; } if (this.index) { str += ", Index"; } //this._div.setAttribute("title",str); //this._title.setAttribute("title",str); } function Row_setDef(value) { this.def = value; this.updateTitle(); } function Row_setSpec(value) { this.spec = value; this.updateTitle(); } function Row_setType(type) { this.type = type; this.def = SQL_TYPES_VALUES[type]; this.updateTitle(); this.updateColor(); } function Row_updateSpecial() { var str = ""; if (this.pk) str += "PK"; if (this.pk && this.fk) str += ","; if (this.fk) str += "FK"; this._special.innerHTML = str; } function Row_updateColor() { var total = 0; for (var i=0;i right_2 ? top_table_1 + top_row_1 : top_table_2 + top_row_2); end_x = Math.min(right_1, right_2) - RELATION_THICKNESS; end_y = (right_1 < right_2 ? top_table_1 + top_row_1 : top_table_2 + top_row_2); center_x = start_x + RELATION_OFFSET; /* korekce kvuli borderu... */ start_x--; end_x--; } } /* a jedem */ this.elem_1.style.left = Math.min(start_x, center_x) + "px"; this.elem_1.style.top = start_y + "px" this.elem_1.style.width = Math.abs(center_x - start_x) + "px"; this.elem_2.style.left = center_x; this.elem_2.style.top = Math.min(start_y, end_y); this.elem_2.style.height = Math.abs(end_y - start_y) + RELATION_THICKNESS + "px"; this.elem_3.style.left = Math.min(center_x, end_x) + "px"; this.elem_3.style.top = end_y + "px" this.elem_3.style.width = Math.abs(center_x - end_x) + "px"; } Relation.prototype = new abstractParent(); function Relation(parent_1, row_1, parent_2, row_2, id) { this.base = abstractParent; this.base(TYPE_RELATION, id, row_1, "relation"); this._title.parentNode.removeChild(this._title); this.update = Relation_update; /* funkce na aktualizaci car */ this.show = Relation_show; /* ukazani */ this.hide = Relation_hide; /* schovani */ this.parent_1 = parent_1; /* prvni rodicovska tabulka */ this.parent_2 = parent_2; /* druha rodicovska tabulka */ this.row_1 = row_1; /* prvni rodicovska radka */ this.row_2 = row_2; /* druha rodicovska radka */ this.elem_1 = document.createElement("div"); this.elem_2 = document.createElement("div"); this.elem_3 = document.createElement("div"); this.elem_1.style.height = RELATION_THICKNESS; this.elem_2.style.width = RELATION_THICKNESS; this.elem_3.style.height = RELATION_THICKNESS; this.elem_1.setAttribute("element_type",TYPE_RELATION_PART); this.elem_2.setAttribute("element_type",TYPE_RELATION_PART); this.elem_3.setAttribute("element_type",TYPE_RELATION_PART); this._div.appendChild(this.elem_1); this._div.appendChild(this.elem_2); this._div.appendChild(this.elem_3); } /* objekt Table: moveTo() - posun na zadane souradnice addRow() - prida radku removeRow() - odebere radku selectRow() - vybere radku appendRelation() - prida relaci removeRelation() - zrusi relaci updateWidth() - aktualizuje sirku updateMini() - aktualizuje minimapku updateShadow() - aktualizuje rozbite stiny showRelations() - ukaze relevantni relace hideRelations() - schova relevantni relace rows => pole radku _rows => html drzak radku relations => pole relaci, ktere se tykaji teto tabulky */ function Table_updateMini() { var w = parseInt(this._div.offsetWidth); var h = parseInt(this._div.offsetHeight); var l = parseInt(this._div.style.left); var t = parseInt(this._div.style.top); this._mini.style.width = Math.round(w * MAP_SIZE / DESK_SIZE) + "px"; this._mini.style.height = Math.round(h * MAP_SIZE / DESK_SIZE) + "px"; this._mini.style.left = Math.round(l * MAP_SIZE / DESK_SIZE) + "px"; this._mini.style.top = Math.round(t * MAP_SIZE / DESK_SIZE) + "px"; } function Table_moveTo(x,y) { this._div.style.left = x + "px"; this._div.style.top = y + "px"; this.updateMini(); } function Table_addRow(title,type,custom_index) { var count = get_free_index(this.rows); if (custom_index) count = custom_index; var row = new Row(this.number,count,title,type); /* to je ona */ this.rows[count] = row; /* dame si objekt do pole */ this._rows.appendChild(row._div); /* a pridame i do HTML stromu */ this.updateWidth(); var x = this; var endFuncRef = function() { x.updateMini(); x.updateShadow(); for (var i=0;i max) { max = this.rows[i]._title.innerHTML.length; } } } var new_ = Math.max(TABLE_WIDTH,80+max*LETTER_WIDTH); this._div.style.width = new_ + "px"; if (new_ != orig) { this.updateMini(); /* pokud jsme tabulce zmenili rozmery, musime aktualizovat relace */ for (var i=0;iLlʳNy˯ o}tRNS@fIDATxb```0edd fbiFF FFv;0/(& $e@|z^ ̺̅<" ’turbogears/toolbox/designer/static/javascript/modelDesigner.jsvar nameMsg = 'The name will be converted from mixed-case to undescored-separated to be used as column name.'; var alternateMsg = 'This boolean (default False) indicates if the column can be used as an ID for the field'; var notnullMsg = 'If true, None/NULL is not allowed for this column.'; var uniqueMsg = 'If true, when SQLObject creates a table it will declare this column to be UNIQUE.'; var defaultMsg = 'The default value for this column. Used when creating a new row.'; var dbNameMsg = 'Name of the column in the database.'; var titleMsg = 'Descriptive name for your field'; var designer = {}; designer.currentModel = ''; designer.ordered_models = []; designer.models = {}; designer.column_types = { 'StringCol':{}, 'IntCol':{}, 'FloatCol':{}, 'DateCol':{}, 'DateTimeCol':{}, 'BoolCol':{}, 'EnumCol':{}, 'DecimalCol':{}, 'CurrencyCol':{}, 'BLOBCol':{}, 'PickleCol':{}, 'UnicodeCol':{}, 'MultipleJoin':{}, 'SingleJoin':{}, 'ForeignKey':{}, 'RelatedJoin':{} }; designer.tableRowInput = function(label,name,value,help_tip) { var props = (designer.exists(help_tip))? {'title':help_tip}:null; return TR(props, TD({'class':'label','valign':'top'},label +' :'), TD({'class':'field','valign':'top'}, createDOM('INPUT',{'type':'text', 'value':value, 'id':name}) ) ); } designer.tableRowSelect = function(field_name,label,values,value) { var sel = createDOM('SELECT', {'id':field_name}); for(var i=0;i=0;i--) { if(el.options[i]!=null && el.options[i].selected) el.options[i]=null; } designer.updateDefaultEnum(column_name); designer.save(); } designer.updateDefaultEnum = function(column_name) { var el = document.getElementById(column_name); var d =document.getElementById('column_default'); var sel = d.options[d.selectedIndex].value; for(var i=d.options.length-1;i>=0;i--) d.options[i] = null; d.options[d.length]= new Option('','',false,false); for(var i=0;i 0) { f.raise_table(0); f.reposition_tables(); } } designer.code_saved = function(result) { alert(result['status']); } designer.save_code_and_create_tables = function() { var code = document.getElementById('code_view').value; ordered_models = ''; for(var model in designer.sortedModels()) { if(ordered_models!='') ordered_models+=','; ordered_models+= designer.models[model].name; } var d = postJSONDoc('save_and_create','code='+ code +'&order='+ ordered_models); d.addCallback(designer.code_saved); } designer.save_generated_code = function() { var code = document.getElementById('code_view').value; var d = postJSONDoc('save','code='+ code); d.addCallback(designer.code_saved); } designer.save = function(save_as) { var name = document.myform.model_name.value; if(name=='None' || name == '') return; var d = {'name':name,'models':designer.models,'ordered_models':designer.ordered_models }; var state = serializeJSON(d); var params = 'state='+ state; if( designer.exists(save_as) ) params+='&name='+ save_as var d = postJSONDoc('save_state',params); if( designer.exists(save_as) ) d.addCallback(designer.state_saved); } designer.loadSessionList = function() { var d = postJSONDoc('session_list',''); d.addCallback(designer.renderSessionList); } designer.renderSessionList = function(result) { if(!designer.exists(result['models'])) return; var el = document.getElementById('sample_models'); var tmp_file_exists = (el.options[1].value == 'model_designer_session_file')? true:false; for(var i=el.options.length-1;i>=0;i--) el.options[i] = null; el.options[0]= new Option('Sample models','none',false,false); if(tmp_file_exists) el.options[1]= new Option('Existing Designer Session','model_designer_session_file',false,true); for(var i=0;i< result['models'].length;i++) { el.options[el.length]= new Option(result['models'][i], result['models'][i], false, false); } } designer.state_saved = function(result) { if(result['state']) { alert('Your Session has been saved'); designer.loadSessionList(); } else { alert('Fail to save your Session'); } } function postJSONDoc(url,postVars) { var req = getXMLHttpRequest(); req.open('POST',url,true); req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); var data = postVars; var d = sendXMLHttpRequest(req,data); return d.addCallback(evalJSONRequest); } designer.codeView = function() { designer.minimazeCanvas(); var code = ''; for(var model in designer.sortedModels()) { code+= designer.modelCode(designer.models[model]); } var code_view = createDOM('TEXTAREA', {'id':'code_view','class':'py','name':'code'}); if(document.myform.model_exists.value=='1') { var write_model = createDOM('BUTTON', { 'onclick':"designer.save_generated_code()", 'title':'Write to model file', 'style':'cursor:pointer;font-size:10px;width:160px' },'Write model file' ); var generate_model = createDOM('BUTTON', { 'onclick':"designer.save_code_and_create_tables()", 'title':'Write to model file and create tables', 'style':'cursor:pointer;font-size:10px;width:200px' },'Write to file and Create Tables' ); //generate_model = ''; code_view = DIV({'margin-bottom':'50px'}, write_model, generate_model, code_view ); } replaceChildNodes('canvas',code_view); var element = document.getElementById('code_view'); element.value = code; // instantiate a brush var highlighter = null; var registered = new Object(); var propertyName = 'value'; for(var brush in dp.sh.Brushes) { var aliases = dp.sh.Brushes[brush].Aliases; if(aliases == null) continue; for(var i = 0; i < aliases.length; i++) registered[aliases[i]] = brush; } var highlighter = new dp.sh.Brushes[registered['py']](); element.style.display = 'none'; highlighter.addGutter = true; highlighter.addControls = true; highlighter.firstLine = 1; highlighter.Highlight(element[propertyName]); var div = document.createElement('DIV'); div.className = 'dp-highlighter'; div.appendChild(highlighter.ol); element.parentNode.insertBefore(div, element); } function blankSlate() { designer.currentModel=''; designer.models = {}; designer.ordered_models=[]; replaceChildNodes('models',''); replaceChildNodes('canvas',''); } var dragsort = ToolMan.dragsort() var junkdrawer = ToolMan.junkdrawer() function endModelDrag(item) { var group = item.toolManDragGroup var list = group.element.parentNode var id = list.getAttribute("id") if (id == null) return; group.register('dragend', function() { saveModelOrder(junkdrawer.serializeList(list)) }); } function saveModelOrder(list) { alert(list); } function setHandle(item) { item.toolManDragGroup.setHandle(findHandle(item) ); } function findHandle(item) { var children = item.getElementsByTagName("td"); for (var i = 0; i < children.length; i++) { var child = children[i] if (child.getAttribute("class") == null) continue if (child.getAttribute("class").indexOf("handle") >= 0) return child } return item; } PKP6J5turbogears/toolbox/designer/static/sessions/Survey.js{"name":"survey","models":{"Survey":{"name":"Survey","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_title":"Name","column_default":"","column_length":"250","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"description":{"type":"StringCol","column_name":"description","column_title":"Description","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"questions":{"type":"MultipleJoin","name":"questions","join_type":"MultipleJoin","other_class_name":"Question","other_method_name":"survey"},"publish":{"type":"BoolCol","column_name":"publish","column_db_name":"","column_title":"Publish","column_default":"False","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""}, "answers":{"type":"MultipleJoin","column_name":"answers","join_type":"MultipleJoin","other_class_name":"Answer","other_method_name":"survey"}},"relations":{},"ordered_columns":["name","description","publish","questions"]}, "Question":{"name":"Question","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"survey":{"type":"ForeignKey","column_name":"survey","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Survey","other_method_name":"questions","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"options":{"type":"MultipleJoin","name":"options","join_type":"MultipleJoin","other_class_name":"Option","other_method_name":"question"}, "answeredValue":{"type":"MultipleJoin","column_name":"answeredValue","join_type":"MultipleJoin","other_class_name":"AnswerValue","other_method_name":"question"}, "text":{"type":"StringCol","column_name":"text","column_db_name":"","column_title":"Question Text","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"question_type":{"type":"EnumCol","column_name":"question_type","column_db_name":"","column_title":"","column_default":"text","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","enum_values":["text","textarea","radio","select","checkbox"]}},"relations":{},"ordered_columns":["text","question_type","survey","options","answeredValue"]}, "Answer":{"name":"Answer","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"answered":{"type":"DateTimeCol","column_name":"answered","column_db_name":"","column_title":"Answered","column_default":"datetime.now","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"survey":{"type":"ForeignKey","column_name":"survey","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Survey","other_method_name":"answers","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}, "values":{"type":"MultipleJoin","column_name":"values","join_type":"MultipleJoin","other_class_name":"AnswerValue","other_method_name":"answer"} },"relations":{}}, "AnswerValue":{"name":"AnswerValue","parent_class":"SQLObject","table_name":"","id_name":"","columns":{ "answer":{"type":"ForeignKey","column_name":"values","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Answer","other_method_name":"values","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"} ,"value":{"type":"StringCol","column_name":"value","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"question":{"type":"ForeignKey","column_name":"question","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Question","other_method_name":"answeredValue","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["value","answer"]},"Option":{"name":"Option","parent_class":"SQLObject","table_name":"options_table","id_name":"","columns":{"option_text":{"type":"StringCol","column_name":"option_text","column_title":"Option Text","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"question":{"type":"ForeignKey","column_name":"question","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Question","other_method_name":"options","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{}}},"ordered_models":["Survey","Question","Option","Answer","AnswerValue"]} PKP684S 9turbogears/toolbox/designer/static/sessions/TurboTunes.js{"name":"survey","models":{"Genre":{"name":"Genre","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"artists":{"type":"RelatedJoin","column_name":"artists","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Artist","other_method_name":"genres","original_other_class_name":"","original_other_method_name":"","join_type":"RelatedJoin"}},"relations":{}},"Artist":{"name":"Artist","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"genres":{"type":"RelatedJoin","name":"genres","join_type":"RelatedJoin","other_class_name":"Genre","other_method_name":"artists"},"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"albums":{"type":"MultipleJoin","column_name":"albums","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Album","other_method_name":"artist","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["name","genres","albums"]},"Album":{"name":"Album","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"artist":{"type":"ForeignKey","name":"artist","join_type":"MultipleJoin","other_class_name":"Artist","other_method_name":"albums"},"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"songs":{"type":"MultipleJoin","column_name":"songs","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Song","other_method_name":"album","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["name","artist","songs"]},"Song":{"name":"Song","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"album":{"type":"ForeignKey","name":"album","join_type":"MultipleJoin","other_class_name":"Album","other_method_name":"songs"},"name":{"type":"StringCol","column_name":"name","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""}},"relations":{},"ordered_columns":["name","album"]}},"ordered_models":["Genre","Artist","Album","Song"]} PKP6&&&6turbogears/toolbox/designer/static/sessions/WebShop.js{"name":"survey","models":{"Category":{"name":"Category","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"description":{"type":"StringCol","column_name":"description","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""}},"relations":{}},"Product":{"name":"Product","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"name":{"type":"StringCol","column_name":"name","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"description":{"type":"StringCol","column_name":"description","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"price":{"type":"CurrencyCol","column_name":"price","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"orderedItems":{"type":"MultipleJoin","column_name":"orderedItems","join_type":"MultipleJoin","other_class_name":"OrderItem","other_method_name":"product"},"bagItems":{"type":"MultipleJoin","column_name":"bagItems","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"BagItem","other_method_name":"product","original_other_class_name":"BagItem","original_other_method_name":"product","join_type":"MultipleJoin"}},"relations":{},"ordered_columns":["name","description","price","bagItems","orderedItems"]},"Customer":{"name":"Customer","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"password":{"type":"StringCol","column_name":"password","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"True","column_not_none":"","column_alternate_id":""},"username":{"type":"StringCol","column_name":"username","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"name":{"type":"StringCol","column_name":"name","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"email":{"type":"StringCol","column_name":"email","column_db_name":"","column_title":"","column_default":"","column_length":"200","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"True","column_not_none":"","column_alternate_id":""},"address":{"type":"SingleJoin","column_name":"address","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Address","other_method_name":"customer","original_other_class_name":"","original_other_method_name":"","join_type":"SingleJoin"},"orders":{"type":"MultipleJoin","column_name":"orders","join_type":"MultipleJoin","other_class_name":"Order","other_method_name":"customer"}},"relations":{},"ordered_columns":["name","username","password","email"]},"Address":{"name":"Address","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"street":{"type":"StringCol","column_name":"street","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"zipcode":{"type":"StringCol","column_name":"zipcode","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"city":{"type":"StringCol","column_name":"city","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"country":{"type":"StringCol","column_name":"country","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"customer":{"type":"ForeignKey","column_name":"customer","join_type":"SingleJoin","other_class_name":"Customer","other_method_name":"address"}},"relations":{}},"ShoppingBag":{"name":"ShoppingBag","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"sessionString":{"type":"StringCol","column_name":"sessionString","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"started":{"type":"DateTimeCol","column_name":"started","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"items":{"type":"MultipleJoin","column_name":"items","join_type":"MultipleJoin","other_class_name":"BagItem","other_method_name":"bag"}},"relations":{}},"BagItem":{"name":"BagItem","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"bag":{"type":"ForeignKey","column_name":"bag","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"ShoppingBag","other_method_name":"items","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"product":{"type":"ForeignKey","column_name":"product","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Product","other_method_name":"bagItems","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{}},"Order":{"name":"Order","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"placed":{"type":"DateTimeCol","column_name":"placed","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"customer":{"type":"ForeignKey","column_name":"customer","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Customer","other_method_name":"orders","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"status":{"type":"EnumCol","column_name":"status","column_db_name":"","column_title":"","column_default":"processing","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","enum_values":["confirmed","onhold","paid","shipped","processing"]},"items":{"type":"MultipleJoin","column_name":"items","join_type":"MultipleJoin","other_class_name":"OrderItem","other_method_name":"order"}},"relations":{}},"OrderItem":{"name":"OrderItem","parent_class":"SQLObject","table_name":"","id_name":"","columns":{"order":{"type":"ForeignKey","column_name":"order","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Order","other_method_name":"items","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"},"quantity":{"type":"IntCol","column_name":"quantity","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":""},"product":{"type":"ForeignKey","column_name":"product","column_db_name":"","column_title":"","column_default":"","column_length":"","column_size":"","column_precision":"","column_db_encoding":"","column_varchar":"","column_unique":"","column_not_none":"","column_alternate_id":"","other_class_name":"Product","other_method_name":"orderedItems","original_other_class_name":"","original_other_method_name":"","join_type":"MultipleJoin"}},"relations":{}}},"ordered_models":[]} PK<6E~,1,1turbogears/view/base.py"""Template processing for TurboGears view templates.""" import os import imp import sys import re import logging from itertools import chain from itertools import cycle as icycle from urllib import quote_plus import cherrypy import pkg_resources import turbogears from turbogears import identity, config from turbogears.i18n import i18n_filter, get_locale from turbogears.util import DictObj, DictWrapper, get_template_encoding_default, adapt_call log = logging.getLogger("turbogears.view") baseTemplates = [] variable_providers = [] root_variable_providers = [] engines = dict() # Deprecation of variableProviders def print_warning(func): def _print_warning(*args, **kw): import warnings warnings.warn( "Use of variableProviders is deprecated, use variable_providers" "instead.", DeprecationWarning, 2) return func(*args, **kw) return _print_warning class MetaDeprecatedVariableProviders(type): def __new__(cls, name, bases, dict): for (key, value) in dict.items(): if key == "__metaclass__": continue if callable(value): dict[key] = print_warning(value) return type.__new__(cls,name, bases, dict) class DeprecatedVariableProviders(list): __metaclass__ = MetaDeprecatedVariableProviders def append(self, *args, **kw): super(DeprecatedVariableProviders, self).append(*args, **kw) def count(self, *args, **kw): return super(DeprecatedVariableProviders, self).count(*args, **kw) def extend(self, *args, **kw): super(DeprecatedVariableProviders, self).extend(*args, **kw) def index(self, *args, **kw): return super(DeprecatedVariableProviders, self).index(*args, **kw) def insert(self, *args, **kw): super(DeprecatedVariableProviders, self).insert(*args, **kw) def pop(self, *args, **kw): return super(DeprecatedVariableProviders, self).pop(*args, **kw) def remove(self, *args, **kw): super(DeprecatedVariableProviders, self).remove(*args, **kw) def reverse(self, *args, **kw): super(DeprecatedVariableProviders, self).reverse(*args, **kw) def sort(self, *args, **kw): super(DeprecatedVariableProviders, self).sort(*args, **kw) variableProviders = DeprecatedVariableProviders() def _choose_engine(template): if isinstance(template, basestring): colon = template.find(":") if colon > -1: enginename = template[:colon] template = template[colon+1:] else: engine = engines.get(template, None) if engine: return engine, None, template enginename = config.get("tg.defaultview", "kid") else: enginename = config.get("tg.defaultview", "kid") engine = engines.get(enginename, None) if not engine: raise KeyError, \ "Template engine %s is not installed" % enginename return engine, template, enginename def render(info, template=None, format=None ,content_type=None, mapping=None, fragment=False): """Renders data in the desired format. @param info: the data itself @type info: dict @param format: "html", "xml" or "json" @type format: string @param fragment: passed through to tell the template if only a fragment of a page is desired @type fragment: bool @param template: name of the template to use @type template: string """ template = info.pop("tg_template", template) if not info.has_key("tg_flash"): if config.get("tg.empty_flash", True): info["tg_flash"] = None engine, template, enginename = _choose_engine(template) if not content_type and getattr(engine, 'get_content_type', None): ua = getattr(cherrypy.request.headers, "User-Agent", None) ua = UserAgent(ua) content_type = engine.get_content_type(ua) elif not content_type: content_type = "text/html" if content_type == 'text/html' and enginename in ('genshi', 'kid'): charset = get_template_encoding_default(enginename) content_type = content_type + '; charset=' + charset cherrypy.response.headers["Content-Type"] = content_type if not format: format = config.get("%s.outputformat" % enginename, "html default") args, kw = adapt_call(engine.render, args= [], kw = dict(info=info, format=format, fragment=fragment, template=template, mapping=mapping), start=1) return engine.render(**kw) def transform(info, template): "Create ElementTree representation of the output" engine, template, enginename = _choose_engine(template) return engine.transform(info, template) def loadBaseTemplates(): """Loads base templates for use by other templates. By listing templates in turbogears.view.baseTemplates, these templates will automatically be loaded so that the "import" statement in a template will work. """ log.debug("Loading base templates") for template in baseTemplates: engine, template, enginename = _choose_engine(template) if sys.modules.has_key(template): del sys.modules[template] engine.load_template(template) NOTGIVEN = [] class cycle: """ Loops forever over an iterator. Wraps the itertools.cycle method but provides a way to get the current value via the 'value' attribute >>> from turbogears.view.base import cycle >>> oe = cycle(('odd','even')) >>> oe None >>> oe.next() 'odd' >>> oe 'odd' >>> oe.next() 'even' >>> oe.next() 'odd' >>> oe.value 'odd' """ value = None def __init__(self,iterable): self._cycle = icycle(iterable) def __str__(self): return self.value.__str__() def __repr__(self): return self.value.__repr__() def next(self): self.value = self._cycle.next() return self.value def selector(expression): """If the expression is true, return the string 'selected'. Useful for HTML