From f66f815ba658b07937e02174dedf9e7d8a5df5f5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 26 Oct 2016 23:04:59 -0400 Subject: [PATCH 001/119] Remove the installation app --- docs/releases/2.2.rst | 70 +++++++ docs/releases/index.rst | 1 + mayan/apps/installation/__init__.py | 5 - mayan/apps/installation/apps.py | 52 ------ mayan/apps/installation/classes.py | 158 ---------------- mayan/apps/installation/links.py | 22 --- .../locale/ar/LC_MESSAGES/django.mo | Bin 759 -> 0 bytes .../locale/ar/LC_MESSAGES/django.po | 172 ----------------- .../locale/bg/LC_MESSAGES/django.mo | Bin 750 -> 0 bytes .../locale/bg/LC_MESSAGES/django.po | 172 ----------------- .../locale/bs_BA/LC_MESSAGES/django.mo | Bin 764 -> 0 bytes .../locale/bs_BA/LC_MESSAGES/django.po | 172 ----------------- .../locale/da/LC_MESSAGES/django.mo | Bin 624 -> 0 bytes .../locale/da/LC_MESSAGES/django.po | 171 ----------------- .../locale/de_DE/LC_MESSAGES/django.mo | Bin 1135 -> 0 bytes .../locale/de_DE/LC_MESSAGES/django.po | 173 ----------------- .../locale/en/LC_MESSAGES/django.mo | Bin 599 -> 0 bytes .../locale/en/LC_MESSAGES/django.po | 174 ------------------ .../locale/es/LC_MESSAGES/django.mo | Bin 1121 -> 0 bytes .../locale/es/LC_MESSAGES/django.po | 173 ----------------- .../locale/fa/LC_MESSAGES/django.mo | Bin 1101 -> 0 bytes .../locale/fa/LC_MESSAGES/django.po | 172 ----------------- .../locale/fr/LC_MESSAGES/django.mo | Bin 1128 -> 0 bytes .../locale/fr/LC_MESSAGES/django.po | 173 ----------------- .../locale/hu/LC_MESSAGES/django.mo | Bin 500 -> 0 bytes .../locale/hu/LC_MESSAGES/django.po | 170 ----------------- .../locale/id/LC_MESSAGES/django.mo | Bin 490 -> 0 bytes .../locale/id/LC_MESSAGES/django.po | 170 ----------------- .../locale/it/LC_MESSAGES/django.mo | Bin 596 -> 0 bytes .../locale/it/LC_MESSAGES/django.po | 170 ----------------- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 514 -> 0 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 170 ----------------- .../locale/pl/LC_MESSAGES/django.mo | Bin 1202 -> 0 bytes .../locale/pl/LC_MESSAGES/django.po | 174 ------------------ .../locale/pt/LC_MESSAGES/django.mo | Bin 865 -> 0 bytes .../locale/pt/LC_MESSAGES/django.po | 171 ----------------- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 1124 -> 0 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 171 ----------------- .../locale/ro_RO/LC_MESSAGES/django.mo | Bin 719 -> 0 bytes .../locale/ro_RO/LC_MESSAGES/django.po | 172 ----------------- .../locale/ru/LC_MESSAGES/django.mo | Bin 840 -> 0 bytes .../locale/ru/LC_MESSAGES/django.po | 172 ----------------- .../locale/sl_SI/LC_MESSAGES/django.mo | Bin 570 -> 0 bytes .../locale/sl_SI/LC_MESSAGES/django.po | 171 ----------------- .../locale/vi_VN/LC_MESSAGES/django.mo | Bin 544 -> 0 bytes .../locale/vi_VN/LC_MESSAGES/django.po | 170 ----------------- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 757 -> 0 bytes .../locale/zh_CN/LC_MESSAGES/django.po | 171 ----------------- mayan/apps/installation/permissions.py | 11 -- mayan/apps/installation/urls.py | 14 -- mayan/apps/installation/views.py | 36 ---- mayan/apps/ocr/apps.py | 39 ---- mayan/settings/base.py | 1 - 53 files changed, 71 insertions(+), 3942 deletions(-) create mode 100644 docs/releases/2.2.rst delete mode 100644 mayan/apps/installation/__init__.py delete mode 100644 mayan/apps/installation/apps.py delete mode 100644 mayan/apps/installation/classes.py delete mode 100644 mayan/apps/installation/links.py delete mode 100644 mayan/apps/installation/locale/ar/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/ar/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/bg/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/bg/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/da/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/da/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/en/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/en/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/es/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/es/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/fa/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/fa/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/fr/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/fr/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/hu/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/hu/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/id/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/id/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/it/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/it/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/pl/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/pl/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/pt/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/pt/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/ru/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/ru/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.mo delete mode 100644 mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.po delete mode 100644 mayan/apps/installation/permissions.py delete mode 100644 mayan/apps/installation/urls.py delete mode 100644 mayan/apps/installation/views.py diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst new file mode 100644 index 0000000000..92c6297960 --- /dev/null +++ b/docs/releases/2.2.rst @@ -0,0 +1,70 @@ +============================= +Mayan EDMS v2.2 release notes +============================= + +Released: XX, 2016 + +What's new +========== + + +Other changes +------------- +- Remove the installation app + +Removals +-------- +* None + +Upgrading from a previous version +--------------------------------- + +Using PIP +~~~~~~~~~ + +Type in the console:: + + $ pip install -U mayan-edms + +the requirements will also be updated automatically. + +Using Git +~~~~~~~~~ + +If you installed Mayan EDMS by cloning the Git repository issue the commands:: + + $ git reset --hard HEAD + $ git pull + +otherwise download the compressed archived and uncompress it overriding the +existing installation. + +Next upgrade/add the new requirements:: + + $ pip install --upgrade -r requirements.txt + +Common steps +~~~~~~~~~~~~ + +Migrate existing database schema with:: + + $ mayan-edms.py performupgrade + +Add new static media:: + + $ mayan-edms.py collectstatic --noinput + +The upgrade procedure is now complete. + + +Backward incompatible changes +============================= + +* None + +Bugs fixed or issues closed +=========================== + +* `GitLab issue #311 `_ acl page return ContentType:Document + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/index.rst b/docs/releases/index.rst index 394b5a7cde..d0b6429a11 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.rst @@ -23,6 +23,7 @@ versions of the documentation contain the release notes for any later releases. :maxdepth: 1 ======= + 2.2 2.1.4 2.1.3 2.1.2 diff --git a/mayan/apps/installation/__init__.py b/mayan/apps/installation/__init__.py deleted file mode 100644 index cc7b07fd73..0000000000 --- a/mayan/apps/installation/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import unicode_literals - -from .classes import PropertyNamespace # NOQA - -default_app_config = 'installation.apps.InstallationApp' diff --git a/mayan/apps/installation/apps.py b/mayan/apps/installation/apps.py deleted file mode 100644 index a5ae30bf39..0000000000 --- a/mayan/apps/installation/apps.py +++ /dev/null @@ -1,52 +0,0 @@ -from __future__ import unicode_literals - -from django.utils.translation import ugettext_lazy as _ - -from common import MayanAppConfig, menu_tools, menu_object, menu_secondary -from navigation import SourceColumn - -from .classes import Property, PropertyNamespace, PIPNotFound, VirtualEnv -from .links import ( - link_menu_link, link_namespace_details, link_namespace_list -) - - -class InstallationApp(MayanAppConfig): - name = 'installation' - verbose_name = _('Installation') - - def ready(self): - super(InstallationApp, self).ready() - - SourceColumn( - source=PropertyNamespace, label=_('Label'), attribute='label' - ) - SourceColumn( - source=PropertyNamespace, label=_('Items'), - func=lambda context: len(context['object'].get_properties()) - ) - - SourceColumn(source=Property, label=_('Label'), attribute='label') - SourceColumn(source=Property, label=_('Value'), attribute='value') - - menu_object.bind_links( - links=(link_namespace_details,), sources=(PropertyNamespace,) - ) - menu_secondary.bind_links( - links=(link_namespace_list,), - sources=('installation:namespace_list', PropertyNamespace) - ) - menu_tools.bind_links(links=(link_menu_link,)) - - namespace = PropertyNamespace('venv', _('VirtualEnv')) - try: - venv = VirtualEnv() - except PIPNotFound: - namespace.add_property( - 'pip', 'pip', _('pip not found.'), report=True - ) - else: - for item, version, result in venv.get_results(): - namespace.add_property( - item, '%s (%s)' % (item, version), result, report=True - ) diff --git a/mayan/apps/installation/classes.py b/mayan/apps/installation/classes.py deleted file mode 100644 index 1efdc370ef..0000000000 --- a/mayan/apps/installation/classes.py +++ /dev/null @@ -1,158 +0,0 @@ -from __future__ import unicode_literals - -from collections import namedtuple -from json import dumps - -import sh - -try: - pip = sh.Command('pip') -except sh.CommandNotFound: - PIP = False -else: - PIP = True - - -class PIPNotFound(Exception): - pass - - -class PropertyNamespace(object): - _registry = {} - - @classmethod - def get(cls, name): - return cls._registry[name] - - @classmethod - def get_all(cls): - return cls._registry.values() - - def __init__(self, name, label): - self.name = name - self.label = label - self.properties = {} - self.__class__._registry[name] = self - - def __unicode__(self): - return unicode(self.label) - - def __str__(self): - return str(self.label) - - def add_property(self, *args, **kwargs): - prop = Property(*args, **kwargs) - self.properties[prop.name] = prop - - def get_properties(self): - return self.properties.values() - - @property - def id(self): - return self.name - - -class Property(object): - _registry = {} - - @classmethod - def get_all(cls): - return cls._registry.values() - - @classmethod - def get(cls, name): - return cls._registry[name] - - @classmethod - def get_reportable(cls, as_dict=False, as_json=False): - if as_json: - return dumps(cls.get_reportable(as_dict=True)) - - if not as_dict: - return [prop for prop in cls.get_all() if prop.report] - else: - result = {} - for prop in cls.get_all(): - if prop.report: - result[prop.name] = unicode(prop.value) - return result - - def __init__(self, name, label, value, report=False): - self.name = name - self.label = label - self.value = value - self.report = report - self.__class__._registry[name] = self - - def __unicode__(self): - return unicode(self.value) - - def __str__(self): - return str(self.value) - - -Dependency = namedtuple('Dependency', 'name, version, standard') - - -class VirtualEnv(object): - def extract_dependency(self, string): - string = str(string.strip()) - - try: - package, version = string.split('==') - except ValueError: - # item is not installed from package, svn/git maybe - try: - version, package = string.split('=') - except: - # has no version number - return Dependency(string, version=None, standard=True) - else: - # Get rid of '#egg' and '-e' - version = version.split('#')[0].split(' ')[1] - return Dependency(package, version, standard=False) - else: - return Dependency(package, version, standard=True) - - def get_packages_info(self, requirements_file=None): - for item in pip('freeze').splitlines(): - yield self.extract_dependency(item) - - def __init__(self): - if not PIP: - raise PIPNotFound - - def get_results(self): - requirements = {} - installed_packages = {} - - for item in self.get_packages_info(): - requirements[item.name] = item - - for item in self.get_packages_info(): - installed_packages[item.name] = item - - for name, item in requirements.items(): - try: - if item.standard: - if item.version: - if item.version == installed_packages[name].version: - status = item.version - else: - status = installed_packages[name].version - else: - status = None - else: - # Non standard version number, check SVN or GIT path - if item.version == installed_packages['%s-dev' % name.replace('-', '_')].version: - status = item.version - else: - status = installed_packages[ - '%s-dev' % name.replace('-', '_') - ].version - except KeyError: - # Not installed package found matching with name matching - # requirement - status = False - - yield name, item.version, status diff --git a/mayan/apps/installation/links.py b/mayan/apps/installation/links.py deleted file mode 100644 index d5aae4bba5..0000000000 --- a/mayan/apps/installation/links.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import unicode_literals - -from django.utils.translation import ugettext_lazy as _ - -from navigation import Link - -from .permissions import permission_installation_details - -link_menu_link = Link( - icon='fa fa-check-square-o', - permissions=(permission_installation_details,), - text=_('Installation details'), view='installation:namespace_list' -) -link_namespace_details = Link( - permissions=(permission_installation_details,), text=_('Details'), - view='installation:namespace_details', args='object.id' -) -link_namespace_list = Link( - permissions=(permission_installation_details,), - text=_('Installation property namespaces'), - view='installation:namespace_list' -) diff --git a/mayan/apps/installation/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/ar/LC_MESSAGES/django.mo deleted file mode 100644 index c47f64e29a0692993da1f16687120608a10459e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcma))F>ezw6vq!J0-YETGlQ2_Amp5VNlWW+AZSu45)n~2vO9^Jy1KJZw$rpDs7S!Z zz{-SF(VdAefY{jX7WgVW_bSqEJn5(Rx8MIg%a(uNS@{$|TnFv~9pDC#0Y2UVe*GS} z1$+d&_cO2xd;$Jk34))HZv&@SYu|UsH(~t)viJRh47T7J;QLnqAFy3VM>sAs8}yWQ zJj=L~S_LDX%|$ShVu9p^eI(R@G+O0CIW#?Q92mVXCJy(ecqEL4c82==h%40X^k0TU zQE20E-_GO|Kby}iPBlZ};6;kJjW|0FceoP_#e{BP(!%jWL|cr;pa}sZ9*P6$=U(zP zaZFK68CicoAj0R|I-DA=EZjjGhK719jMI=UH&TN^&E|Y2a4LAt&{M<5a)R#dIajbK zS}Ya~=ey;uIBZOG9+|q&M7h5V7Sr5D+4+o!o9O<(i41WQ_Iv&A@&RargxgvvKz4qa4aT&gyj>~Uj-OJ1crcysCV$L|V*yK17RQq36J97`7tvbo_I-q9wv45{L5 zX_JjMs%4^*grFygAgCq@1xafegN(ggrGz|AnrLmU){heEJDSTHr5B1@TTpC4alIV| fs5Rlk!{jp*p_&Q>r(x_qP1{pP%I~u9(?$ diff --git a/mayan/apps/installation/locale/ar/LC_MESSAGES/django.po b/mayan/apps/installation/locale/ar/LC_MESSAGES/django.po deleted file mode 100644 index c27840e3a9..0000000000 --- a/mayan/apps/installation/locale/ar/LC_MESSAGES/django.po +++ /dev/null @@ -1,172 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Mohammed ALDOUB , 2013 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/" -"ar/)\n" -"Language: ar\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Installation" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "قيمة" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "التفاصيل" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "View installation environment details" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/bg/LC_MESSAGES/django.mo deleted file mode 100644 index 4ee2a4af2e7caad0de8d88059541a8256f413333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 750 zcmZXQ&uUXa6vjub2p16%moBCYp+zS5k5$WrY}%wyFc{)B3m3v9ncj}vI}>ImO}i28 zLUa`b1y_pT0|ZPUQrZV_HF*J_#WP8;6%YLGH*@AY=iHg!w^lwOh^xRIpbA_Aa=^zs z!0+D!*MSd!_kIEH0^fn*C4_!~-T97E@^RXpq%15J7N;o zs`aNqllPRiq;4|NC0qT>kW^6|G@hhnTl4uiQe~D?oJ8?M5^a#=5so)#oWMGYz(|_> zK={7@`0kS=#z{=02lpa~;4w3nq?$d2ZKS$`UYZ;AC@|*2=$^=hlRfn;oZW7`La#e&cgM-O(||?L4CJgJAZ?? z6b0K#T6imx9`)dYmLJ-%mop*DxU>HK%pW56b@tj#+z%+3xG{$O2)pscMi`vO3%~zjDDxF#=n2D?71RG``BU@< DKFtZw diff --git a/mayan/apps/installation/locale/bg/LC_MESSAGES/django.po b/mayan/apps/installation/locale/bg/LC_MESSAGES/django.po deleted file mode 100644 index 846d27ad99..0000000000 --- a/mayan/apps/installation/locale/bg/LC_MESSAGES/django.po +++ /dev/null @@ -1,172 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Iliya Georgiev , 2012 -# Pavlin Koldamov , 2012 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/" -"language/bg/)\n" -"Language: bg\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Инсталация" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "Стойност" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Детайли" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Преглед на детайли относно средата на инсталацията" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.mo deleted file mode 100644 index ccb95b5e2b8c2848cafb3a1fb5096a8758e0f3d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmY+C!EO^V5QYsDAuXJ^!eKbHN`##CZUa=?ZV_!#5s8Q>gj|u6oo*d%?8tVK7WDz( z$bl;-UW6muxgwr|Gvg#s80phL_Wm=rSM%fU)<;HhlekZ`h+9NOgm_1U^?TwD@qq~5 zPsBFynfP^$v2Uco_vJccw@JT}Mx@_K?~(o_B^$dzg!(Na1Z}UQg%%<#^XVXOhICaS z4iW*Em+KPph&t6IRFl^CBNpbSnyAg($g!G8HneJjg*MK!p2f1lVl^ezL~h0?*pU4O DT%FVK diff --git a/mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.po deleted file mode 100644 index 1df407ea3a..0000000000 --- a/mayan/apps/installation/locale/bs_BA/LC_MESSAGES/django.po +++ /dev/null @@ -1,172 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# www.ping.ba , 2013 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/" -"rosarior/mayan-edms/language/bs_BA/)\n" -"Language: bs_BA\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Instalacija" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "Vrijednost" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Detalji" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Pregled detalja instalacije" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/da/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/da/LC_MESSAGES/django.mo deleted file mode 100644 index 03136d397570fa7d7e22082c9b271739f68b7ad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmY+B&2AGh5XToN0v zpt>)aIJ=-(z;T5awKd8qc@4PQcV&k_(o- zmrhw0n0hH|!jfboU?`39bJ(AU(268ktyaCzRjVty>CJ4DxNV(Fn(i@3RpS$V-y^AH za`3OCfJ(;2xEMWrK-Np+6Kev06qf6jUl-^mB(0Xp^kFua&QlnCEl=_2LDwCBMGi-1 zW-DcC0Y{fA#1p-AQsb$0jTd0rP3i}EAGYCO-@xkuWC#5?>gK2y, 2013 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/" -"da/)\n" -"Language: da\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Installation" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Detaljer" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Se installations miljø detaljer" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.mo deleted file mode 100644 index 2bc660141021b15ec44d5d34e8240eaa61a4e734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1135 zcmaiyO>Yx15QZ08zLp9J!~qGA+(V%OIbW1gwgjOzDO5C2wV@o5lT0>7yWW-UZJLUI z0UVH!xWIu6zW{ORkvkUB3#8RE4q-}pc z9s!nOGG&H#61Fd#gHm zNiEBl+kAtxK?MP;i@s2-R;{o5Ym_G1^12CSn=fRc;f*9<{_4{PU(__Hm{*0RfR&4- zSzessqcGJt`vqX zP*+F9?#07>^Fe&qii8x>nNyo@~ddPl`O?RzLgF>O#>*cLemL1y4 zx01M^6C<=tbRl+ya%#t>5bdfJ+VrAYE9Ca%12hpQeto%K+iy`RU-TCfWzl5b=%=XP z(v~fxk&tShwYowZvXy6zB|f(w=aT4<<~7wy+ERr9n`=tzuSS^`5noDlYyzgz!PZpD z^K7`ROe;27VWr%>|NoIQM~&R*kac#x>VF5#kPJx~Z(kI-g8XlC=oPAvxD<*vN)tB!kAFF0_B6lhiMD7h+{UGLI_$GQU`;Gu)p)! BIRpRz diff --git a/mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.po deleted file mode 100644 index 11bab55ff8..0000000000 --- a/mayan/apps/installation/locale/de_DE/LC_MESSAGES/django.po +++ /dev/null @@ -1,173 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Mathias Behrle , 2014 -# Stefan Lodders , 2012 -# Tobias Paepke , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Mathias Behrle \n" -"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-" -"edms/language/de_DE/)\n" -"Language: de_DE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Installation" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "Bezeichnung" - -#: apps.py:25 -msgid "Items" -msgstr "Elemente" - -#: apps.py:30 -msgid "Value" -msgstr "Wert" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "VirtualEnv" - -#: apps.py:46 -msgid "pip not found." -msgstr "Programm pip nicht gefunden" - -#: links.py:12 -msgid "Installation details" -msgstr "Installationsdetails" - -#: links.py:15 -msgid "Details" -msgstr "Details" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "Installationseigenschaften Namensräume" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Details der Installationsumgebung anzeigen" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "Installationsdetails für %s" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/en/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index a74863750bfaac17d237cd02c12073df486ec086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmbV}&2HN;49C5%i?P$rJ8-}Tv=|uKMvxT>a#@=K0ctGByq>4VtfRq}42fylr`TnE zy*|t6WLS0{fgk=7MN%U5^ycMbBKAUfD~yF#!j&-Ccj2{Qgb#ufem+Z*U!sHm{quuA z7ZrCRvacm_u!W0k+Sai3F1fa}1N)B$$lclCT}O_gCN{Q>$ujsKv}Rn?cugTnqK48u z7zgu<@@u-H-Ur4qHnzsk+a_Y=HKfZg6`lv$UxXKiNkft46U@d~e1d$e^Fr2HCV{x3 zJ3G`p#uX^Xc>&o(XOoYaSbAk5V-<{x@_HXMto#iH_M*`Q>m|T7ThkC$WI7FV*R(cn z;AF$xYo&I(-H3;DdrSADweM7aXe_E;bwfW$br)6pr;H+}PX89wGMcnpl=I^Z@==za zd&e>>tR8x4km;UP-x}+tu-=#uiD%!cOFTQq4G*}bfOEI@wRMe#vm49lvfT#L;-wE= b)ZqI4HqMGE9G0^a2k&N(pH9={KfdrcbW5(H diff --git a/mayan/apps/installation/locale/en/LC_MESSAGES/django.po b/mayan/apps/installation/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 2c914d156c..0000000000 --- a/mayan/apps/installation/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,174 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2012-12-12 06:06+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/" -"language/en/)\n" -"Language: en\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Installation" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -#, fuzzy -msgid "pip not found." -msgstr "not found" - -#: links.py:12 -#, fuzzy -msgid "Installation details" -msgstr "installation details" - -#: links.py:15 -msgid "Details" -msgstr "" - -#: links.py:20 views.py:13 -#, fuzzy -msgid "Installation property namespaces" -msgstr "installation details" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "View installation environment details" - -#: views.py:27 -#, fuzzy, python-format -msgid "Installation namespace details for: %s" -msgstr "installation details" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#, fuzzy -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#, fuzzy -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/es/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/es/LC_MESSAGES/django.mo deleted file mode 100644 index 2b6935746b8e624cf2d8a604c3fb8cca5754aa69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1121 zcmZvaJ#Q2-5QY~B1Qvto9u#Ou4uHzSQ6f4rWt$MgHv*oOdi4SpBC2fqpb1^33z z1;IEt33|;8cpIDp?}5)j1{&}p_u>J)M!SCR8@F(~V{s(>;b9-SJe-FHa z`CBjoKZEzdAK(@6FX;8-W5awmz-i1UKp+1JH~~Hb5qfZU3=hrU(Z9pnB{;$j%*XcU z&%>_{R)%?kC2~UMHds;Ci98ohYIS15vi~TU5(U{(q;#;&y4oac>SQ2R8eNicyGMEm z92GWL6`Pa?8zQeL*pSp`^4J9!scmVrDoDA51W*}QiM*w@gHo1EX@{JZ%4)%y(XT0W zd?n)>WGr5gu(sG0inW&7FT-^zwQ;;{dotrstDfZ@ov?82MTajM8oZb<2}cQQ)Z;l` zpXH6mES^o`2FCR|gnXU0rH^|;_mDSY)`*k(qX%_ZxGJpU9V3)Q8GSX@^(G##K`V^Z z5U5@ydc->a3@CQ;Py_iN4{mtESarMigB@Suqb{~AtNVWWH$BqAHl z9EMC7*|5FRZXH!1uGPautsH8|JG&*G=V-@8WiF&zVCj}HmR$2yXPM6*>3sSw8QxN< z&ZO!kY<^R^a4oNl$oaB1g-w_$2UFW@EU@9QIjz`alf^R&;h>}PoDMocq;mh8I$Xtf zj=p-dk)rZFZKSY%%Qu@pd|JjzVZ@-nM*97)!vns2!PiH;bbF5nt)G6v}M5b%OKloTRW&i*H diff --git a/mayan/apps/installation/locale/es/LC_MESSAGES/django.po b/mayan/apps/installation/locale/es/LC_MESSAGES/django.po deleted file mode 100644 index bf994f20ed..0000000000 --- a/mayan/apps/installation/locale/es/LC_MESSAGES/django.po +++ /dev/null @@ -1,173 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Igor Támara , 2015 -# jmcainzos , 2014 -# Roberto Rosario, 2012,2014 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/" -"language/es/)\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Instalación" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "Etiqueta" - -#: apps.py:25 -msgid "Items" -msgstr "Elementos" - -#: apps.py:30 -msgid "Value" -msgstr "Valor" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "VirtualEnv" - -#: apps.py:46 -msgid "pip not found." -msgstr "pip no fue encontrado." - -#: links.py:12 -msgid "Installation details" -msgstr "Detalles de instalación" - -#: links.py:15 -msgid "Details" -msgstr "Detalles" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "categorías de propiedades de instalación" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Ver detalles del entorno de instalación" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "categorias de detalles de instalación para: %s" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/fa/LC_MESSAGES/django.mo deleted file mode 100644 index b7f323b5bc78fc6d04a7013f406f79a38023b873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmZvaJ!}&(6vqveuLB|RAtnYRQ3OKH-Gx%BtGdvpQbi-861uyIlODRWPqx!E5(88u zQ#W8>VuDl%6t#S9j4bTPM}ZBAogMLfO+O;_N$-C4yZ`&JU*V`Uk;JWD$gpSxzxc!$_eSt~8AzszbpCHn_Tv0&^NOmCy>?{*7xw26%X|5Kg2> znAELZJqR?56`G|BEJE`%YA`e(vL+7q41gJ53Z>vN<9fRRsHAStsKA#{5+;}n4LuvY znnNWi?z4&}GgUIrq=FL!xJX-+j*;!%8D~nnuf$KJ#&78LBVT~>4Dk65}R-$xcdm6&3 zv2vq+5w}L&t2-qFT%%5LrdZg$0YB$ClY(owLsD)fa6HYHwVOmVB}@_K;B7DDZmqK2dqnHDlu0p>}zRTKU=-daw0;|?-!%!YZjxoW!R zHA*|?gIODh;eBI|%tzDRT(v*DX}hn%X3eZ;;p|PN`-%`GtfY@^8nXKD9rF%artNga w^k9f}WO^`7FYVyHqv5n|-a`D-_B^}$Ht4!$V{, 2014 -# Mohammad Dashtizadeh , 2013 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/" -"language/fa/)\n" -"Language: fa\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "نصب" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "برچسب" - -#: apps.py:25 -msgid "Items" -msgstr "اقلام" - -#: apps.py:30 -msgid "Value" -msgstr "مقدار" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "محیط مجازی" - -#: apps.py:46 -msgid "pip not found." -msgstr "pip پیدا نشد." - -#: links.py:12 -msgid "Installation details" -msgstr "جزئیات نصب" - -#: links.py:15 -msgid "Details" -msgstr "جزئیات" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "فضای نام نصب" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "دیدن جزئیات محیط نصب" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "جزئیات فضای نام نصب برای : %s" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/fr/LC_MESSAGES/django.mo deleted file mode 100644 index c9b6ba4bab999aa7baa13d23dd0efb0dab42d16d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmZvaO>Yx15QYtuuLXgMIH3xeLuo7I>?X9O+NvCAQmLX5RS6MSH*r#cqen*bnxq!IwKX{!@+6Hx`$>VWmWIuu7VH2=O6_Qcp3aO=9e+Qg7et_4hG;4@D}(J{0RRGzlQkmQqlh{cn|S= za1Hzhu7JNlUq3rja1OkJcmcc*md5*a@HXPtAX<;kj^&B@Gx|Ba`FgY+*>(K-{ukjl zMmxp1NL4s46HB(0bv#M9lUhv$w0%wnRXi0o<1I1yn|8E`>HKsfni-u5EsX z$qwHa32E{q7o;ggpUN`_phESe(JB?nO+J7u<8q$VRF7mbqe?q`Ggs{r*){r&XgRjs zW=&x%CWvXBA9F=()%wd|Ph{FSR<~W*X3z4jWepwEVE09XZ5lC}m{qwGF|9=9RTeF? z$`e{%j>{FSqX>y?PxPekJC*mCRm!wdj-!=F5iHo@*0F}+%HkURZS3iN46i}Ujnqg` z-JEv?YY3jkbjt|UI-rXO&Sh~J_WS*k^VPB=j!G?^hNh@9Vd{rrqMh0>8TSY~CR{q{ z7}Jgk>f80&=>?QaQLw3%!xgf|afa!fIC5c@aH-a5>wp_8+{UZM7F#>b^Ples!)mIf z+fsF7y0$M}u$$zDCu~cb)W%e0qtI?t)@iZaSXA^WEibJHq&gg&BdEzP9+M^uXP=s! z4QRWlPKE<7ETo=@4DX$$xI3EZyb#)Sp|B&d8Ho, 2014 -# PatrickHetu , 2012 -# SadE54 , 2013 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:12-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/" -"fr/)\n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Installation" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "Étiquette" - -#: apps.py:25 -msgid "Items" -msgstr "Éléments" - -#: apps.py:30 -msgid "Value" -msgstr "Valeur" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "VirtualEnv" - -#: apps.py:46 -msgid "pip not found." -msgstr "pip non trouvé" - -#: links.py:12 -msgid "Installation details" -msgstr "Détails de l'installation" - -#: links.py:15 -msgid "Details" -msgstr "Détails" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "installation des propriétés des espaces de nommages" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Voir détails de la plateforme" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "installation détaillée de l'espace de nommage pour: %s" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/hu/LC_MESSAGES/django.mo deleted file mode 100644 index 9d088e39f23f293345a841df5aaf5a1f472691e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmYL_!A=`75QdkksL~#L?!nxG=wx>Tw5iivAc=_76(L=aI6BF&G2OLS_H09ViJo`} zo`d)3owr~%Ao9zfW^Da49{d02j}HOs1M`LX%Iq>fnMM=l6LZ1*+X;eejv@2RIj?s$ z^&1V4lrDTQarPGH1mgu6@)Ob$7ZV>ZGR|LUgi)^`kX7do*>e#j&_h*{w;f zC&kpx(2?cnmD83DCa+bFkfAE2IIB(0=R9U>NmR)wTCG-XY8vPpylc;G8M)U|7nRL> z02if?inlh=vX1uOn@X{)!*rYuw||hddD}Es19Ys~4wCRcYQaO**zsyF^ z-TIpAZ_vTe%f(RU)F4fW*=?Lu!=Rk?qoQ1P;LU*l-ah z6t%znX~xn&#f+g}pYBuO658(tWV?87;R~g*Qa|fvrEF9mZ(6cB#`Jpd83fAQD z1@IO$FIn6Y@fqculMyEPuIj!U-#PF$G&zf}L>!-RQg|z!htx{#3h9j%Y+_!}dPC7k zs|*=*K9@N{in0`Jq%)(@DVpiHY)220cNF(ivK>5 z%A(_SSHV;kCZlAqd4#yZ!=BL|H4XMr(G5K=eN+`v=?Yx15QYtuuRU_+U~a7{XV;-XaFhcisT8RzqOkPtY^EC{uf4J-P5Te%fddD` zi4*^e-@>?w$VjiB8SC}<>+g%BpN!%$=_P4GdP=gS6yHdxz9S{ik3E0w`J4Ft0b_rN z&q(s&j*9r4>M`*Nu_Ti1z6XIlN&^K=v!j$u0JX7^%@EqiF7y&CyVQ0AY##hqs8P&T z;u1nM-YH({TkZICQhv@B(D{I(jEz}|kDDfn$}67DKUHEJKqL9ZL?bBPFXUTMoQeKB zF3*&FO?gp}Q7quvq`n8=8&M2Izu@w{lJc~m$S!n5Q3dUy)#!ub3%`Vbo)~p7o(!(p z=mtaux>bCJ+8R3K@fxvHdA{9ldzhA+E4b;^zRkmKVaVHb8v&~}=62sCH<+LNZ>hM! zteln8!wbk>k&V4WaCEBMj;@DrgL!AQaYJ6Ob%=nYFV(pi9DHf}D+prhYQHkBQGBqZ z&U3p7+KO`@+Nike?#npp5BV+~9XtMN#O28_OaFwrv4(vJXlhRh5Z7ro{g)5G{sE(v Bo`wJb diff --git a/mayan/apps/installation/locale/it/LC_MESSAGES/django.po b/mayan/apps/installation/locale/it/LC_MESSAGES/django.po deleted file mode 100644 index 0bc8356bfe..0000000000 --- a/mayan/apps/installation/locale/it/LC_MESSAGES/django.po +++ /dev/null @@ -1,170 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2015-08-20 19:11+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/" -"language/it/)\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "etichetta" - -#: apps.py:25 -msgid "Items" -msgstr "Articoli" - -#: apps.py:30 -msgid "Value" -msgstr "Valore" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Dettagli" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.mo deleted file mode 100644 index 8da3476eccc11ae415e7a1715fef184c259ee037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmYL_!A{#i5Qg0fMCBvr9=5kcbYeSD2%F~8Bp{@irl~>Vgcf^n7TLSj?u3vB>A7#l zd-T?EkjSt7w6m*!W@q;GaPLpR`pA4{zB2pFcc#^xIbePh6Y^)ti6Co(zaIF8u}3w+jX-JS0n!~^KZA~}~yaul<|neqggQ^r?{tdnA4 zAJCEI-7BXp8%()UB|?U(mSVD^d?`BDNK15;GKKGo&XTB+QM6vKd(@WFkNDEdZ5_F{ zA}*@i$pDMmN1U`R7@6w+dKPuxUyx#Z6Q)<`boVDoFAm4n5E|}t)9}EAFBCPE(q<^~ zrE(r=bdz1cVCQR_cti(NliNa@Qi{QYrf^=ZoT}i$y4v$=&GzU={h@dZM;#-+j6~8M NhQTG4_>9H}{{b-rl4t+` diff --git a/mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.po deleted file mode 100644 index 7839e9578a..0000000000 --- a/mayan/apps/installation/locale/nl_NL/LC_MESSAGES/django.po +++ /dev/null @@ -1,170 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2015-08-20 19:11+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-" -"edms/language/nl_NL/)\n" -"Language: nl_NL\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Gegevens" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/pl/LC_MESSAGES/django.mo deleted file mode 100644 index 6ded16ed76760a63915b1162ee0468216080117b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcmZvb&ubGw6vx-!8bwgVlZWS_r9~#$P3sS~jfys6(O}S6@i^U`rjzc@EHjhFgq{TP zu6Pg;PyPk|3EGo*6$J65_(yp0J25q>_~7L;Z{|C1-psyyJGuWw06PXh1K)z5fPaO1 zqdh@z2s{gV%`A8dyZ}yvw?G07cmRAp;>!`=fK!-%3zoo-;BoLX_!IsEeiZSieSg-! zfTt0E2P@z&(ARZt|DQT;f`<_|!6V>9unZ=k&;Jbc^}Pm>dRRM#f6dqE@8Rtr9O;MV zbNT&y;l3Vk{+wV*I4(0AEGz4HmT@Pw+7(dx9|b9%3tR9+>@3roHZe`@PDF*#g)pu^ z)EeB1b zJ0fvxIb|!tSll3{2Jdr4^`*wW(p^z#<5ebWG#^KE7>6N*?5^09KJPBw9IHlDjpFe9xe!*m&8=fC!Q_1~pnMiY6$woOUMOK;pn=z&$D>arI_3;Zu<*;;JD~C5`t$u;) zJMqY28<%Q0p=Z{|#hSgP~Q>of9U0Ri{)XchuXY7VHxs6E`!_d~| z7I3Uzsm-WbEut$F5|*c;@N%t6)6>J@Vr||JXZ&=y7=^U8HJtaFa29(a?5WN!l!AMM zWFXq_-)%qck6M%`9X>fd>LN_bUDJgb2(`{ZyX~u_*+Z=1ezoMY22mPcY zg1YN(NckUwwFr?n6=8hbJlTkR4Y@+pmmHbx+z2K3Ud88!IVDr;2A{fZo!C Iwk`+10Z6e?p#T5? diff --git a/mayan/apps/installation/locale/pl/LC_MESSAGES/django.po b/mayan/apps/installation/locale/pl/LC_MESSAGES/django.po deleted file mode 100644 index 5ab583602f..0000000000 --- a/mayan/apps/installation/locale/pl/LC_MESSAGES/django.po +++ /dev/null @@ -1,174 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Annunnaky , 2015 -# mic , 2013,2015 -# Wojciech Warczakowski , 2016 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Wojciech Warczakowski \n" -"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/" -"pl/)\n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Instalacja" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "Etykieta" - -#: apps.py:25 -msgid "Items" -msgstr "Pozycje" - -#: apps.py:30 -msgid "Value" -msgstr "Wartość" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "VirtualEnv" - -#: apps.py:46 -msgid "pip not found." -msgstr "nie odnaleziono pip." - -#: links.py:12 -msgid "Installation details" -msgstr "Szczegóły instalacji" - -#: links.py:15 -msgid "Details" -msgstr "Szczegóły" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "Przestrzenie nazw instalacji" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Przeglądaj szczegóły środowiska instalacji" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "Szczegóły przestrzeni nazw instalacji dla: %s" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/pt/LC_MESSAGES/django.mo deleted file mode 100644 index 6ce504dfebff458a4ae22012369b9c5a7c070d1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmY*XO>Yx15H(P~mJg{F5czZ@^99J8&2H z2|NIP1J{8&S885g@I&xZ>~DeZgWKQ_zyP=f|Hsu@=NEVr{vWW{*|L4o&|>IFVa&%ts<4 zCp;?!Igw&c<$sA(s8eaQ%7t>vyh0XKX-6lzRB40sjeal2j&)OZB8 z_cj=aLL0|=b}Cc$s+?Lj)CmpxZ-%UGL{%Q^a3>PljN%t8+GEX^G~P?%U96)Bfovd7 zrPp1F+hxs|Hsd6E{w#t8$J{zLG+bHqtW81(dL)d~V9Slv2vF0KPX!wao+q@As>*38 ztf1R7=ZYi@=ks~Pc?CHUXN|GWLsRFPF!v2Hk>)nc7CK?!!kwjRLJJr4y1m28M~E9y z(ALV~?bz_VK!;A8xvppe)ij~|Bk6*ERvMnM zBW-eX85d diff --git a/mayan/apps/installation/locale/pt/LC_MESSAGES/django.po b/mayan/apps/installation/locale/pt/LC_MESSAGES/django.po deleted file mode 100644 index b1fd41c0a2..0000000000 --- a/mayan/apps/installation/locale/pt/LC_MESSAGES/django.po +++ /dev/null @@ -1,171 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Vítor Figueiró , 2012 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/" -"language/pt/)\n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "instalação" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "Nome" - -#: apps.py:25 -msgid "Items" -msgstr "Itens" - -#: apps.py:30 -msgid "Value" -msgstr "Valor" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "pip não encontrado." - -#: links.py:12 -msgid "Installation details" -msgstr "Detalhes da instalação" - -#: links.py:15 -msgid "Details" -msgstr "Detalhes" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Ver detalhes do ambiente de instalação" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.mo deleted file mode 100644 index b40158089f58a630ccadc8d77060a068860c1e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmZvaPiqrF7{*tvR^uPgdQkB2ic}h8vPoKN*-{T}Qz$kVV(e8W*=ahmJG0EpHm!K{ z>PbB4K@TE+06#*H-aUyI@q75pCTSY*g*U(X^XA$29iHDeX5I&gE66*@*U0P0Uq~Nx zCJ1K1yP&TrgEzrt@ILqiB+!88!FMBm81XYWkMpl!3H$+G1Al^_kbjXEv43-JsQ(tc zh5bh`1iyp#z(1hZpPd=<>WFjT1DxLmy?z6n16v@Zi{7z339sSj@NoeN*&;6C*Z==4 z@^W!9>?_z5j?2Ub+sZngB-}}@rZyD+r-Bquh0SQUfC zYJ(l#6-ltmlUxM5QVd9*YJh|~kVdOiC^!B9s*KBd(ohFMCNomn;hVXND?!WXm!jv` zcFcB#v6vvDCO_he8k@~$rMAelaja?kGG^;}-?EO5sMLDeVH-vi6SGb3L`3y!ZJAY< zSp5;zmZI7s*3~KsSz8=PuRB$@$m%t!*P`mf2USFAhg-)whAWF_^smv@T@0^5%Z=11 zQ2m_u1?vc&M$|%Ac|R9c(89XmuVhlDg?;C;C=3UKLB)9~xhD=QJ)MSTC}P6YPsT)? z+AtXjhM9Y@-VVzrUx=tUDK)p7jmewTD%H}4Rt~SqI!74>cH+>5S;D1SrQSX_R=Bn2 zoh`O9sq;!55v_EkE47l`@Put?liG+>R&4EBeU*mGwFO0wsa9Ss6&6eO z#n>AB_}lRpJwBzFTN;{g`oiL7>VjfDu@Pn5@Q5ac;|kX>LT03hc`PhVifte<^C{11 r6EqHGSDM0HzBez<)2_tRcuSAmIO=HRJeYFmJhTso_VAL1$2#~2rZP5^ diff --git a/mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.po deleted file mode 100644 index 29b57e562e..0000000000 --- a/mayan/apps/installation/locale/pt_BR/LC_MESSAGES/django.po +++ /dev/null @@ -1,171 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Rogerio Falcone , 2015 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-" -"edms/language/pt_BR/)\n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Instalação" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "Label" - -#: apps.py:25 -msgid "Items" -msgstr "itens" - -#: apps.py:30 -msgid "Value" -msgstr "Valor" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "Virtualenv" - -#: apps.py:46 -msgid "pip not found." -msgstr "pip não encontrado" - -#: links.py:12 -msgid "Installation details" -msgstr "Detalhe das Instalação" - -#: links.py:15 -msgid "Details" -msgstr "Detalhes" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "Instalando Propriedades namespaces" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Exibir detalhes do ambiente de instalação" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "Detalhes da Instalação do namespace para: %s" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.mo deleted file mode 100644 index f2a3cc7c7a40aa023455feb22289968d44ef1822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmY+C&2AGh5XTJ^Ay%9?b1+D)c7>evZVD7fOC_3AibT{XEV&{#>!z-}_R4me7WDz( z2oe_#oO_}8FMK!1Qj8oC37^;crKMgW9>XwihF4^ znsc=hXfDMX%YWvv(C5+`T?_4T)h(P_b0!v^j4Lu1*1>XyC;XCYJQ_~kMl;bE>&e6| zWkp`EmX4H$;b?kPk^?K+?Z}XO!EjEq=Y;N(`~}W-S=NU!rI1Kw;#`Kh|K;^bp5Z)W z^x0Di7QNxllhShS;10$zJTu3_dIRdXl?D>@a>bW|l!DhGTyrhqlyNsoaD3{0!_suU zUiW;cBu~UeZ(-`xZfe-H4i_V$s$HtOdJud+J4%zk8!+6?M3eDkbn_%xk46VZdw4oh zUN&%FFD`uAC@%E?FHX62!WZw#L$Y_17Y=bEEE(yAsia;qymu^pG*v6h6*)Avb`0yL zbzRXP;LWgzbx~ydl*MtZw=+s#WiOMftIjD3n(XYv`Y~vd?B^^?l0k$*BPc1mM&K6y ZpDWX<_#oTwhA?Q?5)cVaEh@P}e*nJ@$Y1~f diff --git a/mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.po deleted file mode 100644 index 1f3f4ec8f2..0000000000 --- a/mayan/apps/installation/locale/ro_RO/LC_MESSAGES/django.po +++ /dev/null @@ -1,172 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Badea Gabriel , 2013 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-" -"edms/language/ro_RO/)\n" -"Language: ro_RO\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "Instalare" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "Valoare" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Detalii" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Vezi detalii de instalare de mediu" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/ru/LC_MESSAGES/django.mo deleted file mode 100644 index 59a1df5fac659ddf5ba3827e1f0ae974d3a56421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmZWl!EO^V5H+O;X~hAR0~ZeF(5ew~cfC!aY_q9E(@K?yh(hSyP2ALIV@I~PX{8_mD8P9t&YyX^?evcro0B!*)fUAH6 zki{!NR=);Z1H1)f+K+%)z-PeCDTICiXZ>H0&j9}hz79Nf8KENZ4d6?_K)HV!I17-C zqQWf`i9wsvSe7Kr3MJ7NOHz)u1n*(-*E!~LPiQ4OTw2^38*5rUq`VT@n;Ycn{NJL>D0s z0uYiq-xJx~e{_o^q&TEeuyiMY@E$T_NkcPf;0{VhxUROjwhGuVEfff3J7sN78k}{Y zof;$HC+Byq?MA-e>-83FW*0krf1#;5z8)F1-^p%6c&lUlWIV*zsb9Dl8DX7z)y?Yq zT(>Ow@Ps_OLIq1 zq9Hy!99hb=SO5zhTjDs#TDh(qFHP+C3m4}w7uKBbEX6Qk6^Afjv9RJH_s;c)&)u>6 z?gnW1V)!gCPTiUN>b|*S=2 && n" -"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" -"%100>=11 && n%100<=14)? 2 : 3);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "установка" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "Значение" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Детали" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "Подробности среды установки" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.mo deleted file mode 100644 index bea4d564a179c1b9f719624c101e3adba3c977ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmYLF!H&}~5Df@~6mFb3%mt|xOk<}7in|dK+pbiJh|mTkPRMP%S);^`YA`AU-30CH{F7ML+0#P8?AI$p`fH z2h3HFy75ur>@T$qxUBHIa$Z{_AeXn&z+#@S7?8Emhl z^D1QD$_t#HeEkrY%HhInZKX{uV7k#EE}ET_4PIE+dI6?8NS{q+a1677dBqvaG7cYs i0a=bRCCN{640m_;sR^Z0N{xrJI4W%A?8aChbo38^k)E>v diff --git a/mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.po deleted file mode 100644 index 9e77c268e6..0000000000 --- a/mayan/apps/installation/locale/sl_SI/LC_MESSAGES/django.po +++ /dev/null @@ -1,171 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2015-08-20 19:11+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-" -"edms/language/sl_SI/)\n" -"Language: sl_SI\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" -"%100==4 ? 2 : 3);\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Podrobnosti" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.mo deleted file mode 100644 index 3988920fdf20cd1c2af1a0df6799848f00d6c450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmYL_&u$Yj5XKD!A?>jeHx53wLX-7|0Kri%Bq^%YEm2r<1vi;)jCSpnJ!#r!;LN4B zz6KmP@E%Bg6J`_CjP%p|(WlQd{(Jc3hu}D1UNAl8DRaiO@s)YT7^a6=B8Ssm~*&9$j=)RR%PiL>VR*Ho%!zpV2Q6p*0t0!@(FE&R;L5cr5ehW5mUD~bOpOucQCrJ%Qyj}It@FUkk;*OfXh0j)ql(M%6^%jr^gR(Xt|vv`Ds4c|4PZqk_ hwrw0{1Gy`QYLJN0%1W~LKYx?>VE^1n3irRhi+`DLnsopG diff --git a/mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.po deleted file mode 100644 index cce62ef395..0000000000 --- a/mayan/apps/installation/locale/vi_VN/LC_MESSAGES/django.po +++ /dev/null @@ -1,170 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2015-08-20 19:11+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/" -"mayan-edms/language/vi_VN/)\n" -"Language: vi_VN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "Giá trị" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "" - -#: apps.py:46 -msgid "pip not found." -msgstr "" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "Chi tiết" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.mo b/mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.mo deleted file mode 100644 index de4c1ee0acc1fb67d9c4ef4b32ddd866c3b0bda8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 zcmY+CO=}ZD7{^C#6;|;e9zBc)p+zRUn^s#kZzz^UI@Dp%=zrb-|_5ec9fRn&s7{5O_)h*CNF#ZI38gv`f_Wc62 zzGF~mnFOShTD$HHVAr!@{dS|s4CS##WuXm?V`{h*s7~XQp*m+h%=gV>Cc0cn(P6^i zXs5Bxl}Tw_5?z$=1Pf_!Q>G%ypsJGBS;LTWMCwdwFb;5qu2X?a#mW_@#uBLvspuAu z$c40}NhkyCR4<35px9(1q(}`5aMttB6K|1Zm$1JW_zRGG9u$%q>vHS+U)=)9`Z((c z-np|LgmaNqa6xY4FcGn2m>u8`%uI=hJ`Q=}vsGUB2Y;N?|roNAmZ8j}^N zIy%52nGAK_&*5pB_i_#zZQmb1yp0AQAB^AJLxY=N(eUNl(dMJ+#Au^GcztK|;_kTr b4l4hAdo{e(hljBL7Y{c-44yn4ZET@`FW%tg diff --git a/mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.po b/mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.po deleted file mode 100644 index d1f11a501e..0000000000 --- a/mayan/apps/installation/locale/zh_CN/LC_MESSAGES/django.po +++ /dev/null @@ -1,171 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -# Translators: -# Ford Guo , 2014 -msgid "" -msgstr "" -"Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-27 14:13-0400\n" -"PO-Revision-Date: 2016-03-21 21:05+0000\n" -"Last-Translator: Roberto Rosario\n" -"Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/" -"language/zh_CN/)\n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: apps.py:16 permissions.py:7 -msgid "Installation" -msgstr "安装" - -#: apps.py:22 apps.py:29 -msgid "Label" -msgstr "" - -#: apps.py:25 -msgid "Items" -msgstr "" - -#: apps.py:30 -msgid "Value" -msgstr "值" - -#: apps.py:41 -msgid "VirtualEnv" -msgstr "VirtualEnv" - -#: apps.py:46 -msgid "pip not found." -msgstr "pip未发现" - -#: links.py:12 -msgid "Installation details" -msgstr "" - -#: links.py:15 -msgid "Details" -msgstr "细节" - -#: links.py:20 views.py:13 -msgid "Installation property namespaces" -msgstr "" - -#: permissions.py:10 -msgid "View installation environment details" -msgstr "查看安装环境的详细信息" - -#: views.py:27 -#, python-format -msgid "Installation namespace details for: %s" -msgstr "" - -#~ msgid "LSB OS" -#~ msgstr "LSB OS" - -#~ msgid "Distributor ID" -#~ msgstr "Distributor ID" - -#~ msgid "Description" -#~ msgstr "Description" - -#~ msgid "Release" -#~ msgstr "Release" - -#~ msgid "Codename" -#~ msgstr "Codename" - -#~ msgid "System info" -#~ msgstr "System info" - -#~ msgid "OS architecture" -#~ msgstr "OS architecture" - -#~ msgid "Python version" -#~ msgstr "Python version" - -#~ msgid "Hostname" -#~ msgstr "Hostname" - -#~ msgid "Platform" -#~ msgstr "Platform" - -#~ msgid "Machine" -#~ msgstr "Machine" - -#~ msgid "Processor" -#~ msgstr "Processor" - -#~ msgid "Number of CPUs" -#~ msgstr "Number of CPUs" - -#~ msgid "Total physical memory" -#~ msgstr "Total physical memory" - -#~ msgid "Disk partitions" -#~ msgstr "Disk partitions" - -#~ msgid "tesseract version" -#~ msgstr "tesseract version" - -#~ msgid "not found" -#~ msgstr "not found" - -#~ msgid "error getting version" -#~ msgstr "error getting version" - -#~ msgid "unpaper version" -#~ msgstr "unpaper version" - -#~ msgid "pdftotext version" -#~ msgstr "pdftotext version" - -#~ msgid "Mayan EDMS" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Mayan EDMS version" -#~ msgstr "Mayan EDMS version" - -#~ msgid "Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Running from a Git repository" -#~ msgstr "Running from a Git repository" - -#~ msgid "Repository remotes" -#~ msgstr "Repository remotes" - -#~ msgid "Repository remotes URLs" -#~ msgstr "Repository remotes URLs" - -#~ msgid "Branch" -#~ msgstr "Branch" - -#~ msgid "HEAD commit hex SHA" -#~ msgstr "HEAD commit hex SHA" - -#~ msgid "HEAD commit author" -#~ msgstr "HEAD commit author" - -#~ msgid "HEAD commit authored date" -#~ msgstr "HEAD commit authored date" - -#~ msgid "HEAD commit committer" -#~ msgstr "HEAD commit committer" - -#~ msgid "HEAD commit committed date" -#~ msgstr "HEAD commit committed date" - -#~ msgid "HEAD commit message" -#~ msgstr "HEAD commit message" - -#~ msgid "Installed via fabfile" -#~ msgstr "Installed via fabfile" - -#~ msgid "Installation environment details" -#~ msgstr "Installation environment details" diff --git a/mayan/apps/installation/permissions.py b/mayan/apps/installation/permissions.py deleted file mode 100644 index 14dcf66821..0000000000 --- a/mayan/apps/installation/permissions.py +++ /dev/null @@ -1,11 +0,0 @@ -from __future__ import absolute_import, unicode_literals - -from django.utils.translation import ugettext_lazy as _ - -from permissions import PermissionNamespace - -namespace = PermissionNamespace('installation', _('Installation')) -permission_installation_details = namespace.add_permission( - name='installation_details', - label=_('View installation environment details') -) diff --git a/mayan/apps/installation/urls.py b/mayan/apps/installation/urls.py deleted file mode 100644 index 2f0207f5af..0000000000 --- a/mayan/apps/installation/urls.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import unicode_literals - -from django.conf.urls import patterns, url - -from .views import NamespaceDetailView, NamespaceListView - -urlpatterns = patterns( - 'installation.views', - url(r'^$', NamespaceListView.as_view(), name='namespace_list'), - url( - r'^(?P\w+)/details/$', NamespaceDetailView.as_view(), - name='namespace_details' - ), -) diff --git a/mayan/apps/installation/views.py b/mayan/apps/installation/views.py deleted file mode 100644 index 06a31fefb9..0000000000 --- a/mayan/apps/installation/views.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import absolute_import, unicode_literals - -from django.utils.translation import ugettext_lazy as _ - -from common.generics import SingleObjectListView - -from .classes import PropertyNamespace -from .permissions import permission_installation_details - - -class NamespaceListView(SingleObjectListView): - extra_context = { - 'title': _('Installation property namespaces'), - 'hide_object': True, - } - view_permission = permission_installation_details - - def get_queryset(self): - return PropertyNamespace.get_all() - - -class NamespaceDetailView(SingleObjectListView): - view_permission = permission_installation_details - - def get_extra_context(self): - return { - 'title': _('Installation namespace details for: %s') % self.get_namespace().label, - 'hide_object': True, - 'object': self.get_namespace(), - } - - def get_namespace(self): - return PropertyNamespace.get(self.kwargs['namespace_id']) - - def get_queryset(self): - return self.get_namespace().get_properties() diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index a25271b601..38420e0c40 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -18,7 +18,6 @@ from common.settings import settings_db_sync_task_delay from documents.search import document_search from documents.signals import post_version_upload from documents.widgets import document_link -from installation import PropertyNamespace from mayan.celery import app from navigation import SourceColumn from rest_api.classes import APIEndPoint @@ -150,41 +149,3 @@ class OCRApp(MayanAppConfig): post_version_upload_ocr, dispatch_uid='post_version_upload_ocr', sender=DocumentVersion ) - - namespace = PropertyNamespace('ocr', _('OCR')) - - try: - pdftotext = sh.Command(setting_pdftotext_path.value) - except sh.CommandNotFound: - namespace.add_property( - 'pdftotext', _('pdftotext version'), _('not found'), - report=True - ) - except Exception: - namespace.add_property( - 'pdftotext', _('pdftotext version'), - _('error getting version'), report=True - ) - else: - namespace.add_property( - 'pdftotext', _('pdftotext version'), pdftotext('-v').stderr, - report=True - ) - - try: - tesseract = sh.Command(setting_tesseract_path.value) - except sh.CommandNotFound: - namespace.add_property( - 'tesseract', _('tesseract version'), _('not found'), - report=True - ) - except Exception: - namespace.add_property( - 'tesseract', _('tesseract version'), - _('error getting version'), report=True - ) - else: - namespace.add_property( - 'tesseract', _('tesseract version'), tesseract('-v').stderr, - report=True - ) diff --git a/mayan/settings/base.py b/mayan/settings/base.py index 6d8d16e4cf..09bf543aed 100644 --- a/mayan/settings/base.py +++ b/mayan/settings/base.py @@ -86,7 +86,6 @@ INSTALLED_APPS = ( 'documents', 'events', 'folders', - 'installation', 'linking', 'mailer', 'metadata', From b8b2e0e9291ae91dca1e96fdb57c98a211af200d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 27 Oct 2016 02:48:40 -0400 Subject: [PATCH 002/119] Initial commit to support per page search. --- .../appearance/templates/appearance/home.html | 50 ++++++++++- mayan/apps/documents/apps.py | 34 ++++++- mayan/apps/documents/models.py | 8 ++ mayan/apps/documents/search.py | 24 ++++- mayan/apps/documents/widgets.py | 13 ++- mayan/apps/dynamic_search/classes.py | 88 ++++++++++--------- mayan/apps/dynamic_search/forms.py | 8 ++ mayan/apps/dynamic_search/links.py | 14 ++- mayan/apps/dynamic_search/settings.py | 3 - mayan/apps/dynamic_search/urls.py | 21 +++-- mayan/apps/dynamic_search/views.py | 68 +++++++------- mayan/apps/metadata/apps.py | 21 ++++- mayan/apps/ocr/apps.py | 6 +- mayan/apps/tags/apps.py | 17 +++- 14 files changed, 279 insertions(+), 96 deletions(-) diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html index e405e9acd5..a6a2713b86 100644 --- a/mayan/apps/appearance/templates/appearance/home.html +++ b/mayan/apps/appearance/templates/appearance/home.html @@ -49,15 +49,17 @@ + +{% comment %}
-
+
@@ -67,4 +69,48 @@
+{% endcomment %} +
+
+
+
{% trans 'Search documents' %}
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
+ {% if search_terms %} + {% include 'appearance/generic_list_subtemplate.html' %} + {% endif %} +
+
+
+
+ +
+
+
+
{% trans 'Search pages' %}
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
+ {% if search_terms %} + {% include 'appearance/generic_list_subtemplate.html' %} + {% endif %} +
+
+
+
{% endblock %} diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 1abfd005e5..93d7b73113 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -68,13 +68,14 @@ from .permissions import ( permission_document_trash, permission_document_version_revert, permission_document_view ) +from .search import document_search, document_page_search from .settings import setting_thumbnail_size from .statistics import ( new_documents_per_month, new_document_pages_per_month, new_document_versions_per_month, total_document_per_month, total_document_page_per_month, total_document_version_per_month ) -from .widgets import document_thumbnail +from .widgets import document_html_widget, document_thumbnail class DocumentsApp(MayanAppConfig): @@ -90,6 +91,7 @@ class DocumentsApp(MayanAppConfig): DeletedDocument = self.get_model('DeletedDocument') Document = self.get_model('Document') DocumentPage = self.get_model('DocumentPage') + DocumentPageResult = self.get_model('DocumentPageResult') DocumentType = self.get_model('DocumentType') DocumentTypeFilename = self.get_model('DocumentTypeFilename') DocumentVersion = self.get_model('DocumentVersion') @@ -159,6 +161,36 @@ class DocumentsApp(MayanAppConfig): source=Document, label=_('Type'), attribute='document_type' ) + SourceColumn( + source=DocumentPage, label=_('Thumbnail'), + func=lambda context: document_html_widget( + document_page=context['object'], + click_view='documents:document_display', + click_view_arguments=(context['object'].document.pk,), + gallery_name='documents:document_page_list', + preview_click_view='documents:document_page_view', + size=setting_thumbnail_size.value, + title=unicode(context['object']), + ) + ) + + SourceColumn( + source=DocumentPageResult, label=_('Thumbnail'), + func=lambda context: document_html_widget( + document_page=context['object'], + click_view='documents:document_display', + click_view_arguments=(context['object'].document.pk,), + gallery_name='documents:document_page_list', + preview_click_view='documents:document_page_view', + size=setting_thumbnail_size.value, + title=unicode(context['object']), + ) + ) + SourceColumn( + source=DocumentPageResult, label=_('Type'), + attribute='document_version.document.document_type' + ) + SourceColumn( source=DocumentType, label=_('Documents'), func=lambda context: context['object'].get_document_count( diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index c866e3491e..0ca8bf79af 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -774,6 +774,14 @@ class DocumentPage(models.Model): return '{}-{}'.format(self.document_version.uuid, self.pk) +class DocumentPageResult(DocumentPage): + class Meta: + ordering = ('document_version__document', 'page_number') + proxy = True + verbose_name = _('Document page') + verbose_name_plural = _('Document pages') + + class NewVersionBlock(models.Model): document = models.ForeignKey(Document, verbose_name=_('Document')) diff --git a/mayan/apps/documents/search.py b/mayan/apps/documents/search.py index 341692565a..ea34960f0f 100644 --- a/mayan/apps/documents/search.py +++ b/mayan/apps/documents/search.py @@ -7,7 +7,8 @@ from dynamic_search.classes import SearchModel from .permissions import permission_document_view document_search = SearchModel( - 'documents', 'Document', permission=permission_document_view, + app_label='documents', model_name='Document', + permission=permission_document_view, serializer_string='documents.serializers.DocumentSerializer' ) @@ -19,3 +20,24 @@ document_search.add_model_field( ) document_search.add_model_field(field='label', label=_('Label')) document_search.add_model_field(field='description', label=_('Description')) + +document_page_search = SearchModel( + app_label='documents', model_name='DocumentPageResult', + permission=permission_document_view, + serializer_string='documents.serializers.DocumentPageSerializer' +) + +document_page_search.add_model_field( + field='document_version__document__document_type__label', + label=_('Document type') +) +document_page_search.add_model_field( + field='document_version__document__versions__mimetype', + label=_('MIME type') +) +document_page_search.add_model_field( + field='document_version__document__label', label=_('Label') +) +document_page_search.add_model_field( + field='document_version__document__description', label=_('Description') +) diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index f0e8a71dfc..8a7b14c384 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -83,7 +83,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): def document_thumbnail(document, **kwargs): return document_html_widget( - document.latest_version.pages.first(), + document_page=document.latest_version.pages.first(), click_view='documents:document_display', **kwargs ) @@ -94,7 +94,7 @@ def document_link(document): ) -def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False): +def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False, preview_click_view=None): result = [] alt_text = _('Document page image') @@ -110,6 +110,7 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No 'zoom': zoom, 'rotation': rotation, 'size': size, + 'page': document_page.page_number } if gallery_name: @@ -132,7 +133,13 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No if title: if not disable_title_link: - preview_click_link = document.get_absolute_url() + if not preview_click_view: + preview_click_link = document.get_absolute_url() + else: + preview_click_link = reverse( + preview_click_view, args=(document_page.pk,) + ) + title_template = 'data-caption="{title}"'.format( title=strip_tags(title), url=preview_click_link or '#' ) diff --git a/mayan/apps/dynamic_search/classes.py b/mayan/apps/dynamic_search/classes.py index 77c6e3f112..99522b6345 100644 --- a/mayan/apps/dynamic_search/classes.py +++ b/mayan/apps/dynamic_search/classes.py @@ -33,23 +33,55 @@ class SearchModel(object): self.app_label = app_label self.model_name = model_name self.search_fields = [] - self.model = None # Lazy - self.label = label + self._model = None # Lazy + self._label = label self.serializer_string = serializer_string self.permission = permission self.__class__.registry[self.get_full_name()] = self - def get_full_name(self): - return '%s.%s' % (self.app_label, self.model_name) + @property + def model(self): + if not self._model: + self._model = apps.get_model(self.app_label, self.model_name) + return self._model + + @property + def label(self): + if not self._label: + self._label = self.model._meta.verbose_name + return self._label + + def add_model_field(self, *args, **kwargs): + """ + Add a search field that directly belongs to the parent SearchModel + """ + search_field = SearchField(self, *args, **kwargs) + self.search_fields.append(search_field) + + def assemble_query(self, terms, search_fields): + """ + Returns a query, that is a combination of Q objects. That combination + aims to search keywords within a model by testing the given search + fields. + """ + queries = [] + for term in terms: + or_query = None + for field in search_fields: + q = Q(**{'%s__%s' % (field, 'icontains'): term}) + if or_query is None: + or_query = q + else: + or_query = or_query | q + + queries.append(or_query) + return queries def get_all_search_fields(self): return self.search_fields - def get_search_field(self, full_name): - try: - return self.search_fields[full_name] - except KeyError: - raise KeyError('No search field named: %s' % full_name) + def get_full_name(self): + return '%s.%s' % (self.app_label, self.model_name) def get_fields_simple_list(self): """ @@ -61,12 +93,11 @@ class SearchModel(object): return result - def add_model_field(self, *args, **kwargs): - """ - Add a search field that directly belongs to the parent SearchModel - """ - search_field = SearchField(self, *args, **kwargs) - self.search_fields.append(search_field) + def get_search_field(self, full_name): + try: + return self.search_fields[full_name] + except KeyError: + raise KeyError('No search field named: %s' % full_name) def normalize_query(self, query_string, findterms=re.compile(r'"([^"]+)"|(\S+)').findall, @@ -88,11 +119,6 @@ class SearchModel(object): result_set = set() search_dict = {} - if not self.model: - self.model = apps.get_model(self.app_label, self.model_name) - if not self.label: - self.label = self.model._meta.verbose_name - if 'q' in query_string: # Simple search for search_field in self.get_all_search_fields(): @@ -110,7 +136,6 @@ class SearchModel(object): } ) else: - for search_field in self.get_all_search_fields(): if search_field.field in query_string and query_string[search_field.field]: search_dict.setdefault(search_field.get_model(), { @@ -183,6 +208,8 @@ class SearchModel(object): datetime.datetime.now() - start_time ).split(':')[2] + logger.debug('elapsed_time: %s', elapsed_time) + queryset = self.model.objects.filter( pk__in=list(result_set)[:setting_limit.value] ) @@ -201,25 +228,6 @@ class SearchModel(object): return queryset, result_set, elapsed_time - def assemble_query(self, terms, search_fields): - """ - Returns a query, that is a combination of Q objects. That combination - aims to search keywords within a model by testing the given search - fields. - """ - queries = [] - for term in terms: - or_query = None - for field in search_fields: - q = Q(**{'%s__%s' % (field, 'icontains'): term}) - if or_query is None: - or_query = q - else: - or_query = or_query | q - - queries.append(or_query) - return queries - # SearchField classes class SearchField(object): diff --git a/mayan/apps/dynamic_search/forms.py b/mayan/apps/dynamic_search/forms.py index aa37ce1c48..c3c1440e4e 100644 --- a/mayan/apps/dynamic_search/forms.py +++ b/mayan/apps/dynamic_search/forms.py @@ -5,6 +5,14 @@ from django.utils.translation import ugettext_lazy as _ class AdvancedSearchForm(forms.Form): + _match_all = forms.BooleanField( + label=_('Match all'), help_text=_( + 'When checked, only results that match all fields will be ' + 'returned. When unchecked results that match at least one field ' + 'will be returned.' + ), required=False + ) + def __init__(self, *args, **kwargs): self.search_model = kwargs.pop('search_model') super(AdvancedSearchForm, self).__init__(*args, **kwargs) diff --git a/mayan/apps/dynamic_search/links.py b/mayan/apps/dynamic_search/links.py index 8ebe2cf8ef..9c3b01ce5f 100644 --- a/mayan/apps/dynamic_search/links.py +++ b/mayan/apps/dynamic_search/links.py @@ -4,8 +4,14 @@ from django.utils.translation import ugettext_lazy as _ from navigation import Link -link_search = Link(text=_('Search'), view='search:search') -link_search_advanced = Link( - text=_('Advanced search'), view='search:search_advanced' +link_search = Link( + text=_('Search'), view='search:search', args='search_model.get_full_name' +) +link_search_advanced = Link( + text=_('Advanced search'), view='search:search_advanced', + args='search_model.get_full_name' +) +link_search_again = Link( + text=_('Search again'), view='search:search_again', + args='search_model.get_full_name', keep_query=True ) -link_search_again = Link(text=_('Search again'), view='search:search_again') diff --git a/mayan/apps/dynamic_search/settings.py b/mayan/apps/dynamic_search/settings.py index 0d19b2a244..38f3fb9bd3 100644 --- a/mayan/apps/dynamic_search/settings.py +++ b/mayan/apps/dynamic_search/settings.py @@ -6,9 +6,6 @@ from smart_settings import Namespace namespace = Namespace(name='dynamic_search', label=_('Search')) -setting_show_object_type = namespace.add_setting( - global_name='SEARCH_SHOW_OBJECT_TYPE', default=False -) setting_limit = namespace.add_setting( global_name='SEARCH_LIMIT', default=100, help_text=_('Maximum amount search hits to fetch and display.') diff --git a/mayan/apps/dynamic_search/urls.py b/mayan/apps/dynamic_search/urls.py index 720b04cadb..0d4bb64b9f 100644 --- a/mayan/apps/dynamic_search/urls.py +++ b/mayan/apps/dynamic_search/urls.py @@ -5,14 +5,25 @@ from django.conf.urls import patterns, url from .api_views import ( APIRecentSearchListView, APIRecentSearchView, APISearchView ) -from .views import AdvancedSearchView, ResultsView, SearchView +from .views import ( + AdvancedSearchView, ResultsView, SearchAgainView, SearchView +) urlpatterns = patterns( 'dynamic_search.views', - url(r'^$', SearchView.as_view(), name='search'), - url(r'^advanced/$', AdvancedSearchView.as_view(), name='search_advanced'), - url(r'^again/$', 'search_again', name='search_again'), - url(r'^results/$', ResultsView.as_view(), name='results'), + url(r'^(?P[\.\w]+)/$', SearchView.as_view(), name='search'), + url( + r'^advanced/(?P[\.\w]+)/$', AdvancedSearchView.as_view(), + name='search_advanced' + ), + url( + r'^again/(?P[\.\w]+)/$', SearchAgainView.as_view(), + name='search_again' + ), + url( + r'^results/(?P[\.\w]+)/$', ResultsView.as_view(), + name='results' + ), ) api_urls = patterns( diff --git a/mayan/apps/dynamic_search/views.py b/mayan/apps/dynamic_search/views.py index bceb6665bf..077619f064 100644 --- a/mayan/apps/dynamic_search/views.py +++ b/mayan/apps/dynamic_search/views.py @@ -7,12 +7,13 @@ from django.conf import settings from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ +from django.views.generic.base import RedirectView from common.generics import SimpleView, SingleObjectListView from .classes import SearchModel from .forms import SearchForm, AdvancedSearchForm -from .settings import setting_limit, setting_show_object_type +from .settings import setting_limit logger = logging.getLogger(__name__) @@ -21,40 +22,52 @@ class ResultsView(SingleObjectListView): def get_extra_context(self): context = { 'hide_links': True, + 'search_model': self.search_model, 'search_results_limit': setting_limit.value, - 'title': _('Search results'), + 'title': _('Search results for: %s') % self.search_model.label, } - if setting_show_object_type.value: - context.update({ - 'extra_columns': ( - { - 'name': _('Type'), - 'attribute': lambda x: x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:] - }, - ) - }) - return context def get_queryset(self): - document_search = SearchModel.get('documents.Document') + self.search_model = self.get_search_model() if self.request.GET: # Only do search if there is user input, otherwise just render # the template with the extra_context - queryset, ids, timedelta = document_search.search( - self.request.GET, self.request.user + if self.request.GET.get('_match_all', 'off') == 'on': + global_and_search=True + else: + global_and_search=False + + queryset, ids, timedelta = self.search_model.search( + query_string=self.request.GET, user=self.request.user, + global_and_search=global_and_search ) return queryset + def get_search_model(self): + return SearchModel.get(self.kwargs['search_model']) + class SearchView(SimpleView): template_name = 'appearance/generic_form.html' title = _('Search') + def get_extra_context(self): + self.search_model = self.get_search_model() + return { + 'form': self.get_form(), + 'form_action': reverse('search:results', args=(self.search_model.get_full_name(),)), + 'search_model': self.search_model, + 'submit_icon': 'fa fa-search', + 'submit_label': _('Search'), + 'submit_method': 'GET', + 'title': _('Search for: %s') % self.search_model.label, + } + def get_form(self): if ('q' in self.request.GET) and self.request.GET['q'].strip(): query_string = self.request.GET['q'] @@ -62,32 +75,19 @@ class SearchView(SimpleView): else: return SearchForm() - def get_extra_context(self): - return { - 'form': self.get_form(), - 'form_action': reverse('search:results'), - 'submit_icon': 'fa fa-search', - 'submit_label': _('Search'), - 'submit_method': 'GET', - 'title': self.title, - } + def get_search_model(self): + return SearchModel.get(self.kwargs['search_model']) class AdvancedSearchView(SearchView): title = _('Advanced search') def get_form(self): - document_search = SearchModel.get('documents.Document') - return AdvancedSearchForm( - data=self.request.GET, search_model=document_search + data=self.request.GET, search_model=self.get_search_model() ) -def search_again(request): - query = urlparse.urlparse( - request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)) - ).query - return HttpResponseRedirect( - '{}?{}'.format(reverse('search:search_advanced'), query) - ) +class SearchAgainView(RedirectView): + pattern_name = 'search:search_advanced' + query_string = True diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py index 75b0e38bf7..bbac674ad4 100644 --- a/mayan/apps/metadata/apps.py +++ b/mayan/apps/metadata/apps.py @@ -15,7 +15,7 @@ from common import ( ) from common.classes import ModelAttribute, Filter from common.widgets import two_state_template -from documents.search import document_search +from documents.search import document_page_search, document_search from documents.signals import post_document_type_change from documents.permissions import permission_document_view from mayan.celery import app @@ -57,6 +57,9 @@ class MetadataApp(MayanAppConfig): Document = apps.get_model( app_label='documents', model_name='Document' ) + DocumentPageResult = apps.get_model( + app_label='documents', model_name='DocumentPageResult' + ) DocumentType = apps.get_model( app_label='documents', model_name='DocumentType' @@ -143,6 +146,13 @@ class MetadataApp(MayanAppConfig): func=lambda context: get_metadata_string(context['object']) ) + SourceColumn( + source=DocumentPageResult, label=_('Metadata'), + func=lambda context: get_metadata_string( + context['object'].document + ) + ) + SourceColumn( source=DocumentMetadata, label=_('Value'), attribute='value' @@ -176,6 +186,15 @@ class MetadataApp(MayanAppConfig): field='metadata__value', label=_('Metadata value') ) + document_page_search.add_model_field( + field='document_version__document__metadata__metadata_type__name', + label=_('Metadata type') + ) + document_page_search.add_model_field( + field='document_version__document__metadata__value', + label=_('Metadata value') + ) + menu_facet.bind_links(links=(link_metadata_view,), sources=(Document,)) menu_multi_item.bind_links( links=( diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index 38420e0c40..e6a02563a2 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -15,7 +15,7 @@ from common import ( menu_tools ) from common.settings import settings_db_sync_task_delay -from documents.search import document_search +from documents.search import document_search, document_page_search from documents.signals import post_version_upload from documents.widgets import document_link from mayan.celery import app @@ -115,6 +115,10 @@ class OCRApp(MayanAppConfig): field='versions__pages__ocr_content__content', label=_('OCR') ) + document_page_search.add_model_field( + field='ocr_content__content', label=_('OCR') + ) + menu_facet.bind_links( links=(link_document_content,), sources=(Document,) ) diff --git a/mayan/apps/tags/apps.py b/mayan/apps/tags/apps.py index 02061d5639..d7a1b5d1eb 100644 --- a/mayan/apps/tags/apps.py +++ b/mayan/apps/tags/apps.py @@ -10,7 +10,7 @@ from common import ( MayanAppConfig, menu_facet, menu_secondary, menu_object, menu_main, menu_multi_item, menu_sidebar ) -from documents.search import document_search +from documents.search import document_page_search, document_search from navigation import SourceColumn from rest_api.classes import APIEndPoint @@ -39,6 +39,10 @@ class TagsApp(MayanAppConfig): app_label='documents', model_name='Document' ) + DocumentPageResult = apps.get_model( + app_label='documents', model_name='DocumentPageResult' + ) + DocumentTag = self.get_model('DocumentTag') Tag = self.get_model('Tag') @@ -76,6 +80,14 @@ class TagsApp(MayanAppConfig): ) ) + SourceColumn( + source=DocumentPageResult, label=_('Tags'), + func=lambda context: widget_document_tags( + document=context['object'].document, + user=context['request'].user + ) + ) + SourceColumn( source=Tag, label=_('Preview'), func=lambda context: widget_single_tag(context['object']) @@ -87,6 +99,9 @@ class TagsApp(MayanAppConfig): ) ) + document_page_search.add_model_field( + field='document_version__document__tags__label', label=_('Tags') + ) document_search.add_model_field(field='tags__label', label=_('Tags')) menu_facet.bind_links( From aef395f4df677869ee9601ce0432eefa3710165a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 27 Oct 2016 03:59:14 -0400 Subject: [PATCH 003/119] Remove support for recent searches --- mayan/apps/dynamic_search/admin.py | 14 ----- mayan/apps/dynamic_search/api_views.py | 23 -------- mayan/apps/dynamic_search/classes.py | 5 -- mayan/apps/dynamic_search/filters.py | 11 ---- mayan/apps/dynamic_search/managers.py | 40 ------------- mayan/apps/dynamic_search/models.py | 75 ------------------------ mayan/apps/dynamic_search/serializers.py | 19 ------ mayan/apps/dynamic_search/settings.py | 4 -- mayan/apps/dynamic_search/urls.py | 12 +--- 9 files changed, 1 insertion(+), 202 deletions(-) delete mode 100644 mayan/apps/dynamic_search/admin.py delete mode 100644 mayan/apps/dynamic_search/filters.py delete mode 100644 mayan/apps/dynamic_search/managers.py delete mode 100644 mayan/apps/dynamic_search/models.py delete mode 100644 mayan/apps/dynamic_search/serializers.py diff --git a/mayan/apps/dynamic_search/admin.py b/mayan/apps/dynamic_search/admin.py deleted file mode 100644 index 3c1297cfc8..0000000000 --- a/mayan/apps/dynamic_search/admin.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import unicode_literals - -from django.contrib import admin - -from .models import RecentSearch - - -@admin.register(RecentSearch) -class RecentSearchAdmin(admin.ModelAdmin): - date_hierarchy = 'datetime_created' - list_display = ('user', 'query', 'datetime_created', 'hits') - list_display_links = ('user', 'query', 'datetime_created', 'hits') - list_filter = ('user',) - readonly_fields = ('user', 'query', 'datetime_created', 'hits') diff --git a/mayan/apps/dynamic_search/api_views.py b/mayan/apps/dynamic_search/api_views.py index 7941a8963b..65f78104a9 100644 --- a/mayan/apps/dynamic_search/api_views.py +++ b/mayan/apps/dynamic_search/api_views.py @@ -6,29 +6,6 @@ from rest_framework.exceptions import ParseError from rest_api.filters import MayanObjectPermissionsFilter from .classes import SearchModel -from .filters import RecentSearchUserFilter -from .models import RecentSearch -from .serializers import RecentSearchSerializer - - -class APIRecentSearchListView(generics.ListAPIView): - """ - Returns a list of all the recent searches for the logged user. - """ - - filter_backends = (RecentSearchUserFilter,) - queryset = RecentSearch.objects.all() - serializer_class = RecentSearchSerializer - - -class APIRecentSearchView(generics.RetrieveAPIView): - """ - Returns the selected recent search details. - """ - - filter_backends = (RecentSearchUserFilter,) - queryset = RecentSearch.objects.all() - serializer_class = RecentSearchSerializer class APISearchView(generics.ListAPIView): diff --git a/mayan/apps/dynamic_search/classes.py b/mayan/apps/dynamic_search/classes.py index 99522b6345..18fa94aac1 100644 --- a/mayan/apps/dynamic_search/classes.py +++ b/mayan/apps/dynamic_search/classes.py @@ -12,7 +12,6 @@ from django.utils.module_loading import import_string from acls.models import AccessControlList from permissions import Permission -from .models import RecentSearch from .settings import setting_limit logger = logging.getLogger(__name__) @@ -222,10 +221,6 @@ class SearchModel(object): self.permission, user, queryset ) - RecentSearch.objects.add_query_for_user( - user, query_string, len(result_set) - ) - return queryset, result_set, elapsed_time diff --git a/mayan/apps/dynamic_search/filters.py b/mayan/apps/dynamic_search/filters.py deleted file mode 100644 index 579cb59632..0000000000 --- a/mayan/apps/dynamic_search/filters.py +++ /dev/null @@ -1,11 +0,0 @@ -from __future__ import unicode_literals - -from rest_framework.filters import BaseFilterBackend - - -class RecentSearchUserFilter(BaseFilterBackend): - def filter_queryset(self, request, queryset, view): - if request.user.is_staff or request.user.is_superuser: - return queryset - else: - return queryset.filter(user=self.request.user) diff --git a/mayan/apps/dynamic_search/managers.py b/mayan/apps/dynamic_search/managers.py deleted file mode 100644 index 456d53c819..0000000000 --- a/mayan/apps/dynamic_search/managers.py +++ /dev/null @@ -1,40 +0,0 @@ -import urlparse - -from django.contrib.auth.models import AnonymousUser -from django.db import models -from django.utils.http import urlencode - -from .settings import setting_recent_count - - -class RecentSearchManager(models.Manager): - def add_query_for_user(self, user, query_string, hits): - parsed_query = urlparse.parse_qs( - urlencode(dict(query_string.items())) - ) - - for key, value in parsed_query.items(): - parsed_query[key] = ' '.join(value) - - if 'q' in query_string: - # Is a simple query - - if not query_string['q']: - # Don't store empty simple searches - return - else: - # Cleanup query string and only store the q parameter - parsed_query = {'q': parsed_query['q']} - - if parsed_query and not isinstance(user, AnonymousUser): - # If the URL query has at least one variable with a value - new_recent, created = self.model.objects.get_or_create( - user=user, query=urlencode(parsed_query), - defaults={'hits': hits} - ) - if not created: - new_recent.hits = hits - new_recent.save() - - for recent_to_delete in self.model.objects.filter(user=user)[setting_recent_count.value:]: - recent_to_delete.delete() diff --git a/mayan/apps/dynamic_search/models.py b/mayan/apps/dynamic_search/models.py deleted file mode 100644 index b3ee98b156..0000000000 --- a/mayan/apps/dynamic_search/models.py +++ /dev/null @@ -1,75 +0,0 @@ -from __future__ import unicode_literals - -import urllib -import urlparse - -from django.conf import settings -from django.core.urlresolvers import reverse -from django.db import models -from django.utils.encoding import ( - python_2_unicode_compatible, smart_str, smart_unicode -) -from django.utils.translation import ugettext_lazy as _ - -from .managers import RecentSearchManager - - -@python_2_unicode_compatible -class RecentSearch(models.Model): - """ - Keeps a list of the [n] most recent search keywords for a given user - """ - - user = models.ForeignKey( - settings.AUTH_USER_MODEL, editable=False, verbose_name=_('User') - ) - query = models.TextField(editable=False, verbose_name=_('Query')) - datetime_created = models.DateTimeField( - auto_now=True, db_index=True, verbose_name=_('Datetime created') - ) - hits = models.IntegerField(editable=False, verbose_name=_('Hits')) - - objects = RecentSearchManager() - - def __str__(self): - # TODO: Fix this hack, store the search model name in the recent - # search entry - from .classes import SearchModel - document_search = SearchModel.get('documents.Document') - - query_dict = urlparse.parse_qs( - urllib.unquote_plus(smart_str(self.query)) - ) - - if self.is_advanced(): - # Advanced search - advanced_string = [] - for key, value in query_dict.items(): - search_field = document_search.get_search_field(key) - advanced_string.append( - '%s: %s' % ( - search_field.label, smart_unicode(' '.join(value)) - ) - ) - - display_string = ', '.join(advanced_string) - else: - # Is a simple search - display_string = smart_unicode(' '.join(query_dict['q'])) - - return '%s (%s)' % (display_string, self.hits) - - def save(self, *args, **kwargs): - super(RecentSearch, self).save(*args, **kwargs) - - def url(self): - view = 'search:results' if self.is_advanced() else 'search:search' - return '%s?%s' % (reverse(view), self.query) - - def is_advanced(self): - return 'q' not in urlparse.parse_qs(self.query) - - class Meta: - ordering = ('-datetime_created',) - verbose_name = _('Recent search') - verbose_name_plural = _('Recent searches') diff --git a/mayan/apps/dynamic_search/serializers.py b/mayan/apps/dynamic_search/serializers.py deleted file mode 100644 index 0e49d1b9bf..0000000000 --- a/mayan/apps/dynamic_search/serializers.py +++ /dev/null @@ -1,19 +0,0 @@ -from __future__ import unicode_literals - -from rest_framework import serializers - -from user_management.serializers import UserSerializer - -from .models import RecentSearch - - -class RecentSearchSerializer(serializers.HyperlinkedModelSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='rest_api:recentsearch-detail' - ) - user = UserSerializer() - - class Meta: - fields = ('datetime_created', 'hits', 'query', 'url', 'user') - model = RecentSearch - read_only_fields = ('datetime_created', 'hits', 'query', 'user') diff --git a/mayan/apps/dynamic_search/settings.py b/mayan/apps/dynamic_search/settings.py index 38f3fb9bd3..3c5a8dbb89 100644 --- a/mayan/apps/dynamic_search/settings.py +++ b/mayan/apps/dynamic_search/settings.py @@ -10,7 +10,3 @@ setting_limit = namespace.add_setting( global_name='SEARCH_LIMIT', default=100, help_text=_('Maximum amount search hits to fetch and display.') ) -setting_recent_count = namespace.add_setting( - global_name='SEARCH_RECENT_COUNT', default=5, - help_text=_('Maximum number of search queries to remember per user.') -) diff --git a/mayan/apps/dynamic_search/urls.py b/mayan/apps/dynamic_search/urls.py index 0d4bb64b9f..9dba7e8c75 100644 --- a/mayan/apps/dynamic_search/urls.py +++ b/mayan/apps/dynamic_search/urls.py @@ -2,9 +2,7 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .api_views import ( - APIRecentSearchListView, APIRecentSearchView, APISearchView -) +from .api_views import APISearchView from .views import ( AdvancedSearchView, ResultsView, SearchAgainView, SearchView ) @@ -28,13 +26,5 @@ urlpatterns = patterns( api_urls = patterns( '', - url( - r'^recent_searches/$', APIRecentSearchListView.as_view(), - name='recentsearch-list' - ), - url( - r'^recent_searches/(?P[0-9]+)/$', APIRecentSearchView.as_view(), - name='recentsearch-detail' - ), url(r'^search/$', APISearchView.as_view(), name='search-view'), ) From eb2a3bba30068fce3e3134a7b91a3ff1aa2f7c08 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 27 Oct 2016 04:00:21 -0400 Subject: [PATCH 004/119] Update v2.2 change log --- docs/releases/2.2.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index 92c6297960..f6f92f4ddd 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -11,6 +11,8 @@ What's new Other changes ------------- - Remove the installation app +- Add support for page search +- Remove recent searches feature Removals -------- From 2ad40a0970d25741467dc3895cddee5e8433eae3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 27 Oct 2016 05:01:51 -0400 Subject: [PATCH 005/119] Invert the search boxes order --- .../appearance/templates/appearance/home.html | 65 ++++++------------- 1 file changed, 20 insertions(+), 45 deletions(-) diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html index a6a2713b86..1386cf6d09 100644 --- a/mayan/apps/appearance/templates/appearance/home.html +++ b/mayan/apps/appearance/templates/appearance/home.html @@ -50,48 +50,6 @@ -{% comment %} -
-
-
-
-
- - - - {% trans 'Advanced' %} - -
-
- {% if search_terms %} - {% include 'appearance/generic_list_subtemplate.html' %} - {% endif %} -
-
-
-{% endcomment %} -
-
-
-
{% trans 'Search documents' %}
-
-
-
- - - - {% trans 'Advanced' %} - -
-
- {% if search_terms %} - {% include 'appearance/generic_list_subtemplate.html' %} - {% endif %} -
-
-
-
-
@@ -106,11 +64,28 @@
- {% if search_terms %} - {% include 'appearance/generic_list_subtemplate.html' %} - {% endif %}
+ +
+
+
+
{% trans 'Search documents' %}
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
+
+
+
+
+ {% endblock %} From c10637aaa462a8ad665630a77bdfe529b259a232 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 28 Oct 2016 02:44:02 -0400 Subject: [PATCH 006/119] Update dynamic_search app API to support document page searches. --- mayan/apps/dynamic_search/api_views.py | 85 ++++++++++++++++++++++---- mayan/apps/dynamic_search/classes.py | 14 ++++- mayan/apps/dynamic_search/mixins.py | 13 ++++ mayan/apps/dynamic_search/urls.py | 11 +++- mayan/apps/dynamic_search/views.py | 17 +++--- requirements/base.txt | 2 +- 6 files changed, 117 insertions(+), 25 deletions(-) create mode 100644 mayan/apps/dynamic_search/mixins.py diff --git a/mayan/apps/dynamic_search/api_views.py b/mayan/apps/dynamic_search/api_views.py index 65f78104a9..876aaf9aec 100644 --- a/mayan/apps/dynamic_search/api_views.py +++ b/mayan/apps/dynamic_search/api_views.py @@ -1,28 +1,49 @@ from __future__ import unicode_literals +from django.http import Http404, HttpResponseRedirect + from rest_framework import generics from rest_framework.exceptions import ParseError from rest_api.filters import MayanObjectPermissionsFilter from .classes import SearchModel +from .mixins import SearchModelMixin -class APISearchView(generics.ListAPIView): +class APISearchView(SearchModelMixin, generics.ListAPIView): """ - Perform a search operaton - q -- Term that will be used for the search. + Perform a search operation + --- + GET: + omit_serializer: true + parameters: + - name: search_model + paramType: path + type: string + required: true + description: Possible values are "documents.Document" or "document.DocumentPageResult" + - name: q + paramType: query + type: string + description: Term that will be used for the search. """ + filter_backends = (MayanObjectPermissionsFilter,) def get_queryset(self): - search_class = self.get_search_class() - if search_class.permission: - self.mayan_object_permissions = {'GET': (search_class.permission,)} + search_model = self.get_search_model() + + # Override serializer class just before producing the queryset of + # search results + self.serializer_class = search_model.serializer + + if search_model.permission: + self.mayan_object_permissions = {'GET': (search_model.permission,)} try: - queryset, ids, timedelta = search_class.search( + queryset, ids, timedelta = search_model.search( query_string=self.request.GET, user=self.request.user ) except Exception as exception: @@ -30,8 +51,50 @@ class APISearchView(generics.ListAPIView): return queryset - def get_search_class(self): - return SearchModel.get('documents.Document') - def get_serializer_class(self): - return self.get_search_class().serializer +class APIAdvancedSearchView(SearchModelMixin, generics.ListAPIView): + """ + Perform an advanced search operation + --- + GET: + omit_serializer: true + parameters: + - name: search_model + paramType: path + type: string + required: true + description: Possible values are "documents.Document" or "document.DocumentPageResult" + - name: _match_all + paramType: query + type: string + description: When checked, only results that match all fields will be returned. When unchecked results that match at least one field will be returned. Possible values are "on" or "off" + """ + + filter_backends = (MayanObjectPermissionsFilter,) + + def get_queryset(self): + self.search_model = self.get_search_model() + + # Override serializer class just before producing the queryset of + # search results + self.serializer_class = self.search_model.serializer + + if self.search_model.permission: + self.mayan_object_permissions = { + 'GET': (self.search_model.permission,) + } + + if self.request.GET.get('_match_all', 'off') == 'on': + global_and_search=True + else: + global_and_search=False + + try: + queryset, ids, timedelta = self.search_model.search( + query_string=self.request.GET, user=self.request.user, + global_and_search=global_and_search + ) + except Exception as exception: + raise ParseError(unicode(exception)) + + return queryset diff --git a/mayan/apps/dynamic_search/classes.py b/mayan/apps/dynamic_search/classes.py index 18fa94aac1..0999a59a43 100644 --- a/mayan/apps/dynamic_search/classes.py +++ b/mayan/apps/dynamic_search/classes.py @@ -8,6 +8,7 @@ from django.apps import apps from django.core.exceptions import PermissionDenied from django.db.models import Q from django.utils.module_loading import import_string +from django.utils.translation import ugettext as _ from acls.models import AccessControlList from permissions import Permission @@ -22,12 +23,23 @@ class SearchModel(object): @classmethod def get(cls, full_name): - result = cls.registry[full_name] + try: + result = cls.registry[full_name] + except KeyError: + raise KeyError(_('No search model matching the query')) if not hasattr(result, 'serializer'): result.serializer = import_string(result.serializer_string) return result + @classmethod + def as_choices(cls): + return cls.registry + + @classmethod + def all(cls): + return cls.registry.values() + def __init__(self, app_label, model_name, serializer_string, label=None, permission=None): self.app_label = app_label self.model_name = model_name diff --git a/mayan/apps/dynamic_search/mixins.py b/mayan/apps/dynamic_search/mixins.py new file mode 100644 index 0000000000..a73206d764 --- /dev/null +++ b/mayan/apps/dynamic_search/mixins.py @@ -0,0 +1,13 @@ +from __future__ import unicode_literals + +from django.http import Http404 + +from .classes import SearchModel + + +class SearchModelMixin(object): + def get_search_model(self): + try: + return SearchModel.get(self.kwargs['search_model']) + except KeyError as exception: + raise Http404(unicode(exception)) diff --git a/mayan/apps/dynamic_search/urls.py b/mayan/apps/dynamic_search/urls.py index 9dba7e8c75..bcf566ca36 100644 --- a/mayan/apps/dynamic_search/urls.py +++ b/mayan/apps/dynamic_search/urls.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .api_views import APISearchView +from .api_views import APIAdvancedSearchView, APISearchView from .views import ( AdvancedSearchView, ResultsView, SearchAgainView, SearchView ) @@ -26,5 +26,12 @@ urlpatterns = patterns( api_urls = patterns( '', - url(r'^search/$', APISearchView.as_view(), name='search-view'), + url( + r'^search/(?P[\.\w]+)/$', APISearchView.as_view(), + name='search-view' + ), + url( + r'^advanced/(?P[\.\w]+)/$', APIAdvancedSearchView.as_view(), + name='advanced-search-view' + ), ) diff --git a/mayan/apps/dynamic_search/views.py b/mayan/apps/dynamic_search/views.py index 077619f064..41838b9be6 100644 --- a/mayan/apps/dynamic_search/views.py +++ b/mayan/apps/dynamic_search/views.py @@ -5,7 +5,7 @@ import urlparse from django.conf import settings from django.core.urlresolvers import reverse -from django.http import HttpResponseRedirect +from django.http import Http404, HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ from django.views.generic.base import RedirectView @@ -13,12 +13,13 @@ from common.generics import SimpleView, SingleObjectListView from .classes import SearchModel from .forms import SearchForm, AdvancedSearchForm +from .mixins import SearchModelMixin from .settings import setting_limit logger = logging.getLogger(__name__) -class ResultsView(SingleObjectListView): +class ResultsView(SearchModelMixin, SingleObjectListView): def get_extra_context(self): context = { 'hide_links': True, @@ -48,11 +49,8 @@ class ResultsView(SingleObjectListView): return queryset - def get_search_model(self): - return SearchModel.get(self.kwargs['search_model']) - -class SearchView(SimpleView): +class SearchView(SearchModelMixin, SimpleView): template_name = 'appearance/generic_form.html' title = _('Search') @@ -60,7 +58,9 @@ class SearchView(SimpleView): self.search_model = self.get_search_model() return { 'form': self.get_form(), - 'form_action': reverse('search:results', args=(self.search_model.get_full_name(),)), + 'form_action': reverse( + 'search:results', args=(self.search_model.get_full_name(),) + ), 'search_model': self.search_model, 'submit_icon': 'fa fa-search', 'submit_label': _('Search'), @@ -75,9 +75,6 @@ class SearchView(SimpleView): else: return SearchForm() - def get_search_model(self): - return SearchModel.get(self.kwargs['search_model']) - class AdvancedSearchView(SearchView): title = _('Advanced search') diff --git a/requirements/base.txt b/requirements/base.txt index 529260ad08..07bf502cdd 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -17,7 +17,7 @@ django-pure-pagination==0.3.0 django-model-utils==2.4 django-mptt==0.8.0 django-qsstats-magic==0.7.2 -django-rest-swagger==0.3.4 +django-rest-swagger==0.3.10 django-stronghold==0.2.7 django-suit==0.2.16 django-widget-tweaks==1.4.1 From 5193009447bccd6a1b9333583f4092af86b07ca3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 28 Oct 2016 03:04:02 -0400 Subject: [PATCH 007/119] Update history --- HISTORY.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/HISTORY.rst b/HISTORY.rst index e23a871fd3..2b038f68ad 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,9 @@ +2.2 (2016-XX-XX) +================ +- Remove the installation app +- Add support for document page search +- Remove recent searches feature + 2.1.4 (2016-XX-XX) ================== - Add missing link to the 2.1.3 release notes in the index file. From 5c9a34ab5e146d4b076b55dd4655d72dc0784030 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 28 Oct 2016 03:06:29 -0400 Subject: [PATCH 008/119] PEP8 cleanups --- mayan/apps/dynamic_search/api_views.py | 8 ++------ .../dynamic_search/migrations/0002_auto_20150920_0202.py | 5 ++++- mayan/apps/dynamic_search/views.py | 8 ++------ 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/mayan/apps/dynamic_search/api_views.py b/mayan/apps/dynamic_search/api_views.py index 876aaf9aec..a592a411c4 100644 --- a/mayan/apps/dynamic_search/api_views.py +++ b/mayan/apps/dynamic_search/api_views.py @@ -1,13 +1,10 @@ from __future__ import unicode_literals -from django.http import Http404, HttpResponseRedirect - from rest_framework import generics from rest_framework.exceptions import ParseError from rest_api.filters import MayanObjectPermissionsFilter -from .classes import SearchModel from .mixins import SearchModelMixin @@ -29,7 +26,6 @@ class APISearchView(SearchModelMixin, generics.ListAPIView): description: Term that will be used for the search. """ - filter_backends = (MayanObjectPermissionsFilter,) def get_queryset(self): @@ -85,9 +81,9 @@ class APIAdvancedSearchView(SearchModelMixin, generics.ListAPIView): } if self.request.GET.get('_match_all', 'off') == 'on': - global_and_search=True + global_and_search = True else: - global_and_search=False + global_and_search = False try: queryset, ids, timedelta = self.search_model.search( diff --git a/mayan/apps/dynamic_search/migrations/0002_auto_20150920_0202.py b/mayan/apps/dynamic_search/migrations/0002_auto_20150920_0202.py index 9a8c11294b..9822bce45d 100644 --- a/mayan/apps/dynamic_search/migrations/0002_auto_20150920_0202.py +++ b/mayan/apps/dynamic_search/migrations/0002_auto_20150920_0202.py @@ -15,7 +15,10 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='recentsearch', name='user', - field=models.ForeignKey(editable=False, to=settings.AUTH_USER_MODEL, verbose_name='User'), + field=models.ForeignKey( + editable=False, to=settings.AUTH_USER_MODEL, + verbose_name='User' + ), preserve_default=True, ), ] diff --git a/mayan/apps/dynamic_search/views.py b/mayan/apps/dynamic_search/views.py index 41838b9be6..153e667efe 100644 --- a/mayan/apps/dynamic_search/views.py +++ b/mayan/apps/dynamic_search/views.py @@ -1,17 +1,13 @@ from __future__ import unicode_literals import logging -import urlparse -from django.conf import settings from django.core.urlresolvers import reverse -from django.http import Http404, HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ from django.views.generic.base import RedirectView from common.generics import SimpleView, SingleObjectListView -from .classes import SearchModel from .forms import SearchForm, AdvancedSearchForm from .mixins import SearchModelMixin from .settings import setting_limit @@ -38,9 +34,9 @@ class ResultsView(SearchModelMixin, SingleObjectListView): # the template with the extra_context if self.request.GET.get('_match_all', 'off') == 'on': - global_and_search=True + global_and_search = True else: - global_and_search=False + global_and_search = False queryset, ids, timedelta = self.search_model.search( query_string=self.request.GET, user=self.request.user, From e556c161178e2367b6ed400fb92299c3029f5e3e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 28 Oct 2016 03:07:45 -0400 Subject: [PATCH 009/119] Add migration to remove recent search data. --- .../migrations/0003_auto_20161028_0707.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 mayan/apps/dynamic_search/migrations/0003_auto_20161028_0707.py diff --git a/mayan/apps/dynamic_search/migrations/0003_auto_20161028_0707.py b/mayan/apps/dynamic_search/migrations/0003_auto_20161028_0707.py new file mode 100644 index 0000000000..41d34f3e20 --- /dev/null +++ b/mayan/apps/dynamic_search/migrations/0003_auto_20161028_0707.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('dynamic_search', '0002_auto_20150920_0202'), + ] + + operations = [ + migrations.RemoveField( + model_name='recentsearch', + name='user', + ), + migrations.DeleteModel( + name='RecentSearch', + ), + ] From 6b6a2380390a3f9161e61b3c1281feebe1c48ce9 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 29 Oct 2016 15:17:22 -0400 Subject: [PATCH 010/119] Add safety check Python package --- Makefile | 7 +++++++ requirements/development.txt | 2 ++ 2 files changed, 9 insertions(+) diff --git a/Makefile b/Makefile index f2513c0b07..46e428f921 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,8 @@ help: @echo "runserver - Run the development server." @echo "shell_plus - Run the shell_plus command." + @echo "safety_check - Run a package safety check." + # Cleaning @@ -117,3 +119,8 @@ shell_plus: ./manage.py shell_plus --settings=mayan.settings.development +# Security + +safety_check: + safety check + diff --git a/requirements/development.txt b/requirements/development.txt index ac329961bb..9120510a77 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -8,6 +8,8 @@ django-rosetta==0.7.8 ipython==4.0.3 +safety==0.3.0 + transifex-client==0.11 wheel==0.26.0 From ed7955f8e77f9748fc61bf194b54486411323c7d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 29 Oct 2016 16:26:37 -0400 Subject: [PATCH 011/119] Update development requirements. --- requirements/development.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/requirements/development.txt b/requirements/development.txt index 256fc91de7..ac1ec7ff76 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -1,17 +1,17 @@ # requirements/development.txt -r common.txt -Werkzeug==0.11.3 +Werkzeug==0.11.11 -django-debug-toolbar==1.4 -django-extensions==1.6.1 -django-rosetta==0.7.8 +django-debug-toolbar==1.6 +django-extensions==1.7.4 +django-rosetta==0.7.12 -ipython==4.0.3 +ipython==5.1.0 safety==0.3.0 transifex-client==0.12.2 -wheel==0.26.0 +wheel==0.29.0 -r testing-base.txt From 1f648c5e865a13689e6860e99a7c9bce9686cfc0 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 29 Oct 2016 16:28:49 -0400 Subject: [PATCH 012/119] Add command to execute runserver_plus --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 46e428f921..b1db15d2af 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ help: @echo "release - Package (sdist and wheel) and upload a release." @echo "runserver - Run the development server." + @echo "runserver_plus - Run the Django extension's development server." @echo "shell_plus - Run the shell_plus command." @echo "safety_check - Run a package safety check." @@ -115,6 +116,10 @@ runserver: $(BROWSER) http://127.0.0.1:8000 ./manage.py runserver +runserver_plus: + $(BROWSER) http://127.0.0.1:8000 + ./manage.py runserver_plus --settings=mayan.settings.development + shell_plus: ./manage.py shell_plus --settings=mayan.settings.development From 27943dca8c6ed76a265f87051e183c6a03162259 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 29 Oct 2016 17:05:55 -0400 Subject: [PATCH 013/119] Update project requirements. --- requirements/base.txt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 07bf502cdd..c2d398123d 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,37 +1,37 @@ -Pillow==3.1.0 -PyYAML==3.11 +Pillow==3.4.2 +PyYAML==3.12 -celery==3.1.19 +celery==3.1.24 cssmin==0.2.0 -django-activity-stream==0.6.0 +django-activity-stream==0.6.3 django-autoadmin==1.1.1 django-celery==3.1.17 -django-colorful==1.1.0 -django-compressor==2.0 -django-cors-headers==1.1.0 +django-colorful==1.2 +django-compressor==2.1 +django-cors-headers==1.2.2 django-downloadview==1.9 django-filetransfers==0.1.0 django-formtools==1.0 django-pure-pagination==0.3.0 -django-model-utils==2.4 -django-mptt==0.8.0 +django-model-utils==2.6 +django-mptt==0.8.6 django-qsstats-magic==0.7.2 django-rest-swagger==0.3.10 -django-stronghold==0.2.7 -django-suit==0.2.16 +django-stronghold==0.2.8 +django-suit==0.2.21 django-widget-tweaks==1.4.1 djangorestframework==3.3.2 djangorestframework-recursive==0.1.1 -fusepy==2.0.2 +fusepy==2.0.4 pdfminer==20140328 -pycountry==1.19 +pycountry==1.20 pytesseract==0.1.6 -python-dateutil==2.4.2 +python-dateutil==2.5.3 python-gnupg==0.3.9 -python-magic==0.4.10 -pytz==2015.4 +python-magic==0.4.12 +pytz==2016.7 sh==1.11 From 52b2ae3c847f520a8d97907493861123faccd26f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 29 Oct 2016 17:06:03 -0400 Subject: [PATCH 014/119] Update documentation requirements. --- requirements/documentation.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/documentation.txt b/requirements/documentation.txt index 051975417f..4405b68b6a 100644 --- a/requirements/documentation.txt +++ b/requirements/documentation.txt @@ -1,4 +1,4 @@ -Sphinx==1.3.4 +Sphinx==1.4.8 sphinx-autobuild==0.6.0 sphinxcontrib-blockdiag==1.5.5 From aca04919413066c0e4bf2f8762c2d524293728eb Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 29 Oct 2016 17:06:14 -0400 Subject: [PATCH 015/119] Update testing requirements. --- requirements/testing-base.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/testing-base.txt b/requirements/testing-base.txt index 48f9064c42..340fe4de44 100644 --- a/requirements/testing-base.txt +++ b/requirements/testing-base.txt @@ -1,7 +1,7 @@ codecov==1.4.1 coverage==3.7.1 coveralls==0.5 -django-test-without-migrations==0.2 +django-test-without-migrations==0.4 mock==2.0.0 -tox==2.1.1 -psutil==4.3.0 +tox==2.4.1 +psutil==4.4.2 From 24ef702e9cfec8235a9b9f4b7b398653ee17605f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 30 Oct 2016 02:46:36 -0400 Subject: [PATCH 016/119] Update some direct model importing to use Django's apps.get_model instead. --- mayan/apps/acls/links.py | 4 +++- mayan/apps/converter/links.py | 4 +++- mayan/apps/document_states/handlers.py | 6 ++++-- mayan/apps/documents/apps.py | 3 +-- mayan/apps/dynamic_search/classes.py | 5 ++++- mayan/apps/events/apps.py | 4 ++-- mayan/apps/events/links.py | 6 +++++- mayan/apps/ocr/handlers.py | 6 ++++-- mayan/apps/sources/handlers.py | 18 ++++++++++++------ mayan/apps/sources/links.py | 6 +++++- mayan/apps/statistics/classes.py | 10 ++++++++-- mayan/apps/tags/widgets.py | 6 +++++- mayan/apps/user_management/apps.py | 7 ++++--- 13 files changed, 60 insertions(+), 25 deletions(-) diff --git a/mayan/apps/acls/links.py b/mayan/apps/acls/links.py index 0a40753e8a..c4264d4d07 100644 --- a/mayan/apps/acls/links.py +++ b/mayan/apps/acls/links.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.contrib.contenttypes.models import ContentType +from django.apps import apps from django.utils.translation import ugettext_lazy as _ from navigation import Link @@ -10,6 +10,8 @@ from .permissions import permission_acl_view, permission_acl_edit def get_kwargs_factory(variable_name): def get_kwargs(context): + ContentType = apps.get_model(app_label='django', model_name='ContentType') + content_type = ContentType.objects.get_for_model( context[variable_name] ) diff --git a/mayan/apps/converter/links.py b/mayan/apps/converter/links.py index 7784e5fb9b..a2f04e214f 100644 --- a/mayan/apps/converter/links.py +++ b/mayan/apps/converter/links.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.contrib.contenttypes.models import ContentType +from django.apps import apps from django.utils.translation import ugettext_lazy as _ from navigation import Link @@ -13,6 +13,8 @@ from .permissions import ( def get_kwargs_factory(variable_name): def get_kwargs(context): + ContentType = apps.get_model(app_label='django', model_name='ContentType') + content_type = ContentType.objects.get_for_model( context[variable_name] ) diff --git a/mayan/apps/document_states/handlers.py b/mayan/apps/document_states/handlers.py index e97fdcfed4..293d6a859c 100644 --- a/mayan/apps/document_states/handlers.py +++ b/mayan/apps/document_states/handlers.py @@ -1,10 +1,12 @@ from __future__ import unicode_literals -from django.db.models import get_model +from django.apps import apps def launch_workflow(sender, instance, created, **kwargs): - Workflow = get_model('document_states', 'Workflow') + Workflow = apps.get_model( + app_label='document_states', model_name='Workflow' + ) if created: Workflow.objects.launch_for(instance) diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 93d7b73113..e0c980cc8d 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -6,8 +6,6 @@ from kombu import Exchange, Queue from django.utils.translation import ugettext_lazy as _ -from actstream import registry - from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view @@ -85,6 +83,7 @@ class DocumentsApp(MayanAppConfig): def ready(self): super(DocumentsApp, self).ready() + from actstream import registry APIEndPoint(app=self, version_string='1') diff --git a/mayan/apps/dynamic_search/classes.py b/mayan/apps/dynamic_search/classes.py index 0999a59a43..aa3b03b122 100644 --- a/mayan/apps/dynamic_search/classes.py +++ b/mayan/apps/dynamic_search/classes.py @@ -10,7 +10,6 @@ from django.db.models import Q from django.utils.module_loading import import_string from django.utils.translation import ugettext as _ -from acls.models import AccessControlList from permissions import Permission from .settings import setting_limit @@ -125,6 +124,10 @@ class SearchModel(object): ] def search(self, query_string, user, global_and_search=False): + AccessControlList = apps.get_model( + app_label='acls', model_name='AccessControlList' + ) + elapsed_time = 0 start_time = datetime.datetime.now() result_set = set() diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index 74a6ddc661..1c28b6bbb7 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -1,9 +1,8 @@ from __future__ import unicode_literals +from django.apps import apps from django.utils.translation import ugettext_lazy as _ -from actstream.models import Action - from common import MayanAppConfig, menu_tools from common.classes import Package @@ -20,6 +19,7 @@ class EventsApp(MayanAppConfig): def ready(self): super(EventsApp, self).ready() + Action = apps.get_model(app_label='actstream', model_name='Action') Package(label='django-activity-stream', license_text=''' Copyright (c) 2010-2015, Justin Quick diff --git a/mayan/apps/events/links.py b/mayan/apps/events/links.py index d85e733b0b..36317d365e 100644 --- a/mayan/apps/events/links.py +++ b/mayan/apps/events/links.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.contrib.contenttypes.models import ContentType +from django.apps import apps from django.utils.translation import ugettext_lazy as _ from navigation import Link @@ -10,6 +10,10 @@ from .permissions import permission_events_view def get_kwargs_factory(variable_name): def get_kwargs(context): + ContentType = apps.get_model( + app_label='django', model_name='ContentType' + ) + content_type = ContentType.objects.get_for_model( context[variable_name] ) diff --git a/mayan/apps/ocr/handlers.py b/mayan/apps/ocr/handlers.py index 5e41ae6074..e8ea9fee90 100644 --- a/mayan/apps/ocr/handlers.py +++ b/mayan/apps/ocr/handlers.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import logging -from django.db.models import get_model +from django.apps import apps from .settings import setting_auto_ocr @@ -17,7 +17,9 @@ def post_version_upload_ocr(sender, instance, **kwargs): def initialize_new_ocr_settings(sender, instance, **kwargs): - DocumentTypeSettings = get_model('ocr', 'DocumentTypeSettings') + DocumentTypeSettings = apps.get_model( + app_label='ocr', model_name='DocumentTypeSettings' + ) if kwargs['created']: DocumentTypeSettings.objects.create( diff --git a/mayan/apps/sources/handlers.py b/mayan/apps/sources/handlers.py index 7204cab63e..59f09f0ca5 100644 --- a/mayan/apps/sources/handlers.py +++ b/mayan/apps/sources/handlers.py @@ -1,13 +1,15 @@ from __future__ import unicode_literals -from django.db.models import get_model +from django.apps import apps from django.utils.translation import ugettext_lazy as _ from .literals import SOURCE_UNCOMPRESS_CHOICE_ASK def create_default_document_source(sender, **kwargs): - WebFormSource = get_model('sources', 'WebFormSource') + WebFormSource = apps.get_model( + app_label='sources', model_name='WebFormSource' + ) if not WebFormSource.objects.count(): WebFormSource.objects.create( @@ -16,7 +18,9 @@ def create_default_document_source(sender, **kwargs): def copy_transformations_to_version(sender, **kwargs): - Transformation = get_model('converter', 'Transformation') + Transformation = apps.get_model( + app_label='converter', model_name='Transformation' + ) instance = kwargs['instance'] @@ -28,9 +32,11 @@ def copy_transformations_to_version(sender, **kwargs): def initialize_periodic_tasks(sender, **kwargs): - POP3Email = get_model('sources', 'POP3Email') - IMAPEmail = get_model('sources', 'IMAPEmail') - WatchFolderSource = get_model('sources', 'WatchFolderSource') + POP3Email = apps.get_model(app_label='sources', model_name='POP3Email') + IMAPEmail = apps.get_model(app_label='sources', model_name='IMAPEmail') + WatchFolderSource = apps.get_model( + app_label='sources', model_name='WatchFolderSource' + ) for source in POP3Email.objects.filter(enabled=True): source.save() diff --git a/mayan/apps/sources/links.py b/mayan/apps/sources/links.py index 926fada9ce..3ae238d1c5 100644 --- a/mayan/apps/sources/links.py +++ b/mayan/apps/sources/links.py @@ -1,8 +1,8 @@ from __future__ import absolute_import, unicode_literals +from django.apps import apps from django.utils.translation import ugettext_lazy as _ -from documents.models import NewVersionBlock from documents.permissions import ( permission_document_create, permission_document_new_version ) @@ -19,6 +19,10 @@ from .permissions import ( def document_new_version_not_blocked(context): + NewVersionBlock = apps.get_model( + app_label='documents', model_name='NewVersionBlock' + ) + return not NewVersionBlock.objects.is_blocked(context['object']) diff --git a/mayan/apps/statistics/classes.py b/mayan/apps/statistics/classes.py index 5bfc55a43d..31257e6a0e 100644 --- a/mayan/apps/statistics/classes.py +++ b/mayan/apps/statistics/classes.py @@ -2,8 +2,9 @@ from __future__ import unicode_literals import json +from django.apps import apps + from celery.schedules import crontab -from djcelery.models import PeriodicTask from mayan.celery import app @@ -43,7 +44,12 @@ class Statistic(object): @staticmethod def purge_schedules(): - from .models import StatisticResult + PeriodicTask = apps.get_model( + app_label='djcelery', model_name='PeriodicTask' + ) + StatisticResult = apps.get_model( + app_label='statistics', model_name='StatisticResult' + ) queryset = PeriodicTask.objects.filter(name__startswith='statistics.').exclude(name__in=Statistic.get_task_names()) diff --git a/mayan/apps/tags/widgets.py b/mayan/apps/tags/widgets.py index ccd104b102..ec1cf31ff4 100644 --- a/mayan/apps/tags/widgets.py +++ b/mayan/apps/tags/widgets.py @@ -1,10 +1,10 @@ from __future__ import absolute_import, unicode_literals +from django.apps import apps from django.core.exceptions import PermissionDenied from django.utils.html import escape from django.utils.safestring import mark_safe -from acls.models import AccessControlList from permissions import Permission from .permissions import permission_tag_view @@ -14,6 +14,10 @@ def widget_document_tags(document, user): """ A tag widget that displays the tags for the given document """ + AccessControlList = apps.get_model( + app_label='acls', model_name='AccessControlList' + ) + tags_template = [] tags = document.attached_tags().all() diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index 992b11dc9c..cc55d88ca8 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -1,11 +1,9 @@ from __future__ import unicode_literals +from django.apps import apps from django.contrib.auth import get_user_model -from django.contrib.auth.models import Group from django.utils.translation import ugettext_lazy as _ -from actstream import registry - from common import menu_multi_item, menu_object, menu_secondary, menu_setup from common.apps import MayanAppConfig from common.widgets import two_state_template @@ -23,6 +21,7 @@ from .links import ( def get_groups(): + Group = apps.get_model(app_label='auth', model_name='Group') return ','.join([group.name for group in Group.objects.all()]) @@ -38,7 +37,9 @@ class UserManagementApp(MayanAppConfig): def ready(self): super(UserManagementApp, self).ready() + from actstream import registry + Group = apps.get_model(app_label='auth', model_name='Group') User = get_user_model() APIEndPoint(app=self, version_string='1') From 6e3d99670c567e282930b0fd39bbb3107e75283b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 31 Oct 2016 01:00:35 -0400 Subject: [PATCH 017/119] Complete conversion of download views to CBV views using django-downloadview. This also removes dependency on the filetransfers library. --- HISTORY.rst | 1 + docs/releases/2.2.rst | 2 + mayan/apps/acls/links.py | 4 +- .../appearance/generic_list_subtemplate.html | 4 +- mayan/apps/common/apps.py | 30 -- mayan/apps/common/compressed_files.py | 2 +- mayan/apps/common/generics.py | 3 +- .../management/commands/initialsetup.py | 13 +- mayan/apps/common/mixins.py | 12 +- mayan/apps/common/tests/decorators.py | 8 +- mayan/apps/common/tests/mixins.py | 2 +- mayan/apps/common/tests/test_views.py | 1 - mayan/apps/converter/links.py | 4 +- mayan/apps/documents/api_views.py | 38 +- mayan/apps/documents/apps.py | 3 +- mayan/apps/documents/links.py | 6 +- mayan/apps/documents/models.py | 7 +- mayan/apps/documents/tests/test_api.py | 35 +- mayan/apps/documents/tests/test_events.py | 21 +- mayan/apps/documents/tests/test_links.py | 2 +- mayan/apps/documents/tests/test_models.py | 2 +- mayan/apps/documents/tests/test_views.py | 131 ++++--- mayan/apps/documents/urls.py | 26 +- mayan/apps/documents/views.py | 333 ++++++++++-------- mayan/apps/events/links.py | 2 +- mayan/apps/events/tests/test_views.py | 1 - mayan/apps/motd/migrations/0001_initial.py | 37 +- .../migrations/0002_auto_20160313_0340.py | 8 +- .../migrations/0005_auto_20160510_0025.py | 22 +- mayan/apps/motd/urls.py | 4 +- mayan/apps/ocr/apps.py | 4 - mayan/apps/ocr/parsers.py | 1 - mayan/apps/ocr/tests/test_parsers.py | 3 - mayan/apps/statistics/tests/test_views.py | 1 - .../storage/backends/compressedstorage.py | 2 +- mayan/settings/base.py | 1 - requirements/base.txt | 1 - 37 files changed, 437 insertions(+), 340 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 06d2ab5682..c8125849b5 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,7 @@ - Remove the installation app - Add support for document page search - Remove recent searches feature +- Remove dependency on the django-filetransfer library 2.1.4 (2016-10-28) ================== diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index f6f92f4ddd..ca6deb05e9 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -13,6 +13,7 @@ Other changes - Remove the installation app - Add support for page search - Remove recent searches feature +- Remove dependency on the django-filetransfer library Removals -------- @@ -43,6 +44,7 @@ existing installation. Next upgrade/add the new requirements:: + $ pip uninstall -y django-filetransfers $ pip install --upgrade -r requirements.txt Common steps diff --git a/mayan/apps/acls/links.py b/mayan/apps/acls/links.py index c4264d4d07..192a9c89d1 100644 --- a/mayan/apps/acls/links.py +++ b/mayan/apps/acls/links.py @@ -10,7 +10,9 @@ from .permissions import permission_acl_view, permission_acl_edit def get_kwargs_factory(variable_name): def get_kwargs(context): - ContentType = apps.get_model(app_label='django', model_name='ContentType') + ContentType = apps.get_model( + app_label='contenttypes', model_name='ContentType' + ) content_type = ContentType.objects.get_for_model( context[variable_name] diff --git a/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html b/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html index bf4ec5087b..00a734328e 100644 --- a/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html +++ b/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html @@ -23,7 +23,9 @@
{% if object_list %} - {% get_multi_item_links_form object_list %} + {% if not hide_multi_item_actions %} + {% get_multi_item_links_form object_list %} + {% endif %} {% if multi_item_actions %}
{{ multi_item_form }} diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index 457ecc2073..793a204d80 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -482,36 +482,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ''') - Package(label='django-filetransfers', license_text=''' -Copyright (c) Waldemar Kornewald, Thomas Wanschik, and all contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of All Buttons Pressed nor - the names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - Package(label='django-pure-pagination', license_text=''' Copyright (c) James Pacileo and contributors. All rights reserved. diff --git a/mayan/apps/common/compressed_files.py b/mayan/apps/common/compressed_files.py index 5fc80e2998..1e7bfb3914 100644 --- a/mayan/apps/common/compressed_files.py +++ b/mayan/apps/common/compressed_files.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import zipfile try: - import zlib + import zlib # NOQA COMPRESSION = zipfile.ZIP_DEFLATED except: COMPRESSION = zipfile.ZIP_STORED diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index d79cfb145d..5feec9e02d 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -14,8 +14,7 @@ from django.views.generic.edit import ( ) from django.views.generic.list import ListView -from django_downloadview import VirtualDownloadView -from django_downloadview import VirtualFile +from django_downloadview import VirtualDownloadView, VirtualFile from pure_pagination.mixins import PaginationMixin from .forms import ChoiceForm diff --git a/mayan/apps/common/management/commands/initialsetup.py b/mayan/apps/common/management/commands/initialsetup.py index 13ddb77745..36f0ad9a68 100644 --- a/mayan/apps/common/management/commands/initialsetup.py +++ b/mayan/apps/common/management/commands/initialsetup.py @@ -12,9 +12,16 @@ class Command(management.BaseCommand): def handle(self, *args, **options): management.call_command('createsettings', interactive=False) try: - result = management.call_command('migrate', interactive=False) - except OperationalError as exception: - self.stderr.write(self.style.NOTICE('Unable to migrate the database. The initialsetup command is to be used only on new installations. To upgrade existing installations use the performupgrade command.')) + management.call_command('migrate', interactive=False) + except OperationalError: + self.stderr.write( + self.style.NOTICE( + 'Unable to migrate the database. The initialsetup ' + 'command is to be used only on new installations. To ' + 'upgrade existing installations use the performupgrade ' + 'command.' + ) + ) raise management.call_command('createautoadmin', interactive=False) post_initial_setup.send(sender=self) diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index 34b89ff736..a4cf0a42d2 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -159,12 +159,6 @@ class RedirectionMixin(object): post_action_redirect = None action_cancel_redirect = None - def get_post_action_redirect(self): - return self.post_action_redirect - - def get_action_cancel_redirect(self): - return self.action_cancel_redirect - def dispatch(self, request, *args, **kwargs): post_action_redirect = self.get_post_action_redirect() action_cancel_redirect = self.get_action_cancel_redirect() @@ -188,6 +182,9 @@ class RedirectionMixin(object): RedirectionMixin, self ).dispatch(request, *args, **kwargs) + def get_action_cancel_redirect(self): + return self.action_cancel_redirect + def get_context_data(self, **kwargs): context = super(RedirectionMixin, self).get_context_data(**kwargs) context.update( @@ -199,6 +196,9 @@ class RedirectionMixin(object): return context + def get_post_action_redirect(self): + return self.post_action_redirect + def get_success_url(self): return self.next_url or self.previous_url diff --git a/mayan/apps/common/tests/decorators.py b/mayan/apps/common/tests/decorators.py index 9c1b5b8186..264e5cc7cf 100644 --- a/mayan/apps/common/tests/decorators.py +++ b/mayan/apps/common/tests/decorators.py @@ -1,5 +1,5 @@ def skip_file_descriptor_check(func): - def func_wrapper(item): - item._skip_file_descriptor_test = True - return func(item) - return func_wrapper + def func_wrapper(item): + item._skip_file_descriptor_test = True + return func(item) + return func_wrapper diff --git a/mayan/apps/common/tests/mixins.py b/mayan/apps/common/tests/mixins.py index 9140288b49..d5bfaf2e31 100644 --- a/mayan/apps/common/tests/mixins.py +++ b/mayan/apps/common/tests/mixins.py @@ -66,7 +66,7 @@ class TempfileCheckMixin(object): msg='Orphan temporary file. The number of temporary files and/or ' 'directories at the start and at the end of the test are not the ' 'same. Orphan entries: {}'.format( - ','.join(final_temporary_items-self._temporary_items) + ','.join(final_temporary_items - self._temporary_items) ) ) super(TempfileCheckMixin, self).tearDown() diff --git a/mayan/apps/common/tests/test_views.py b/mayan/apps/common/tests/test_views.py index 9541d06436..6fa95a8721 100644 --- a/mayan/apps/common/tests/test_views.py +++ b/mayan/apps/common/tests/test_views.py @@ -6,7 +6,6 @@ from django.contrib.auth.models import Group from django.core.urlresolvers import clear_url_caches, reverse from django.http import HttpResponse from django.template import Context, Template -from django.test import TestCase from permissions import Permission from permissions.models import Role diff --git a/mayan/apps/converter/links.py b/mayan/apps/converter/links.py index a2f04e214f..feaa19dcd6 100644 --- a/mayan/apps/converter/links.py +++ b/mayan/apps/converter/links.py @@ -13,7 +13,9 @@ from .permissions import ( def get_kwargs_factory(variable_name): def get_kwargs(context): - ContentType = apps.get_model(app_label='django', model_name='ContentType') + ContentType = apps.get_model( + app_label='contenttypes', model_name='ContentType' + ) content_type = ContentType.objects.get_for_model( context[variable_name] diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index c33ecfd8e7..b93e386597 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -5,7 +5,6 @@ import logging from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 -from filetransfers.api import serve_file from rest_framework import generics, status from rest_framework.response import Response @@ -87,7 +86,16 @@ class APIDeletedDocumentRestoreView(generics.GenericAPIView): return Response(status=status.HTTP_200_OK) -class APIDocumentDownloadView(generics.RetrieveAPIView): +############## +from django_downloadview import VirtualDownloadView +from django_downloadview import VirtualFile +from django_downloadview import DownloadMixin + +#class SingleObjectDownloadView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, VirtualDownloadView, SingleObjectMixin): +# VirtualFile = VirtualFile + + +class APIDocumentDownloadView(DownloadMixin, generics.RetrieveAPIView): """ Download the latest version of a document. --- @@ -105,17 +113,15 @@ class APIDocumentDownloadView(generics.RetrieveAPIView): permission_classes = (MayanPermission,) queryset = Document.objects.all() + def get_file(self): + instance = self.get_object() + return VirtualFile(instance.latest_version.file, name=instance.label) + def get_serializer_class(self): return None def retrieve(self, request, *args, **kwargs): - instance = self.get_object() - return serve_file( - request, - instance.latest_version.file, - save_as='"%s"' % instance.label, - content_type=instance.latest_version.mimetype if instance.latest_version.mimetype else 'application/octet-stream' - ) + return self.render_to_response() class APIDocumentListView(generics.ListCreateAPIView): @@ -146,7 +152,7 @@ class APIDocumentListView(generics.ListCreateAPIView): return super(APIDocumentListView, self).post(*args, **kwargs) -class APIDocumentVersionDownloadView(generics.RetrieveAPIView): +class APIDocumentVersionDownloadView(DownloadMixin, generics.RetrieveAPIView): """ Download a document version. --- @@ -164,17 +170,15 @@ class APIDocumentVersionDownloadView(generics.RetrieveAPIView): permission_classes = (MayanPermission,) queryset = DocumentVersion.objects.all() + def get_file(self): + instance = self.get_object() + return VirtualFile(instance.file, name=unicode(instance)) + def get_serializer_class(self): return None def retrieve(self, request, *args, **kwargs): - instance = self.get_object() - return serve_file( - request, - instance.file, - save_as='"%s"' % instance.document.label, - content_type=instance.mimetype if instance.mimetype else 'application/octet-stream' - ) + return self.render_to_response() class APIDocumentView(generics.RetrieveUpdateDestroyAPIView): diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index e0c980cc8d..87bae4836d 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -66,7 +66,8 @@ from .permissions import ( permission_document_trash, permission_document_version_revert, permission_document_view ) -from .search import document_search, document_page_search +# Just import to initialize the search models +from .search import document_search, document_page_search # NOQA from .settings import setting_thumbnail_size from .statistics import ( new_documents_per_month, new_document_pages_per_month, diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py index 6b64e5fb2b..0b185627ce 100644 --- a/mayan/apps/documents/links.py +++ b/mayan/apps/documents/links.py @@ -85,7 +85,7 @@ link_document_document_type_edit = Link( ) link_document_download = Link( permissions=(permission_document_download,), text=_('Download'), - view='documents:document_download', args='resolved_object.id' + view='documents:document_download_form', args='resolved_object.id' ) link_document_print = Link( permissions=(permission_document_print,), text=_('Print'), @@ -118,7 +118,7 @@ link_document_multiple_document_type_edit = Link( view='documents:document_multiple_document_type_edit' ) link_document_multiple_download = Link( - text=_('Download'), view='documents:document_multiple_download' + text=_('Download'), view='documents:document_multiple_download_form' ) link_document_multiple_update_page_count = Link( text=_('Recalculate page count'), @@ -129,7 +129,7 @@ link_document_multiple_restore = Link( ) link_document_version_download = Link( args='resolved_object.pk', permissions=(permission_document_download,), - text=_('Download version'), view='documents:document_version_download' + text=_('Download version'), view='documents:document_version_download_form' ) # Views diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index 0ca8bf79af..d0b80dc50d 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -46,11 +46,14 @@ from .signals import ( post_document_created, post_document_type_change, post_version_upload ) -# document image cache name hash function -HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() logger = logging.getLogger(__name__) +# document image cache name hash function +def HASH_FUNCTION(data): + return hashlib.sha256(data).hexdigest() + + def UUID_FUNCTION(*args, **kwargs): return unicode(uuid.uuid4()) diff --git a/mayan/apps/documents/tests/test_api.py b/mayan/apps/documents/tests/test_api.py index 579104e5a8..2fd1a1edde 100644 --- a/mayan/apps/documents/tests/test_api.py +++ b/mayan/apps/documents/tests/test_api.py @@ -7,11 +7,11 @@ import time from json import loads from django.contrib.auth import get_user_model - from django.core.urlresolvers import reverse from django.test import override_settings from django.utils.six import BytesIO +from django_downloadview import assert_download_response from rest_framework import status from rest_framework.test import APITestCase @@ -21,7 +21,7 @@ from user_management.tests.literals import ( from .literals import ( TEST_DOCUMENT_FILENAME, TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE, - TEST_SMALL_DOCUMENT_CHECKSUM, TEST_SMALL_DOCUMENT_PATH, + TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH, ) from ..models import Document, DocumentType, HASH_FUNCTION @@ -263,14 +263,13 @@ class DocumentAPITestCase(APITestCase): 'rest_api:document-download', args=(document.pk,) ) ) - buf = BytesIO() - buf.write(response.content) - self.assertEqual( - HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM - ) - - del(buf) + with document.open() as file_object: + assert_download_response( + self, response, content=file_object.read(), + basename=TEST_SMALL_DOCUMENT_FILENAME, + mime_type='{}; charset=utf-8'.format(document.file_mimetype) + ) def test_document_version_download(self): with open(TEST_SMALL_DOCUMENT_PATH) as file_object: @@ -278,20 +277,22 @@ class DocumentAPITestCase(APITestCase): file_object=file_object, ) + latest_version = document.latest_version response = self.client.get( reverse( 'rest_api:documentversion-download', - args=(document.latest_version.pk,) + args=(latest_version.pk,) ) ) - buf = BytesIO() - buf.write(response.content) - self.assertEqual( - HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM - ) - - del(buf) + with latest_version.open() as file_object: + assert_download_response( + self, response, content=file_object.read(), + basename='{} - {}'.format( + TEST_SMALL_DOCUMENT_FILENAME, + latest_version.timestamp + ), mime_type='application/octet-stream; charset=utf-8' + ) # TODO: def test_document_set_document_type(self): # pass diff --git a/mayan/apps/documents/tests/test_events.py b/mayan/apps/documents/tests/test_events.py index 224b0435ed..09e59364b5 100644 --- a/mayan/apps/documents/tests/test_events.py +++ b/mayan/apps/documents/tests/test_events.py @@ -3,8 +3,8 @@ from __future__ import unicode_literals from actstream.models import Action +from django_downloadview import assert_download_response -from common.tests import skip_file_descriptor_check from user_management.tests.literals import ( TEST_USER_PASSWORD, TEST_USER_USERNAME ) @@ -14,7 +14,6 @@ from ..permissions import ( permission_document_download, permission_document_view ) - from .test_views import GenericDocumentViewTestCase @@ -32,17 +31,14 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase): Action.objects.all().delete() - response = self.post( + response = self.get( 'documents:document_download', args=(self.document.pk,) ) - self.assertEqual(response.status_code, 302) + self.assertEqual(response.status_code, 403) self.assertEqual(list(Action.objects.any(obj=self.document)), []) - @skip_file_descriptor_check def test_document_download_event_with_permissions(self): - # TODO: Skip this test's file descriptor check until it gets migrate - # SingleObjectDownloadView CBV self.login( username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD ) @@ -53,12 +49,19 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase): permission_document_download.stored_permission ) - self.expected_content_type = 'image/png' + self.expected_content_type = 'image/png; charset=utf-8' - self.post( + response = self.get( 'documents:document_download', args=(self.document.pk,), ) + # Download the file to close the file descriptor + with self.document.open() as file_object: + assert_download_response( + self, response, content=file_object.read(), + mime_type=self.document.file_mimetype + ) + event = Action.objects.any(obj=self.document).first() self.assertEqual(event.verb, event_document_download.name) diff --git a/mayan/apps/documents/tests/test_links.py b/mayan/apps/documents/tests/test_links.py index 3cf8e04445..f13a97970b 100644 --- a/mayan/apps/documents/tests/test_links.py +++ b/mayan/apps/documents/tests/test_links.py @@ -94,7 +94,7 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase): self.assertEqual( resolved_link.url, reverse( - 'documents:document_version_download', + 'documents:document_version_download_form', args=(self.document.latest_version.pk,) ) ) diff --git a/mayan/apps/documents/tests/test_models.py b/mayan/apps/documents/tests/test_models.py index ff9983b656..a272d18b0b 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -4,7 +4,7 @@ from datetime import timedelta import time from common.tests import BaseTestCase -from django.test import TestCase, override_settings +from django.test import override_settings from ..exceptions import NewDocumentVersionNotAllowed from ..literals import STUB_EXPIRATION_INTERVAL diff --git a/mayan/apps/documents/tests/test_views.py b/mayan/apps/documents/tests/test_views.py index 4645de3501..98ae7dc534 100644 --- a/mayan/apps/documents/tests/test_views.py +++ b/mayan/apps/documents/tests/test_views.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals from django.contrib.contenttypes.models import ContentType from django.test import override_settings -from django.utils.six import BytesIO -from common.tests import skip_file_descriptor_check +from django_downloadview import assert_download_response + from common.tests.test_views import GenericViewTestCase from converter.models import Transformation from converter.permissions import permission_transformation_delete @@ -15,9 +15,7 @@ from user_management.tests.literals import ( ) from ..literals import DEFAULT_DELETE_PERIOD, DEFAULT_DELETE_TIME_UNIT -from ..models import ( - DeletedDocument, Document, DocumentType, HASH_FUNCTION -) +from ..models import DeletedDocument, Document, DocumentType from ..permissions import ( permission_document_create, permission_document_delete, permission_document_download, permission_document_properties_edit, @@ -30,7 +28,7 @@ from ..permissions import ( from .literals import ( TEST_DOCUMENT_TYPE, TEST_DOCUMENT_TYPE_QUICK_LABEL, - TEST_SMALL_DOCUMENT_CHECKSUM, TEST_SMALL_DOCUMENT_PATH + TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH ) @@ -226,113 +224,113 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): Document.objects.first().document_type, document_type ) - @skip_file_descriptor_check - def test_document_download_user_view(self): - # TODO: Skip this test's file descriptor check until it gets migrate - # SingleObjectDownloadView CBV - + def test_document_download_view_no_permission(self): self.login( username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD ) - self.assertEqual(Document.objects.count(), 1) - - response = self.post( + response = self.get( 'documents:document_download', args=(self.document.pk,) ) - self.assertEqual(response.status_code, 302) + self.assertEqual(response.status_code, 403) + + def test_document_download_view_with_permission(self): + self.login( + username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD + ) self.role.permissions.add( permission_document_download.stored_permission ) - # Set the expected_content_type for common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = self.document.file_mimetype + # Set the expected_content_type for + # common.tests.mixins.ContentTypeCheckMixin + self.expected_content_type = '{}; charset=utf-8'.format( + self.document.file_mimetype + ) - response = self.post( + response = self.get( 'documents:document_download', args=(self.document.pk,) ) self.assertEqual(response.status_code, 200) - buf = BytesIO() - buf.write(response.content) - - self.assertEqual( - HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM - ) - - del(buf) - - @skip_file_descriptor_check - def test_document_multiple_download_user_view(self): - # TODO: Skip this test's file descriptor check until it gets migrate - # SingleObjectDownloadView CBV + with self.document.open() as file_object: + assert_download_response( + self, response, content=file_object.read(), + basename=TEST_SMALL_DOCUMENT_FILENAME, + mime_type=self.document.file_mimetype + ) + def test_document_multiple_download_view_no_permission(self): self.login( username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD ) - self.assertEqual(Document.objects.count(), 1) - - response = self.post( + response = self.get( 'documents:document_multiple_download', data={'id_list': self.document.pk} ) - self.assertEqual(response.status_code, 302) + self.assertEqual(response.status_code, 403) + + def test_document_multiple_download_view_with_permission(self): + self.login( + username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD + ) self.role.permissions.add( permission_document_download.stored_permission ) - # Set the expected_content_type for common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = self.document.file_mimetype + # Set the expected_content_type for + # common.tests.mixins.ContentTypeCheckMixin + self.expected_content_type = '{}; charset=utf-8'.format( + self.document.file_mimetype + ) - response = self.post( + response = self.get( 'documents:document_multiple_download', data={'id_list': self.document.pk} ) self.assertEqual(response.status_code, 200) - buf = BytesIO() - buf.write(response.content) - - self.assertEqual( - HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM - ) - - del(buf) - - @skip_file_descriptor_check - def test_document_version_download_user_view(self): - # TODO: Skip this test's file descriptor check until it gets migrate - # SingleObjectDownloadView CBV + with self.document.open() as file_object: + assert_download_response( + self, response, content=file_object.read(), + basename=TEST_SMALL_DOCUMENT_FILENAME, + mime_type=self.document.file_mimetype + ) + def test_document_version_download_view_no_permission(self): self.login( username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD ) - self.assertEqual(Document.objects.count(), 1) - - response = self.post( + response = self.get( 'documents:document_version_download', args=( self.document.latest_version.pk, ) ) - self.assertEqual(response.status_code, 302) + self.assertEqual(response.status_code, 403) + + def test_document_version_download_view_with_permission(self): + self.login( + username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD + ) self.role.permissions.add( permission_document_download.stored_permission ) - # Set the expected_content_type for common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = self.document.file_mimetype + # Set the expected_content_type for + # common.tests.mixins.ContentTypeCheckMixin + self.expected_content_type = 'application/octet-stream; charset=utf-8' - response = self.post( + response = self.get( 'documents:document_version_download', args=( self.document.latest_version.pk, ) @@ -340,14 +338,14 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 200) - buf = BytesIO() - buf.write(response.content) - - self.assertEqual( - HASH_FUNCTION(buf.getvalue()), TEST_SMALL_DOCUMENT_CHECKSUM - ) - - del(buf) + with self.document.open() as file_object: + assert_download_response( + self, response, content=file_object.read(), + basename='{} - {}'.format( + TEST_SMALL_DOCUMENT_FILENAME, + self.document.latest_version.timestamp + ), mime_type='application/octet-stream; charset=utf-8' + ) def test_document_update_page_count_view_no_permission(self): self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD) @@ -380,7 +378,6 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertContains(response, text='queued', status_code=200) self.assertEqual(self.document.pages.count(), page_count) - def test_document_multiple_update_page_count_view_no_permission(self): self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD) diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index c7dfd59cfd..63af6b320d 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -15,7 +15,8 @@ from .api_views import ( from .settings import setting_print_size, setting_display_size from .views import ( ClearImageCacheView, DeletedDocumentDeleteView, - DeletedDocumentDeleteManyView, DeletedDocumentListView, DocumentEditView, + DeletedDocumentDeleteManyView, DeletedDocumentListView, + DocumentDownloadFormView, DocumentDownloadView, DocumentEditView, DocumentListView, DocumentPageView, DocumentPageListView, DocumentPageViewResetView, DocumentPreviewView, DocumentRestoreView, DocumentRestoreManyView, DocumentTrashView, DocumentTrashManyView, @@ -23,6 +24,7 @@ from .views import ( DocumentTypeDocumentListView, DocumentTypeFilenameCreateView, DocumentTypeFilenameDeleteView, DocumentTypeFilenameEditView, DocumentTypeFilenameListView, DocumentTypeListView, DocumentTypeEditView, + DocumentVersionDownloadFormView, DocumentVersionDownloadView, DocumentVersionListView, DocumentVersionRevertView, DocumentView, EmptyTrashCanView, RecentDocumentListView ) @@ -107,13 +109,20 @@ urlpatterns = patterns( 'size': setting_print_size.value }, 'document_display_print' ), - url( - r'^(?P\d+)/download/$', 'document_download', + r'^(?P\d+)/download/form/$', + DocumentDownloadFormView.as_view(), name='document_download_form' + ), + url( + r'^(?P\d+)/download/$', DocumentDownloadView.as_view(), name='document_download' ), url( - r'^multiple/download/$', 'document_multiple_download', + r'^multiple/download/form/$', DocumentDownloadFormView.as_view(), + name='document_multiple_download_form' + ), + url( + r'^multiple/download/$', DocumentDownloadView.as_view(), name='document_multiple_download' ), url( @@ -127,8 +136,13 @@ urlpatterns = patterns( name='document_version_list' ), url( - r'^document/version/(?P\d+)/download/$', - 'document_download', name='document_version_download' + r'^document/version/(?P\d+)/download/form/$', + DocumentVersionDownloadFormView.as_view(), + name='document_version_download_form' + ), + url( + r'^document/version/(?P\d+)/download/$', + DocumentVersionDownloadView.as_view(), name='document_version_download' ), url( r'^document/version/(?P\d+)/revert/$', diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 5b0fd94d57..384187d655 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -18,8 +18,9 @@ from django.views.generic import RedirectView from acls.models import AccessControlList from common.compressed_files import CompressedFile from common.generics import ( - ConfirmView, SimpleView, SingleObjectCreateView, SingleObjectDeleteView, - SingleObjectDetailView, SingleObjectEditView, SingleObjectListView + ConfirmView, FormView, SimpleView, SingleObjectCreateView, + SingleObjectDeleteView, SingleObjectDetailView, SingleObjectDownloadView, + SingleObjectEditView, SingleObjectListView ) from common.mixins import MultipleInstanceActionMixin from converter.literals import ( @@ -27,7 +28,6 @@ from converter.literals import ( ) from converter.models import Transformation from converter.permissions import permission_transformation_delete -from filetransfers.api import serve_file from permissions import Permission from .events import event_document_download, event_document_view @@ -36,7 +36,9 @@ from .forms import ( DocumentPropertiesForm, DocumentTypeSelectForm, DocumentTypeFilenameForm_create, PrintForm ) -from .literals import DOCUMENT_IMAGE_TASK_TIMEOUT, PAGE_RANGE_RANGE +from .literals import ( + DOCUMENT_IMAGE_TASK_TIMEOUT, PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME +) from .models import ( DeletedDocument, Document, DocumentType, DocumentPage, DocumentTypeFilename, DocumentVersion, RecentDocument @@ -771,154 +773,209 @@ def get_document_image(request, document_id, size=setting_preview_size.value): return HttpResponse(base64.b64decode(data.partition('base64,')[2]), content_type='image') -def document_download(request, document_id=None, document_id_list=None, document_version_pk=None): - previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) +class DocumentDownloadFormView(FormView): + form_class = DocumentDownloadForm + model = Document + multiple_download_view = 'documents:document_multiple_download' + single_download_view = 'documents:document_download' - if document_id: - documents = Document.objects.filter(pk=document_id) - elif document_id_list: - documents = Document.objects.filter(pk__in=document_id_list) - elif document_version_pk: - documents = Document.objects.filter( - pk=get_object_or_404( - DocumentVersion, pk=document_version_pk - ).document.pk + def get_document_queryset(self): + id_list = self.request.GET.get( + 'id_list', self.request.POST.get('id_list', '') ) - try: - Permission.check_permissions( - request.user, (permission_document_download,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_document_download, request.user, documents - ) + if not id_list: + id_list = self.kwargs['pk'] - if not documents: - messages.error( - request, _('Must provide at least one document or version.') - ) - return HttpResponseRedirect( - request.META.get( - 'HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL) - ) - ) + return self.model.objects.filter( + pk__in=id_list.split(',') + ).filter(is_stub=False) - if document_version_pk: - queryset = DocumentVersion.objects.filter(pk=document_version_pk) - else: - queryset = DocumentVersion.objects.filter( - pk__in=[document.latest_version.pk for document in documents] - ) - - subtemplates_list = [] - subtemplates_list.append( - { - 'name': 'appearance/generic_list_subtemplate.html', - 'context': { - 'title': _('Documents to be downloaded'), - 'object_list': queryset, - 'hide_link': True, - 'hide_object': True, - 'hide_links': True, - 'scrollable_content': True, - 'scrollable_content_height': '200px', - 'extra_columns': ( - {'name': _('Document'), 'attribute': 'document'}, - {'name': _('Date and time'), 'attribute': 'timestamp'}, - {'name': _('MIME type'), 'attribute': 'mimetype'}, - {'name': _('Encoding'), 'attribute': 'encoding'}, - ), + def get_extra_context(self): + subtemplates_list = [ + { + 'name': 'appearance/generic_list_subtemplate.html', + 'context': { + 'object_list': self.queryset, + 'hide_link': True, + 'hide_links': True, + 'hide_multi_item_actions': True, + } } + ] + + context = { + 'submit_label': _('Download'), + 'subtemplates_list': subtemplates_list, + 'title': _('Download documents'), } - ) - if request.method == 'POST': - form = DocumentDownloadForm(request.POST, queryset=queryset) - if form.is_valid(): - if form.cleaned_data['compressed'] or queryset.count() > 1: - try: - compressed_file = CompressedFile() - for document_version in queryset: - descriptor = document_version.open() - compressed_file.add_file( - descriptor, - arcname=document_version.document.label - ) - descriptor.close() - event_document_download.commit( - actor=request.user, - target=document_version.document - ) + if self.queryset.count() == 1: + context['object'] = self.queryset.first() - compressed_file.close() + return context - return serve_file( - request, - compressed_file.as_file( - form.cleaned_data['zip_filename'] - ), - save_as='"%s"' % form.cleaned_data['zip_filename'], - content_type='application/zip' - ) - except Exception as exception: - if settings.DEBUG: - raise - else: - messages.error(request, exception) - return HttpResponseRedirect( - request.META['HTTP_REFERER'] - ) + def get_form_kwargs(self): + kwargs = super(DocumentDownloadFormView, self).get_form_kwargs() + self.queryset = self.get_queryset() + kwargs.update({'queryset': self.queryset}) + return kwargs + + def form_valid(self, form): + querystring = urlencode( + { + 'compressed': form.cleaned_data['compressed'], + 'zip_filename': form.cleaned_data['zip_filename'], + 'id_list': ','.join( + map(str, self.queryset.values_list('pk', flat=True)) + ) + }, doseq=True + ) + + if self.queryset.count() > 1: + url = reverse(self.multiple_download_view) + else: + url = reverse( + self.single_download_view, args=(self.queryset.first().pk,) + ) + + return HttpResponseRedirect('{}?{}'.format(url, querystring)) + + def get_post_action_redirect(self): + return self.post_action_redirect + + def get_queryset(self): + queryset = self.get_document_queryset() + + try: + Permission.check_permissions( + self.request.user, (permission_document_download,) + ) + except PermissionDenied: + return AccessControlList.objects.filter_by_access( + permission_document_download, self.request.user, queryset + ) + else: + return queryset + + +class DocumentDownloadView(SingleObjectDownloadView): + model = Document + # Set to None to disable the .get_object call + object_permission = None + + @staticmethod + def commit_event(item, request): + if isinstance(item, Document): + event_document_download.commit( + actor=request.user, + target=item + ) + else: + # TODO: Improve by adding a document version download event + event_document_download.commit( + actor=request.user, + target=item.document + ) + + @staticmethod + def get_item_file(item): + if isinstance(item, Document): + return item.open() + else: + return item.file + + @staticmethod + def get_item_label(item): + if isinstance(item, Document): + return item.label + else: + return unicode(item) + + def get_document_queryset(self): + id_list = self.request.GET.get( + 'id_list', self.request.POST.get('id_list', '') + ) + + if not id_list: + id_list = self.kwargs['pk'] + + queryset = self.model.objects.filter(pk__in=id_list.split(',')) + + try: + Permission.check_permissions( + self.request.user, (permission_document_download,) + ) + except PermissionDenied: + return AccessControlList.objects.filter_by_access( + permission_document_download, self.request.user, queryset + ) + else: + return queryset + + def get_file(self): + queryset = self.get_document_queryset() + zip_filename = self.request.GET.get( + 'zip_filename', DEFAULT_ZIP_FILENAME + ) + + if self.request.GET.get('compressed') == 'True' or queryset.count() > 1: + compressed_file = CompressedFile() + for item in queryset: + descriptor = item.open() + compressed_file.add_file( + descriptor, + arcname=DocumentDownloadView.get_item_label(item=item) + ) + descriptor.close() + DocumentDownloadView.commit_event( + item=item, request=self.request + ) + + compressed_file.close() + + return DocumentDownloadView.VirtualFile( + compressed_file.as_file(zip_filename), + name=zip_filename + ) + else: + item = queryset.first() + if item: + DocumentDownloadView.commit_event( + item=item, request=self.request + ) else: - try: - # Test permissions and trigger exception - fd = queryset.first().open() - fd.close() - event_document_download.commit( - actor=request.user, target=queryset.first().document - ) - return serve_file( - request, - queryset.first().file, - save_as='"%s"' % queryset.first().document.label, - content_type=queryset.first().mimetype if queryset.first().mimetype else 'application/octet-stream' - ) - except Exception as exception: - if settings.DEBUG: - raise - else: - messages.error(request, exception) - return HttpResponseRedirect( - request.META['HTTP_REFERER'] - ) + raise PermissionDenied - else: - form = DocumentDownloadForm(queryset=queryset) - - context = { - 'form': form, - 'previous': previous, - 'submit_label': _('Download'), - 'subtemplates_list': subtemplates_list, - 'title': _('Download documents'), - } - - if queryset.count() == 1: - context['object'] = queryset.first().document - - return render_to_response( - 'appearance/generic_form.html', - context, - context_instance=RequestContext(request) - ) + return DocumentDownloadView.VirtualFile( + DocumentDownloadView.get_item_file(item=item), + name=DocumentDownloadView.get_item_label( + item=item + ) + ) -def document_multiple_download(request): - return document_download( - request, document_id_list=request.GET.get( - 'id_list', request.POST.get('id_list', '') - ).split(',') - ) +class DocumentVersionDownloadFormView(DocumentDownloadFormView): + model = DocumentVersion + multiple_download_view = None + single_download_view = 'documents:document_version_download' + + def get_document_queryset(self): + id_list = self.request.GET.get( + 'id_list', self.request.POST.get('id_list', '') + ) + + if not id_list: + id_list = self.kwargs['pk'] + + return self.model.objects.filter( + pk__in=id_list.split(',') + ) + + +class DocumentVersionDownloadView(DocumentDownloadView): + model = DocumentVersion + object_permission = permission_document_download def document_update_page_count(request, document_id=None, document_id_list=None): diff --git a/mayan/apps/events/links.py b/mayan/apps/events/links.py index 36317d365e..b8ea83d25c 100644 --- a/mayan/apps/events/links.py +++ b/mayan/apps/events/links.py @@ -11,7 +11,7 @@ from .permissions import permission_events_view def get_kwargs_factory(variable_name): def get_kwargs(context): ContentType = apps.get_model( - app_label='django', model_name='ContentType' + app_label='contenttypes', model_name='ContentType' ) content_type = ContentType.objects.get_for_model( diff --git a/mayan/apps/events/tests/test_views.py b/mayan/apps/events/tests/test_views.py index e136607b75..7be4003b80 100644 --- a/mayan/apps/events/tests/test_views.py +++ b/mayan/apps/events/tests/test_views.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib.contenttypes.models import ContentType -from acls.models import AccessControlList from documents.tests.test_views import GenericDocumentViewTestCase from user_management.tests import ( TEST_USER_USERNAME, TEST_USER_PASSWORD diff --git a/mayan/apps/motd/migrations/0001_initial.py b/mayan/apps/motd/migrations/0001_initial.py index 545f550f5d..d3dbfdea99 100644 --- a/mayan/apps/motd/migrations/0001_initial.py +++ b/mayan/apps/motd/migrations/0001_initial.py @@ -13,12 +13,37 @@ class Migration(migrations.Migration): migrations.CreateModel( name='MessageOfTheDay', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('label', models.CharField(max_length=32, verbose_name='Label')), - ('message', models.TextField(verbose_name='Message', blank=True)), - ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), - ('start_datetime', models.DateTimeField(verbose_name='Start date time', blank=True)), - ('end_datetime', models.DateTimeField(verbose_name='End date time', blank=True)), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'label', models.CharField( + max_length=32, verbose_name='Label' + ) + ), + ( + 'message', models.TextField( + verbose_name='Message', blank=True + ) + ), + ( + 'enabled', models.BooleanField( + default=True, verbose_name='Enabled' + ) + ), + ( + 'start_datetime', models.DateTimeField( + verbose_name='Start date time', blank=True + ) + ), + ( + 'end_datetime', models.DateTimeField( + verbose_name='End date time', blank=True + ) + ), ], options={ 'verbose_name': 'Message of the day', diff --git a/mayan/apps/motd/migrations/0002_auto_20160313_0340.py b/mayan/apps/motd/migrations/0002_auto_20160313_0340.py index e1d52bc36e..f5dd5098c6 100644 --- a/mayan/apps/motd/migrations/0002_auto_20160313_0340.py +++ b/mayan/apps/motd/migrations/0002_auto_20160313_0340.py @@ -14,11 +14,15 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='messageoftheday', name='end_datetime', - field=models.DateTimeField(null=True, verbose_name='End date time', blank=True), + field=models.DateTimeField( + null=True, verbose_name='End date time', blank=True + ), ), migrations.AlterField( model_name='messageoftheday', name='start_datetime', - field=models.DateTimeField(null=True, verbose_name='Start date time', blank=True), + field=models.DateTimeField( + null=True, verbose_name='Start date time', blank=True + ), ), ] diff --git a/mayan/apps/motd/migrations/0005_auto_20160510_0025.py b/mayan/apps/motd/migrations/0005_auto_20160510_0025.py index 2f87651d4c..cce5048849 100644 --- a/mayan/apps/motd/migrations/0005_auto_20160510_0025.py +++ b/mayan/apps/motd/migrations/0005_auto_20160510_0025.py @@ -14,21 +14,35 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='message', name='end_datetime', - field=models.DateTimeField(help_text='Date and time until when this message is to be displayed.', null=True, verbose_name='End date time', blank=True), + field=models.DateTimeField( + help_text='Date and time until when this message is to be ' + 'displayed.', null=True, verbose_name='End date time', + blank=True + ), ), migrations.AlterField( model_name='message', name='label', - field=models.CharField(help_text='Short description of this message.', max_length=32, verbose_name='Label'), + field=models.CharField( + help_text='Short description of this message.', max_length=32, + verbose_name='Label' + ), ), migrations.AlterField( model_name='message', name='message', - field=models.TextField(help_text='The actual message to be displayed.', verbose_name='Message'), + field=models.TextField( + help_text='The actual message to be displayed.', + verbose_name='Message' + ), ), migrations.AlterField( model_name='message', name='start_datetime', - field=models.DateTimeField(help_text='Date and time after which this message will be displayed.', null=True, verbose_name='Start date time', blank=True), + field=models.DateTimeField( + help_text='Date and time after which this message will be ' + 'displayed.', null=True, verbose_name='Start date time', + blank=True + ), ), ] diff --git a/mayan/apps/motd/urls.py b/mayan/apps/motd/urls.py index 709e8d7488..0f0d02f5e6 100644 --- a/mayan/apps/motd/urls.py +++ b/mayan/apps/motd/urls.py @@ -10,7 +10,9 @@ urlpatterns = patterns( '', url(r'^list/$', MessageListView.as_view(), name='message_list'), url(r'^create/$', MessageCreateView.as_view(), name='message_create'), - url(r'^(?P\d+)/edit/$', MessageEditView.as_view(), name='message_edit'), + url( + r'^(?P\d+)/edit/$', MessageEditView.as_view(), name='message_edit' + ), url( r'^(?P\d+)/delete/$', MessageDeleteView.as_view(), name='message_delete' diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index e6a02563a2..97aef9d214 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals import logging from kombu import Exchange, Queue -import sh from django.apps import apps from django.db.models.signals import post_save @@ -29,9 +28,6 @@ from .links import ( link_document_type_submit, link_entry_list ) from .permissions import permission_ocr_document, permission_ocr_content_view -from .settings import ( - setting_pdftotext_path, setting_tesseract_path -) logger = logging.getLogger(__name__) diff --git a/mayan/apps/ocr/parsers.py b/mayan/apps/ocr/parsers.py index 861f4c212d..6174557706 100644 --- a/mayan/apps/ocr/parsers.py +++ b/mayan/apps/ocr/parsers.py @@ -11,7 +11,6 @@ import subprocess from django.utils.translation import ugettext_lazy as _ -from common.settings import setting_temporary_directory from common.utils import copyfile, fs_cleanup, mkstemp from .exceptions import ParserError, NoMIMETypeMatch diff --git a/mayan/apps/ocr/tests/test_parsers.py b/mayan/apps/ocr/tests/test_parsers.py index a6727c4d0f..d222711167 100644 --- a/mayan/apps/ocr/tests/test_parsers.py +++ b/mayan/apps/ocr/tests/test_parsers.py @@ -1,11 +1,8 @@ from __future__ import unicode_literals -import psutil - from django.core.files.base import File from django.test import override_settings -from common.settings import setting_temporary_directory from common.tests import BaseTestCase from documents.models import DocumentType from documents.tests import ( diff --git a/mayan/apps/statistics/tests/test_views.py b/mayan/apps/statistics/tests/test_views.py index 69daca278d..f2669d4d46 100644 --- a/mayan/apps/statistics/tests/test_views.py +++ b/mayan/apps/statistics/tests/test_views.py @@ -35,7 +35,6 @@ class StatisticsViewTestCase(GenericViewTestCase): self.assertEqual(response.status_code, 200) - def test_statistic_namespace_list_view_no_permissions(self): self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD) diff --git a/mayan/apps/storage/backends/compressedstorage.py b/mayan/apps/storage/backends/compressedstorage.py index 59aaad34e6..d76fa76294 100644 --- a/mayan/apps/storage/backends/compressedstorage.py +++ b/mayan/apps/storage/backends/compressedstorage.py @@ -4,7 +4,7 @@ import os import zipfile try: - import zlib + import zlib # NOQA COMPRESSION = zipfile.ZIP_DEFLATED except: COMPRESSION = zipfile.ZIP_STORED diff --git a/mayan/settings/base.py b/mayan/settings/base.py index 09bf543aed..4b7bb2cae6 100644 --- a/mayan/settings/base.py +++ b/mayan/settings/base.py @@ -55,7 +55,6 @@ INSTALLED_APPS = ( 'compressor', 'corsheaders', 'djcelery', - 'filetransfers', 'formtools', 'mptt', 'pure_pagination', diff --git a/requirements/base.txt b/requirements/base.txt index c2d398123d..cbe0ed7a17 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -11,7 +11,6 @@ django-colorful==1.2 django-compressor==2.1 django-cors-headers==1.2.2 django-downloadview==1.9 -django-filetransfers==0.1.0 django-formtools==1.0 django-pure-pagination==0.3.0 django-model-utils==2.6 From 9eb9c93afcf07cd21cd29ea3fbf14918daf087e7 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 31 Oct 2016 01:14:39 -0400 Subject: [PATCH 018/119] Remove obsolete document printing tag --- mayan/apps/documents/templatetags/__init__.py | 0 .../documents/templatetags/printing_tags.py | 26 ------------------- 2 files changed, 26 deletions(-) delete mode 100644 mayan/apps/documents/templatetags/__init__.py delete mode 100644 mayan/apps/documents/templatetags/printing_tags.py diff --git a/mayan/apps/documents/templatetags/__init__.py b/mayan/apps/documents/templatetags/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/mayan/apps/documents/templatetags/printing_tags.py b/mayan/apps/documents/templatetags/printing_tags.py deleted file mode 100644 index 63e5dcfdff..0000000000 --- a/mayan/apps/documents/templatetags/printing_tags.py +++ /dev/null @@ -1,26 +0,0 @@ -from __future__ import unicode_literals - -from django.template import Library, Node, Variable - -from converter.api import get_dimensions - -register = Library() - - -class GetImageSizeNode(Node): - def __init__(self, document): - self.document = document - - def render(self, context): - document = Variable(self.document).resolve(context) - width, height = get_dimensions(document) - context['document_width'], context['document_height'] = width, height - context['document_aspect'] = float(width) / float(height) - return '' - - -@register.tag -def get_document_size(parser, token): - tag_name, arg = token.contents.split(None, 1) - - return GetImageSizeNode(document=arg) From de6564c264455535d04fda25c90a9e7c8e1a8e1d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 31 Oct 2016 15:08:43 -0400 Subject: [PATCH 019/119] Fix height calculation and remove disabled "fit" code. Thanks to @startmat for finding this one. Closes GitLab issue #319. --- mayan/apps/converter/classes.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/mayan/apps/converter/classes.py b/mayan/apps/converter/classes.py index 72d3eaf61a..9ac39e5efd 100644 --- a/mayan/apps/converter/classes.py +++ b/mayan/apps/converter/classes.py @@ -255,34 +255,20 @@ class TransformationResize(BaseTransformation): def execute_on(self, *args, **kwargs): super(TransformationResize, self).execute_on(*args, **kwargs) - fit = False width = int(self.width) - height = int(self.height or 1.0 * width * self.aspect) + height = int(self.height or 1.0 * width / self.aspect) factor = 1 while self.image.size[0] / factor > 2 * width and self.image.size[1] * 2 / factor > 2 * height: factor *= 2 + if factor > 1: self.image.thumbnail( (self.image.size[0] / factor, self.image.size[1] / factor), Image.NEAREST ) - # calculate the cropping box and get the cropped part - if fit: - x1 = y1 = 0 - x2, y2 = self.image.size - wRatio = 1.0 * x2 / width - hRatio = 1.0 * y2 / height - if hRatio > wRatio: - y1 = y2 / 2 - height * wRatio / 2 - y2 = y2 / 2 + height * wRatio / 2 - else: - x1 = x2 / 2 - width * hRatio / 2 - x2 = x2 / 2 + width * hRatio / 2 - self.image = self.image.crop((x1, y1, x2, y2)) - # Resize the image with best quality algorithm ANTI-ALIAS self.image.thumbnail((width, height), Image.ANTIALIAS) From ff67b111107377e9c0ef20dd139f88176c89aa05 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 31 Oct 2016 15:19:15 -0400 Subject: [PATCH 020/119] Improve upgrade process. Make removing obsolete requirements easier. --- HISTORY.rst | 2 ++ docs/releases/2.2.rst | 18 ++++++++++++------ removals.txt | 2 ++ 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 removals.txt diff --git a/HISTORY.rst b/HISTORY.rst index c8125849b5..b71f17da25 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -4,6 +4,8 @@ - Add support for document page search - Remove recent searches feature - Remove dependency on the django-filetransfer library +- Fix height calculation in resize transformation +- Improve upgrade instructions 2.1.4 (2016-10-28) ================== diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index ca6deb05e9..e4cb383126 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -14,6 +14,8 @@ Other changes - Add support for page search - Remove recent searches feature - Remove dependency on the django-filetransfer library +- Fix height calculation in resize transformation +- Improve upgrade instructions Removals -------- @@ -22,8 +24,8 @@ Removals Upgrading from a previous version --------------------------------- -Using PIP -~~~~~~~~~ +If installed via PIP +~~~~~~~~~~~~~~~~~~~~ Type in the console:: @@ -31,8 +33,8 @@ Type in the console:: the requirements will also be updated automatically. -Using Git -~~~~~~~~~ +If installed using Git +~~~~~~~~~~~~~~~~~~~~~~ If you installed Mayan EDMS by cloning the Git repository issue the commands:: @@ -42,14 +44,17 @@ If you installed Mayan EDMS by cloning the Git repository issue the commands:: otherwise download the compressed archived and uncompress it overriding the existing installation. -Next upgrade/add the new requirements:: +Manually upgrade/add the new requirements:: - $ pip uninstall -y django-filetransfers $ pip install --upgrade -r requirements.txt Common steps ~~~~~~~~~~~~ +Remove deprecated requirements:: + + $ pip uninstall -y -r removals.txt 2> /dev/null + Migrate existing database schema with:: $ mayan-edms.py performupgrade @@ -70,5 +75,6 @@ Bugs fixed or issues closed =========================== * `GitLab issue #311 `_ acl page return ContentType:Document +* `GitLab issue #319 `_ TransformationResize issue with very "long" image .. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/removals.txt b/removals.txt new file mode 100644 index 0000000000..f1f6e99e49 --- /dev/null +++ b/removals.txt @@ -0,0 +1,2 @@ +# Packages to be remove during upgrades +django-filetransfers From c0194c63dcb62cc94721ffc33b9e5e5ca617fc45 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 02:34:57 -0400 Subject: [PATCH 021/119] Refactor document page image generation and transformation classes to cache all transformed versions of a document page. --- docs/releases/2.2.rst | 1 + .../appearance/static/appearance/css/base.css | 6 +- .../appearance/static/appearance/js/base.js | 15 +-- mayan/apps/converter/__init__.py | 7 +- mayan/apps/converter/apps.py | 1 + mayan/apps/converter/classes.py | 30 +++++ mayan/apps/converter/tests/__init__.py | 0 mayan/apps/converter/tests/test_classes.py | 92 +++++++++++++++ mayan/apps/documents/api_views.py | 51 ++++++--- mayan/apps/documents/apps.py | 29 +++-- mayan/apps/documents/forms.py | 4 +- .../migrations/0035_auto_20161102_0633.py | 42 +++++++ mayan/apps/documents/models.py | 106 +++++++++++++----- mayan/apps/documents/serializers.py | 21 +--- mayan/apps/documents/tasks.py | 7 +- .../templates/documents/document_print.html | 5 +- mayan/apps/documents/tests/test_api.py | 3 +- mayan/apps/documents/urls.py | 12 -- mayan/apps/documents/views.py | 54 ++------- mayan/apps/documents/widgets.py | 46 ++++---- mayan/apps/ocr/views.py | 1 - 21 files changed, 348 insertions(+), 185 deletions(-) create mode 100644 mayan/apps/converter/tests/__init__.py create mode 100644 mayan/apps/converter/tests/test_classes.py create mode 100644 mayan/apps/documents/migrations/0035_auto_20161102_0633.py diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index e4cb383126..cff2a358e0 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -16,6 +16,7 @@ Other changes - Remove dependency on the django-filetransfer library - Fix height calculation in resize transformation - Improve upgrade instructions +- New image caching pipeline Removals -------- diff --git a/mayan/apps/appearance/static/appearance/css/base.css b/mayan/apps/appearance/static/appearance/css/base.css index df2a3566b8..49b1bdeb60 100644 --- a/mayan/apps/appearance/static/appearance/css/base.css +++ b/mayan/apps/appearance/static/appearance/css/base.css @@ -82,8 +82,12 @@ body { overflow-x: scroll; height: 500px; } +#carousel-container img { + width: 100%; +} + .carousel-item { - margin: 5px 10px 10px 10px + margin: 5px 10px 10px 10px; } .carousel-item-page-number { diff --git a/mayan/apps/appearance/static/appearance/js/base.js b/mayan/apps/appearance/static/appearance/js/base.js index c049f84e2d..78a6b55e8a 100644 --- a/mayan/apps/appearance/static/appearance/js/base.js +++ b/mayan/apps/appearance/static/appearance/js/base.js @@ -16,8 +16,8 @@ function set_image_noninteractive(image) { container.html(html); } -function load_document_image(image) { - $.get( image.attr('data-src'), function(result) { +function loadDocumentImage(image) { + $.get(image.attr('data-src'), function(result) { image.attr('src', result.data); image.addClass(image.attr('data-post-load-class')); }) @@ -76,20 +76,11 @@ jQuery(document).ready(function() { e.preventDefault(); }) - $('img.lazy-load').lazyload({ - appear: function(elements_left, settings) { - load_document_image($(this)); - }, - }); + $('img.lazy-load').lazyload(); $('img.lazy-load-carousel').lazyload({ threshold : 400, container: $("#carousel-container"), - appear: function(elements_left, settings) { - var $this = $(this); - $this.removeClass('lazy-load-carousel'); - load_document_image($this); - }, }); $('th input:checkbox').click(function(e) { diff --git a/mayan/apps/converter/__init__.py b/mayan/apps/converter/__init__.py index 8a8f62a335..8578c59ddb 100644 --- a/mayan/apps/converter/__init__.py +++ b/mayan/apps/converter/__init__.py @@ -1,8 +1,9 @@ from __future__ import unicode_literals -from .classes import ( # NOQA - TransformationResize, TransformationRotate, TransformationZoom # NOQA -) +from .classes import ( + BaseTransformation, TransformationResize, TransformationRotate, + TransformationZoom +) # NOQA from .runtime import converter_class # NOQA default_app_config = 'converter.apps.ConverterApp' diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index f2527f9b50..04e197b661 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -15,6 +15,7 @@ from .links import ( class ConverterApp(MayanAppConfig): name = 'converter' + test = True verbose_name = _('Converter') def ready(self): diff --git a/mayan/apps/converter/classes.py b/mayan/apps/converter/classes.py index 9ac39e5efd..bf151afbbd 100644 --- a/mayan/apps/converter/classes.py +++ b/mayan/apps/converter/classes.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import base64 import logging +from operator import xor import os try: @@ -221,6 +222,26 @@ class BaseTransformation(object): _registry = {} + @staticmethod + def encode_hash(decoded_value): + return hex(abs(decoded_value))[2:] + + @staticmethod + def decode_hash(encoded_value): + return int(encoded_value, 16) + + @staticmethod + def combine(transformations): + result = None + + for transformation in transformations: + if not result: + result = BaseTransformation.decode_hash(transformation.cache_hash()) + else: + result ^= BaseTransformation.decode_hash(transformation.cache_hash()) + + return BaseTransformation.encode_hash(result) + @classmethod def register(cls, transformation): cls._registry[transformation.name] = transformation @@ -240,8 +261,17 @@ class BaseTransformation(object): return string_concat(cls.label, ': ', ', '.join(cls.arguments)) def __init__(self, **kwargs): + self.kwargs = {} for argument_name in self.arguments: setattr(self, argument_name, kwargs.get(argument_name)) + self.kwargs[argument_name] = kwargs.get(argument_name) + + def cache_hash(self): + result = unicode.__hash__(self.name) + for key, value in self.kwargs.items(): + result ^= unicode.__hash__(key) ^ str.__hash__(str(value)) + + return BaseTransformation.encode_hash(result) def execute_on(self, image): self.image = image diff --git a/mayan/apps/converter/tests/__init__.py b/mayan/apps/converter/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/converter/tests/test_classes.py b/mayan/apps/converter/tests/test_classes.py new file mode 100644 index 0000000000..6d6146e151 --- /dev/null +++ b/mayan/apps/converter/tests/test_classes.py @@ -0,0 +1,92 @@ +from __future__ import unicode_literals + +from django.test import TestCase + +from ..classes import ( + BaseTransformation, TransformationResize, TransformationRotate, + TransformationZoom +) + +TRANSFORMATION_RESIZE_WIDTH = 123 +TRANSFORMATION_RESIZE_HEIGHT = 528 +TRANSFORMATION_RESIZE_CACHE_HASH = '2cbabd3aaafdaf8f' +TRANSFORMATION_RESIZE_WIDTH_2 = 124 +TRANSFORMATION_RESIZE_HEIGHT_2 = 529 +TRANSFORMATION_RESIZE_CACHE_HASH_2 = '2cbabd3aaafdaf89' +TRANSFORMATION_ROTATE_DEGRESS = 34 +TRANSFORMATION_ROTATE_CACHE_HASH = '2f9d036e13aacb48' +TRANSFORMATION_COMBINED_CACHE_HASH = '44a3b262e18b5d5d' +TRANSFORMATION_ZOOM_PERCENT = 49 +TRANSFORMATION_ZOOM_CACHE_HASH = '47840c3658dc399a' + + +class TransformationTestCase(TestCase): + def test_resize_cache_hashing(self): + # Test if the hash is being generated correctly + transformation = TransformationResize( + width=TRANSFORMATION_RESIZE_WIDTH, + height=TRANSFORMATION_RESIZE_HEIGHT + ) + + self.assertEqual( + transformation.cache_hash(), TRANSFORMATION_RESIZE_CACHE_HASH + ) + + # Test if the hash is being alternated correctly + transformation = TransformationResize( + width=TRANSFORMATION_RESIZE_WIDTH_2, + height=TRANSFORMATION_RESIZE_HEIGHT_2 + ) + + self.assertEqual( + transformation.cache_hash(), TRANSFORMATION_RESIZE_CACHE_HASH_2 + ) + + def test_rotate_cache_hashing(self): + # Test if the hash is being generated correctly + transformation = TransformationRotate( + degrees=TRANSFORMATION_ROTATE_DEGRESS + ) + + self.assertEqual( + transformation.cache_hash(), TRANSFORMATION_ROTATE_CACHE_HASH + ) + + def test_rotate_zoom_hashing(self): + # Test if the hash is being generated correctly + transformation = TransformationZoom( + percent=TRANSFORMATION_ZOOM_PERCENT + ) + + self.assertEqual( + transformation.cache_hash(), TRANSFORMATION_ZOOM_CACHE_HASH + ) + + def test_cache_hash_combining(self): + # Test magic method and hash combining + + transformation_resize = TransformationResize( + width=TRANSFORMATION_RESIZE_WIDTH, + height=TRANSFORMATION_RESIZE_HEIGHT + ) + + transformation_rotate = TransformationRotate( + degrees=TRANSFORMATION_ROTATE_DEGRESS + ) + + transformation_zoom = TransformationZoom( + percent=TRANSFORMATION_ZOOM_PERCENT + ) + + #self.assertEqual( + # #transformation_rotate ^ transformation_resize ^ transformation_zoom, + # transformation_rotate ^ transformation_resize ^ transformation_zoom, + # #transformation_resize ^ transformation_zoom, + # TRANSFORMATION_COMBINED_CACHE_HASH + #) + + self.assertEqual( + BaseTransformation.combine( + (transformation_rotate, transformation_resize, transformation_zoom) + ), TRANSFORMATION_COMBINED_CACHE_HASH + ) diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index b93e386597..e1ff278262 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -3,8 +3,10 @@ from __future__ import absolute_import, unicode_literals import logging from django.core.exceptions import PermissionDenied +from django.http import HttpResponse from django.shortcuts import get_object_or_404 +from django_downloadview import DownloadMixin, VirtualFile from rest_framework import generics, status from rest_framework.response import Response @@ -13,6 +15,7 @@ from permissions import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission +from .literals import DOCUMENT_IMAGE_TASK_TIMEOUT from .models import ( Document, DocumentPage, DocumentType, DocumentVersion, RecentDocument ) @@ -25,13 +28,14 @@ from .permissions import ( permission_document_type_create, permission_document_type_delete, permission_document_type_edit, permission_document_type_view ) +from .runtime import cache_storage_backend from .serializers import ( - DeletedDocumentSerializer, DocumentPageImageSerializer, - DocumentPageSerializer, DocumentSerializer, + DeletedDocumentSerializer, DocumentPageSerializer, DocumentSerializer, DocumentTypeSerializer, DocumentVersionSerializer, DocumentVersionRevertSerializer, NewDocumentSerializer, NewDocumentVersionSerializer, RecentDocumentSerializer ) +from .tasks import task_generate_document_page_image logger = logging.getLogger(__name__) @@ -86,15 +90,6 @@ class APIDeletedDocumentRestoreView(generics.GenericAPIView): return Response(status=status.HTTP_200_OK) -############## -from django_downloadview import VirtualDownloadView -from django_downloadview import VirtualFile -from django_downloadview import DownloadMixin - -#class SingleObjectDownloadView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, VirtualDownloadView, SingleObjectMixin): -# VirtualFile = VirtualFile - - class APIDocumentDownloadView(DownloadMixin, generics.RetrieveAPIView): """ Download the latest version of a document. @@ -228,8 +223,18 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView): class APIDocumentPageImageView(generics.RetrieveAPIView): """ Returns an image representation of the selected document. - size -- 'x' seprated width and height of the desired image representation. - zoom -- Zoom level of the image to be generated, numeric value only. + --- + GET: + omit_serializer: true + parameters: + - name: size + description: 'x' seprated width and height of the desired image representation. + paramType: query + type: number + - name: zoom + description: Zoom level of the image to be generated, numeric value only. + paramType: query + type: number """ mayan_object_permissions = { @@ -238,7 +243,25 @@ class APIDocumentPageImageView(generics.RetrieveAPIView): mayan_permission_attribute_check = 'document' permission_classes = (MayanPermission,) queryset = DocumentPage.objects.all() - serializer_class = DocumentPageImageSerializer + + def get_serializer_class(self): + return None + + def retrieve(self, request, *args, **kwargs): + size = request.GET.get('size') + zoom = request.GET.get('zoom') + rotation = request.GET.get('rotation') + + task = task_generate_document_page_image.apply_async( + kwargs=dict( + document_page_id=self.kwargs['pk'], size=size, zoom=zoom, + rotation=rotation + ) + ) + + cache_filename = task.get(timeout=DOCUMENT_IMAGE_TASK_TIMEOUT) + with cache_storage_backend.open(cache_filename) as file_object: + return HttpResponse(file_object.read(), content_type='image') class APIDocumentPageView(generics.RetrieveUpdateAPIView): diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 87bae4836d..64c18a5beb 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -68,13 +68,13 @@ from .permissions import ( ) # Just import to initialize the search models from .search import document_search, document_page_search # NOQA -from .settings import setting_thumbnail_size +from .settings import setting_display_size, setting_thumbnail_size from .statistics import ( new_documents_per_month, new_document_pages_per_month, new_document_versions_per_month, total_document_per_month, total_document_page_per_month, total_document_version_per_month ) -from .widgets import document_html_widget, document_thumbnail +from .widgets import document_html_widget class DocumentsApp(MayanAppConfig): @@ -151,8 +151,12 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=Document, label=_('Thumbnail'), - func=lambda context: document_thumbnail( - context['object'], gallery_name='documents:document_list', + func=lambda context: document_html_widget( + document_page=context['object'].latest_version.pages.first(), + click_view='rest_api:documentpage-image', + click_view_arguments_lazy=lambda: (context['object'].latest_version.pages.first().pk,), + click_view_querydict={'size': setting_display_size.value}, + gallery_name='documents:document_list', size=setting_thumbnail_size.value, title=getattr(context['object'], 'label', None), ) @@ -165,8 +169,8 @@ class DocumentsApp(MayanAppConfig): source=DocumentPage, label=_('Thumbnail'), func=lambda context: document_html_widget( document_page=context['object'], - click_view='documents:document_display', - click_view_arguments=(context['object'].document.pk,), + click_view='rest_api:documentpage-image', + click_view_arguments=(context['object'].pk,), gallery_name='documents:document_page_list', preview_click_view='documents:document_page_view', size=setting_thumbnail_size.value, @@ -178,8 +182,8 @@ class DocumentsApp(MayanAppConfig): source=DocumentPageResult, label=_('Thumbnail'), func=lambda context: document_html_widget( document_page=context['object'], - click_view='documents:document_display', - click_view_arguments=(context['object'].document.pk,), + click_view='rest_api:documentpage-image', + click_view_arguments=(context['object'].pk,), gallery_name='documents:document_page_list', preview_click_view='documents:document_page_view', size=setting_thumbnail_size.value, @@ -205,8 +209,11 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=DeletedDocument, label=_('Thumbnail'), - func=lambda context: document_thumbnail( - context['object'], + func=lambda context: document_html_widget( + document_page=context['object'].latest_version.pages.first(), + click_view='rest_api:documentpage-image', + click_view_arguments_lazy=lambda: (context['object'].latest_version.pages.first().pk,), + click_view_querydict={'size': setting_display_size.value}, gallery_name='documents:delete_document_list', size=setting_thumbnail_size.value, title=getattr(context['object'], 'label', None), @@ -285,7 +292,7 @@ class DocumentsApp(MayanAppConfig): 'documents.tasks.task_clear_image_cache': { 'queue': 'tools' }, - 'documents.tasks.task_get_document_page_image': { + 'documents.tasks.task_generate_document_page_image': { 'queue': 'converter' }, 'documents.tasks.task_update_page_count': { diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index 793a593988..4ee5f4abd8 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -29,8 +29,8 @@ class DocumentPageForm(DetailForm): model = DocumentPage def __init__(self, *args, **kwargs): - zoom = kwargs.pop('zoom', 100) - rotation = kwargs.pop('rotation', 0) + zoom = kwargs.pop('zoom', None) + rotation = kwargs.pop('rotation', None) super(DocumentPageForm, self).__init__(*args, **kwargs) self.fields['page_image'].initial = self.instance self.fields['page_image'].widget.attrs.update({ diff --git a/mayan/apps/documents/migrations/0035_auto_20161102_0633.py b/mayan/apps/documents/migrations/0035_auto_20161102_0633.py new file mode 100644 index 0000000000..65629625e0 --- /dev/null +++ b/mayan/apps/documents/migrations/0035_auto_20161102_0633.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0034_auto_20160509_2321'), + ] + + operations = [ + migrations.CreateModel( + name='DocumentPageCachedImage', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('filename', models.CharField(max_length=128, verbose_name='Filename')), + ], + options={ + 'verbose_name': 'Document page cached image', + 'verbose_name_plural': 'Document page cached images', + }, + ), + migrations.CreateModel( + name='DocumentPageResult', + fields=[ + ], + options={ + 'ordering': ('document_version__document', 'page_number'), + 'verbose_name': 'Document page', + 'proxy': True, + 'verbose_name_plural': 'Document pages', + }, + bases=('documents.documentpage',), + ), + migrations.AddField( + model_name='documentpagecachedimage', + name='document_page', + field=models.ForeignKey(related_name='cached_images', verbose_name='Document page', to='documents.DocumentPage'), + ), + ] diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index d0b80dc50d..a8e89701b9 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -16,8 +16,8 @@ from django.utils.translation import ugettext, ugettext_lazy as _ from acls.models import AccessControlList from common.literals import TIME_DELTA_UNIT_CHOICES from converter import ( - converter_class, TransformationResize, TransformationRotate, - TransformationZoom + converter_class, BaseTransformation, TransformationResize, + TransformationRotate, TransformationZoom ) from converter.exceptions import InvalidOfficeFormat, PageCountError from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION @@ -683,15 +683,15 @@ class DocumentPage(models.Model): def document(self): return self.document_version.document - def get_image(self, *args, **kwargs): - as_base64 = kwargs.pop('as_base64', False) - transformations = kwargs.pop('transformations', []) - size = kwargs.pop('size', setting_display_size.value) + def generate_image(self, *args, **kwargs): + # Convert arguments into transformations + transformations = kwargs.get('transformations', []) + size = kwargs.get('size', setting_display_size.value) rotation = int( - kwargs.pop('rotation', DEFAULT_ROTATION) or DEFAULT_ROTATION - ) + kwargs.get('rotation', DEFAULT_ROTATION) or DEFAULT_ROTATION + ) % 360 zoom_level = int( - kwargs.pop('zoom', DEFAULT_ZOOM_LEVEL) or DEFAULT_ZOOM_LEVEL + kwargs.get('zoom', DEFAULT_ZOOM_LEVEL) or DEFAULT_ZOOM_LEVEL ) if zoom_level < setting_zoom_min_level.value: @@ -700,8 +700,54 @@ class DocumentPage(models.Model): if zoom_level > setting_zoom_max_level.value: zoom_level = setting_zoom_max_level.value - rotation = rotation % 360 + # Generate transformation hash + transformation_list = [] + + # Stored transformations first + for stored_transformation in Transformation.objects.get_for_model(self, as_classes=True): + transformation_list.append(stored_transformation) + + # Interactive transformations second + for transformation in transformations: + transformation_list.append(transformation) + + if rotation: + transformation_list.append( + TransformationRotate(degrees=rotation) + ) + + if size: + transformation_list.append( + TransformationResize( + **dict(zip(('width', 'height'), (size.split('x')))) + ) + ) + + if zoom_level: + transformation_list.append(TransformationZoom(percent=zoom_level)) + + cache_filename = '{}-{}'.format( + self.cache_filename, BaseTransformation.combine(transformation_list) + ) + + # Check is transformed image is available + logger.debug('transformations cache filename: %s', cache_filename) + + if cache_storage_backend.exists(cache_filename): + logger.debug( + 'transformations cache file "%s" found', cache_filename + ) + else: + image = self.get_image(transformations=transformation_list) + with cache_storage_backend.open(cache_filename, 'wb+') as file_object: + file_object.write(image.getvalue()) + + self.cached_images.create(filename=cache_filename) + + return cache_filename + + def get_image(self, transformations=None): cache_filename = self.cache_filename logger.debug('Page cache filename: %s', cache_filename) @@ -734,33 +780,15 @@ class DocumentPage(models.Model): cache_storage_backend.delete(cache_filename) raise - # Stored transformations - for stored_transformation in Transformation.objects.get_for_model(self, as_classes=True): - converter.transform(transformation=stored_transformation) - - # Interactive transformations for transformation in transformations: converter.transform(transformation=transformation) - if rotation: - converter.transform(transformation=TransformationRotate( - degrees=rotation) - ) - - if size: - converter.transform(transformation=TransformationResize( - **dict(zip(('width', 'height'), (size.split('x'))))) - ) - - if zoom_level: - converter.transform( - transformation=TransformationZoom(percent=zoom_level) - ) - - return converter.get_page(as_base64=as_base64) + return converter.get_page() def invalidate_cache(self): cache_storage_backend.delete(self.cache_filename) + for cached_image in self.cached_images.all(): + cached_image.delete() @property def siblings(self): @@ -777,6 +805,22 @@ class DocumentPage(models.Model): return '{}-{}'.format(self.document_version.uuid, self.pk) +class DocumentPageCachedImage(models.Model): + document_page = models.ForeignKey( + DocumentPage, related_name='cached_images', + verbose_name=_('Document page') + ) + filename = models.CharField(max_length=128, verbose_name=_('Filename')) + + class Meta: + verbose_name = _('Document page cached image') + verbose_name_plural = _('Document page cached images') + + def delete(self, *args, **kwargs): + cache_storage_backend.delete(self.filename) + return super(DocumentPageCachedImage, self).delete(*args, **kwargs) + + class DocumentPageResult(DocumentPage): class Meta: ordering = ('document_version__document', 'page_number') diff --git a/mayan/apps/documents/serializers.py b/mayan/apps/documents/serializers.py index 8a07cb12d4..95fe32b76e 100644 --- a/mayan/apps/documents/serializers.py +++ b/mayan/apps/documents/serializers.py @@ -4,30 +4,11 @@ from rest_framework import serializers from common.models import SharedUploadedFile -from .literals import DOCUMENT_IMAGE_TASK_TIMEOUT from .models import ( Document, DocumentVersion, DocumentPage, DocumentType, RecentDocument ) from .settings import setting_language -from .tasks import task_get_document_page_image, task_upload_new_version - - -class DocumentPageImageSerializer(serializers.Serializer): - data = serializers.SerializerMethodField() - - def get_data(self, instance): - request = self.context['request'] - size = request.GET.get('size') - zoom = request.GET.get('zoom') - rotation = request.GET.get('rotation') - - task = task_get_document_page_image.apply_async( - kwargs=dict( - document_page_id=instance.pk, size=size, zoom=zoom, - rotation=rotation, as_base64=True - ) - ) - return task.get(timeout=DOCUMENT_IMAGE_TASK_TIMEOUT) +from .tasks import task_upload_new_version class DocumentPageSerializer(serializers.HyperlinkedModelSerializer): diff --git a/mayan/apps/documents/tasks.py b/mayan/apps/documents/tasks.py index 49f00c8fde..70309258ad 100644 --- a/mayan/apps/documents/tasks.py +++ b/mayan/apps/documents/tasks.py @@ -56,14 +56,15 @@ def task_delete_stubs(): logger.info('Finshed') -@app.task(compression='zlib') -def task_get_document_page_image(document_page_id, *args, **kwargs): +@app.task() +def task_generate_document_page_image(document_page_id, *args, **kwargs): DocumentPage = apps.get_model( app_label='documents', model_name='DocumentPage' ) document_page = DocumentPage.objects.get(pk=document_page_id) - return document_page.get_image(*args, **kwargs) + + return document_page.generate_image(*args, **kwargs) @app.task(bind=True, default_retry_delay=UPDATE_PAGE_COUNT_RETRY_DELAY, ignore_result=True) diff --git a/mayan/apps/documents/templates/documents/document_print.html b/mayan/apps/documents/templates/documents/document_print.html index 3ee1bea746..46360f3ec9 100644 --- a/mayan/apps/documents/templates/documents/document_print.html +++ b/mayan/apps/documents/templates/documents/document_print.html @@ -4,6 +4,9 @@ {% block content_plain %} {% for page in pages %} - + {% endfor %} {% endblock %} + + +setting_print_size.value diff --git a/mayan/apps/documents/tests/test_api.py b/mayan/apps/documents/tests/test_api.py index 2fd1a1edde..115b44c784 100644 --- a/mayan/apps/documents/tests/test_api.py +++ b/mayan/apps/documents/tests/test_api.py @@ -9,7 +9,6 @@ from json import loads from django.contrib.auth import get_user_model from django.core.urlresolvers import reverse from django.test import override_settings -from django.utils.six import BytesIO from django_downloadview import assert_download_response from rest_framework import status @@ -23,7 +22,7 @@ from .literals import ( TEST_DOCUMENT_FILENAME, TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH, ) -from ..models import Document, DocumentType, HASH_FUNCTION +from ..models import Document, DocumentType class DocumentTypeAPITestCase(APITestCase): diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 63af6b320d..57edb77275 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -12,7 +12,6 @@ from .api_views import ( APIDocumentVersionRevertView, APIDocumentVersionView, APIRecentDocumentListView ) -from .settings import setting_print_size, setting_display_size from .views import ( ClearImageCacheView, DeletedDocumentDeleteView, DeletedDocumentDeleteManyView, DeletedDocumentListView, @@ -98,17 +97,6 @@ urlpatterns = patterns( 'document_multiple_update_page_count', name='document_multiple_update_page_count' ), - - url( - r'^(?P\d+)/display/$', 'get_document_image', { - 'size': setting_display_size.value - }, 'document_display' - ), - url( - r'^(?P\d+)/display/print/$', 'get_document_image', { - 'size': setting_print_size.value - }, 'document_display_print' - ), url( r'^(?P\d+)/download/form/$', DocumentDownloadFormView.as_view(), name='document_download_form' diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 384187d655..3508ed1ddd 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -import base64 import logging import urlparse @@ -8,7 +7,7 @@ from django.conf import settings from django.contrib import messages from django.core.exceptions import PermissionDenied from django.core.urlresolvers import resolve, reverse, reverse_lazy -from django.http import HttpResponse, HttpResponseRedirect +from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.http import urlencode @@ -23,9 +22,7 @@ from common.generics import ( SingleObjectEditView, SingleObjectListView ) from common.mixins import MultipleInstanceActionMixin -from converter.literals import ( - DEFAULT_PAGE_NUMBER, DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL -) +from converter.literals import DEFAULT_ZOOM_LEVEL from converter.models import Transformation from converter.permissions import permission_transformation_delete from permissions import Permission @@ -36,9 +33,7 @@ from .forms import ( DocumentPropertiesForm, DocumentTypeSelectForm, DocumentTypeFilenameForm_create, PrintForm ) -from .literals import ( - DOCUMENT_IMAGE_TASK_TIMEOUT, PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME -) +from .literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME from .models import ( DeletedDocument, Document, DocumentType, DocumentPage, DocumentTypeFilename, DocumentVersion, RecentDocument @@ -53,13 +48,10 @@ from .permissions import ( permission_document_view, permission_empty_trash ) from .settings import ( - setting_preview_size, setting_rotation_step, setting_zoom_percent_step, + setting_print_size, setting_rotation_step, setting_zoom_percent_step, setting_zoom_max_level, setting_zoom_min_level ) -from .tasks import ( - task_clear_image_cache, task_get_document_page_image, - task_update_page_count -) +from .tasks import task_clear_image_cache, task_update_page_count from .utils import parse_range logger = logging.getLogger(__name__) @@ -277,8 +269,8 @@ class DocumentPageView(SimpleView): ).dispatch(request, *args, **kwargs) def get_extra_context(self): - zoom = int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) - rotation = int(self.request.GET.get('rotation', DEFAULT_ROTATION)) + zoom = self.request.GET.get('zoom') + rotation = self.request.GET.get('rotation') document_page_form = DocumentPageForm( instance=self.get_object(), zoom=zoom, rotation=rotation ) @@ -742,37 +734,6 @@ def document_multiple_document_type_edit(request): ) -# TODO: Get rid of this view and convert widget to use API and base64 only images -def get_document_image(request, document_id, size=setting_preview_size.value): - document = get_object_or_404(Document.passthrough, pk=document_id) - try: - Permission.check_permissions(request.user, (permission_document_view,)) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, document - ) - - page = int(request.GET.get('page', DEFAULT_PAGE_NUMBER)) - - zoom = int(request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) - - version = int(request.GET.get('version', document.latest_version.pk)) - - if zoom < setting_zoom_min_level.value: - zoom = setting_zoom_min_level.value - - if zoom > setting_zoom_max_level.value: - zoom = setting_zoom_max_level.value - - rotation = int(request.GET.get('rotation', DEFAULT_ROTATION)) % 360 - - document_page = document.pages.get(page_number=page) - - task = task_get_document_page_image.apply_async(kwargs=dict(document_page_id=document_page.pk, size=size, zoom=zoom, rotation=rotation, as_base64=True, version=version)) - data = task.get(timeout=DOCUMENT_IMAGE_TASK_TIMEOUT) - return HttpResponse(base64.b64decode(data.partition('base64,')[2]), content_type='image') - - class DocumentDownloadFormView(FormView): form_class = DocumentDownloadForm model = Document @@ -1279,6 +1240,7 @@ def document_print(request, document_id): 'appearance_type': 'plain', 'object': document, 'pages': pages, + 'size': setting_print_size.value, 'title': _('Print: %s') % document, }, context_instance=RequestContext(request)) else: diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index 8a7b14c384..d996fde790 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -6,8 +6,7 @@ from django.core.urlresolvers import reverse from django.utils.html import strip_tags from django.utils.http import urlencode from django.utils.safestring import mark_safe -from django.utils.translation import ugettext -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext, ugettext_lazy as _ from converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL @@ -17,8 +16,8 @@ from .settings import setting_display_size, setting_thumbnail_size class DocumentPageImageWidget(forms.widgets.Widget): def render(self, name, value, attrs=None): final_attrs = self.build_attrs(attrs) - zoom = final_attrs.get('zoom', 100) - rotation = final_attrs.get('rotation', 0) + zoom = final_attrs.get('zoom') + rotation = final_attrs.get('rotation') if value: output = [] output.append( @@ -46,20 +45,16 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): 'data-height-difference=200>' ) - try: - document_pages = value.pages.all() - total_pages = value.pages.count() - except AttributeError: - document_pages = [] - total_pages = 0 + document_pages = value.pages.all() + total_pages = value.pages.count() - for page in document_pages: + for document_page in document_pages: output.append('') + if not total_pages: + output.append('') + output.append('') return mark_safe(''.join(output)) -def document_thumbnail(document, **kwargs): - return document_html_widget( - document_page=document.latest_version.pages.first(), - click_view='documents:document_display', **kwargs - ) - - def document_link(document): return mark_safe('%s' % ( document.get_absolute_url(), document) ) -def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False, preview_click_view=None): +def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False, preview_click_view=None, click_view_querydict=None, click_view_arguments_lazy=None): result = [] alt_text = _('Document page image') @@ -151,6 +142,9 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No title_template = '' if click_view: + if click_view_arguments_lazy: + click_view_arguments = click_view_arguments_lazy() + result.append( ''.format( @@ -158,8 +152,8 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No fancybox_class=fancybox_class, image_data='%s?%s' % ( reverse( - click_view, args=click_view_arguments or [document.pk] - ), query_string + click_view, args=click_view_arguments + ), urlencode(click_view_querydict or {}) ), title_template=title_template ) @@ -173,8 +167,8 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No ) else: result.append( - '%s' % ( + '{}'.format( image_class, preview_view, post_load_class, static('appearance/images/loading.png'), alt_text ) diff --git a/mayan/apps/ocr/views.py b/mayan/apps/ocr/views.py index 0fd2709fbb..2c4f237867 100644 --- a/mayan/apps/ocr/views.py +++ b/mayan/apps/ocr/views.py @@ -99,7 +99,6 @@ class DocumentTypeSubmitView(FormView): def form_valid(self, form): count = 0 - print form.cleaned_data for document in form.cleaned_data['document_type'].documents.all(): document.submit_for_ocr() count += 1 From 621c988809deef866556d84a958adde234baacae Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 03:48:16 -0400 Subject: [PATCH 022/119] Simplify filter_by_access boilerplate code --- mayan/apps/acls/managers.py | 78 +++++++++++-------- mayan/apps/acls/tests/test_models.py | 8 +- mayan/apps/checkouts/api_views.py | 32 ++------ mayan/apps/common/classes.py | 20 +---- mayan/apps/common/mixins.py | 17 +--- mayan/apps/converter/__init__.py | 4 +- mayan/apps/converter/classes.py | 1 - mayan/apps/converter/tests/test_classes.py | 7 -- mayan/apps/document_indexing/models.py | 13 +--- mayan/apps/document_indexing/views.py | 16 +--- mayan/apps/document_signatures/forms.py | 13 +--- mayan/apps/documents/apps.py | 10 ++- mayan/apps/documents/forms.py | 13 +--- mayan/apps/documents/models.py | 13 +--- mayan/apps/documents/views.py | 78 +++++-------------- mayan/apps/dynamic_search/classes.py | 11 +-- mayan/apps/folders/api_views.py | 16 +--- mayan/apps/folders/forms.py | 15 +--- mayan/apps/folders/models.py | 13 +--- mayan/apps/folders/views.py | 22 ++---- mayan/apps/mailer/views.py | 11 +-- mayan/apps/metadata/views.py | 33 +++----- mayan/apps/navigation/classes.py | 2 + .../templatetags/navigation_tags.py | 2 +- mayan/apps/rest_api/filters.py | 21 ++--- mayan/apps/tags/forms.py | 26 ++----- mayan/apps/tags/models.py | 13 +--- mayan/apps/tags/views.py | 27 +++---- mayan/apps/tags/widgets.py | 14 +--- 29 files changed, 173 insertions(+), 376 deletions(-) diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index e9bbb88b5b..c817371005 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -9,6 +9,7 @@ from django.db.models import Q from django.utils.translation import ugettext from common.utils import return_attrib +from permissions import Permission from permissions.models import StoredPermission from .classes import ModelPermission @@ -88,41 +89,52 @@ class AccessControlListManager(models.Manager): if user.is_superuser or user.is_staff: return queryset - user_roles = [] - for group in user.groups.all(): - for role in group.roles.all(): - user_roles.append(role) - try: - parent_accessor = ModelPermission.get_inheritance(queryset.model) - except KeyError: - parent_acl_query = Q() - else: - instance = queryset.first() - if instance: - parent_object = getattr(instance, parent_accessor) - parent_content_type = ContentType.objects.get_for_model( - parent_object + Permission.check_permissions( + requester=user, permissions=(permission,) + ) + except PermissionDenied: + user_roles = [] + for group in user.groups.all(): + for role in group.roles.all(): + user_roles.append(role) + + try: + parent_accessor = ModelPermission.get_inheritance( + model=queryset.model ) - parent_queryset = self.filter( - content_type=parent_content_type, role__in=user_roles, - permissions=permission.stored_permission - ) - parent_acl_query = Q( - **{ - '{}__pk__in'.format( - parent_accessor - ): parent_queryset.values_list('object_id', flat=True) - } - ) - else: + except KeyError: parent_acl_query = Q() + else: + instance = queryset.first() + if instance: + parent_object = getattr(instance, parent_accessor) + parent_content_type = ContentType.objects.get_for_model( + parent_object + ) + parent_queryset = self.filter( + content_type=parent_content_type, role__in=user_roles, + permissions=permission.stored_permission + ) + parent_acl_query = Q( + **{ + '{}__pk__in'.format( + parent_accessor + ): parent_queryset.values_list( + 'object_id', flat=True + ) + } + ) + else: + parent_acl_query = Q() - # Directly granted access - content_type = ContentType.objects.get_for_model(queryset.model) - acl_query = Q(pk__in=self.filter( - content_type=content_type, role__in=user_roles, - permissions=permission.stored_permission - ).values_list('object_id', flat=True)) + # Directly granted access + content_type = ContentType.objects.get_for_model(queryset.model) + acl_query = Q(pk__in=self.filter( + content_type=content_type, role__in=user_roles, + permissions=permission.stored_permission + ).values_list('object_id', flat=True)) - return queryset.filter(parent_acl_query | acl_query) + return queryset.filter(parent_acl_query | acl_query) + else: + return queryset diff --git a/mayan/apps/acls/tests/test_models.py b/mayan/apps/acls/tests/test_models.py index 571350452c..76241bd68c 100644 --- a/mayan/apps/acls/tests/test_models.py +++ b/mayan/apps/acls/tests/test_models.py @@ -89,8 +89,6 @@ class PermissionTestCase(TestCase): self.fail('PermissionDenied exception was not expected.') def test_filtering_with_permissions(self): - self.role.permissions.add(permission_document_view.stored_permission) - acl = AccessControlList.objects.create( content_object=self.document_1, role=self.role ) @@ -137,8 +135,6 @@ class PermissionTestCase(TestCase): self.fail('PermissionDenied exception was not expected.') def test_filtering_with_inherited_permissions(self): - self.role.permissions.add(permission_document_view.stored_permission) - acl = AccessControlList.objects.create( content_object=self.document_type_1, role=self.role ) @@ -148,6 +144,10 @@ class PermissionTestCase(TestCase): permission=permission_document_view, user=self.user, queryset=Document.objects.all() ) + + # Since document_1 and document_2 are of document_type_1 + # they are the only ones that should be returned + self.assertTrue(self.document_1 in result) self.assertTrue(self.document_2 in result) self.assertTrue(self.document_3 not in result) diff --git a/mayan/apps/checkouts/api_views.py b/mayan/apps/checkouts/api_views.py index 939cf28f1d..507854d428 100644 --- a/mayan/apps/checkouts/api_views.py +++ b/mayan/apps/checkouts/api_views.py @@ -31,18 +31,10 @@ class APICheckedoutDocumentListView(generics.ListCreateAPIView): return DocumentCheckoutSerializer def get_queryset(self): - documents = DocumentCheckout.objects.checked_out_documents() - - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - filtered_documents = AccessControlList.objects.filter_by_access( - (permission_document_view,), self.request.user, documents - ) - else: - filtered_documents = documents + filtered_documents = AccessControlList.objects.filter_by_access( + (permission_document_view,), self.request.user, + queryset=DocumentCheckout.objects.checked_out_documents() + ) return DocumentCheckout.objects.filter( document__pk__in=filtered_documents.values_list('pk', flat=True) @@ -104,18 +96,10 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): def get_queryset(self): if self.request.method == 'GET': - documents = DocumentCheckout.objects.checked_out_documents() - - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - filtered_documents = AccessControlList.objects.filter_by_access( - (permission_document_view,), self.request.user, documents - ) - else: - filtered_documents = documents + filtered_documents = AccessControlList.objects.filter_by_access( + (permission_document_view,), self.request.user, + queryset=DocumentCheckout.objects.checked_out_documents() + ) return DocumentCheckout.objects.filter( document__pk__in=filtered_documents.values_list( diff --git a/mayan/apps/common/classes.py b/mayan/apps/common/classes.py index d342ab062e..0ef0e12578 100644 --- a/mayan/apps/common/classes.py +++ b/mayan/apps/common/classes.py @@ -1,12 +1,9 @@ from __future__ import unicode_literals from django.apps import apps -from django.core.exceptions import PermissionDenied from django.db import models from django.utils.translation import ugettext -from permissions import Permission - class ModelAttribute(object): __registry = {} @@ -137,20 +134,9 @@ class Filter(object): queryset = queryset.distinct() if self.object_permission: - try: - # Check to see if the user has the permissions globally - Permission.check_permissions( - user, (self.object_permission,) - ) - except PermissionDenied: - # No global permission, filter ther queryset per object + - # permission - return AccessControlList.objects.filter_by_access( - self.object_permission, user, queryset - ) - else: - # Has the permission globally, return all results - return queryset + return AccessControlList.objects.filter_by_access( + self.object_permission, user, queryset=queryset + ) else: return queryset diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index a4cf0a42d2..8571f18c09 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -93,20 +93,9 @@ class ObjectListPermissionFilterMixin(object): queryset = super(ObjectListPermissionFilterMixin, self).get_queryset() if self.object_permission: - try: - # Check to see if the user has the permissions globally - Permission.check_permissions( - self.request.user, (self.object_permission,) - ) - except PermissionDenied: - # No global permission, filter ther queryset per object + - # permission - return AccessControlList.objects.filter_by_access( - self.object_permission, self.request.user, queryset - ) - else: - # Has the permission globally, return all results - return queryset + return AccessControlList.objects.filter_by_access( + self.object_permission, self.request.user, queryset=queryset + ) else: return queryset diff --git a/mayan/apps/converter/__init__.py b/mayan/apps/converter/__init__.py index 8578c59ddb..c40a4a2e78 100644 --- a/mayan/apps/converter/__init__.py +++ b/mayan/apps/converter/__init__.py @@ -1,9 +1,9 @@ from __future__ import unicode_literals -from .classes import ( +from .classes import ( # NOQA BaseTransformation, TransformationResize, TransformationRotate, TransformationZoom -) # NOQA +) from .runtime import converter_class # NOQA default_app_config = 'converter.apps.ConverterApp' diff --git a/mayan/apps/converter/classes.py b/mayan/apps/converter/classes.py index bf151afbbd..db5d4aabee 100644 --- a/mayan/apps/converter/classes.py +++ b/mayan/apps/converter/classes.py @@ -2,7 +2,6 @@ from __future__ import unicode_literals import base64 import logging -from operator import xor import os try: diff --git a/mayan/apps/converter/tests/test_classes.py b/mayan/apps/converter/tests/test_classes.py index 6d6146e151..aece4b2733 100644 --- a/mayan/apps/converter/tests/test_classes.py +++ b/mayan/apps/converter/tests/test_classes.py @@ -78,13 +78,6 @@ class TransformationTestCase(TestCase): percent=TRANSFORMATION_ZOOM_PERCENT ) - #self.assertEqual( - # #transformation_rotate ^ transformation_resize ^ transformation_zoom, - # transformation_rotate ^ transformation_resize ^ transformation_zoom, - # #transformation_resize ^ transformation_zoom, - # TRANSFORMATION_COMBINED_CACHE_HASH - #) - self.assertEqual( BaseTransformation.combine( (transformation_rotate, transformation_resize, transformation_zoom) diff --git a/mayan/apps/document_indexing/models.py b/mayan/apps/document_indexing/models.py index e6c983813c..e3499c718a 100644 --- a/mayan/apps/document_indexing/models.py +++ b/mayan/apps/document_indexing/models.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.db import models from django.utils.encoding import python_2_unicode_compatible @@ -12,7 +11,6 @@ from mptt.models import MPTTModel from acls.models import AccessControlList from documents.models import Document, DocumentType from documents.permissions import permission_document_view -from permissions import Permission from .managers import ( DocumentIndexInstanceNodeManager, IndexManager, IndexInstanceNodeManager @@ -177,14 +175,9 @@ class IndexInstanceNode(MPTTModel): def get_item_count(self, user): if self.index_template_node.link_documents: - queryset = self.documents - - try: - Permission.check_permissions(user, (permission_document_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_document_view, user, queryset=self.documents + ) return queryset.count() else: diff --git a/mayan/apps/document_indexing/views.py b/mayan/apps/document_indexing/views.py index 92e704289b..44b932285d 100644 --- a/mayan/apps/document_indexing/views.py +++ b/mayan/apps/document_indexing/views.py @@ -86,18 +86,10 @@ class SetupIndexDocumentTypesView(AssignRemoveView): self.get_object().document_types.add(item) def get_document_queryset(self): - queryset = DocumentType.objects.all() - - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_view, self.request.user, queryset - ) - - return queryset + return AccessControlList.objects.filter_by_access( + permission_document_view, self.request.user, + queryset=DocumentType.objects.all() + ) def get_extra_context(self): return { diff --git a/mayan/apps/document_signatures/forms.py b/mayan/apps/document_signatures/forms.py index 15c8f46663..d5347bf20f 100644 --- a/mayan/apps/document_signatures/forms.py +++ b/mayan/apps/document_signatures/forms.py @@ -3,11 +3,9 @@ from __future__ import absolute_import, unicode_literals import logging from django import forms -from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList -from permissions import Permission from common.forms import DetailForm from django_gpg.models import Key @@ -35,14 +33,9 @@ class DocumentVersionSignatureCreateForm(forms.Form): DocumentVersionSignatureCreateForm, self ).__init__(*args, **kwargs) - queryset = Key.objects.private_keys() - - try: - Permission.check_permissions(user, (permission_key_sign,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_key_sign, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_key_sign, user, queryset=Key.objects.private_keys() + ) self.fields['key'].queryset = queryset diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 64c18a5beb..ee975aa16a 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -154,8 +154,9 @@ class DocumentsApp(MayanAppConfig): func=lambda context: document_html_widget( document_page=context['object'].latest_version.pages.first(), click_view='rest_api:documentpage-image', - click_view_arguments_lazy=lambda: (context['object'].latest_version.pages.first().pk,), - click_view_querydict={'size': setting_display_size.value}, + click_view_arguments_lazy=lambda: ( + context['object'].latest_version.pages.first().pk, + ), click_view_querydict={'size': setting_display_size.value}, gallery_name='documents:document_list', size=setting_thumbnail_size.value, title=getattr(context['object'], 'label', None), @@ -212,8 +213,9 @@ class DocumentsApp(MayanAppConfig): func=lambda context: document_html_widget( document_page=context['object'].latest_version.pages.first(), click_view='rest_api:documentpage-image', - click_view_arguments_lazy=lambda: (context['object'].latest_version.pages.first().pk,), - click_view_querydict={'size': setting_display_size.value}, + click_view_arguments_lazy=lambda: ( + context['object'].latest_version.pages.first().pk, + ), click_view_querydict={'size': setting_display_size.value}, gallery_name='documents:delete_document_list', size=setting_thumbnail_size.value, title=getattr(context['object'], 'label', None), diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index 4ee5f4abd8..57a95478e5 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -4,13 +4,11 @@ import logging from operator import itemgetter from django import forms -from django.core.exceptions import PermissionDenied from django.template.defaultfilters import filesizeformat from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList from common.forms import DetailForm, ModelForm -from permissions import Permission from .models import ( Document, DocumentType, DocumentPage, DocumentTypeFilename @@ -162,13 +160,10 @@ class DocumentTypeSelectForm(forms.Form): logger.debug('user: %s', user) super(DocumentTypeSelectForm, self).__init__(*args, **kwargs) - queryset = DocumentType.objects.all() - try: - Permission.check_permissions(user, (permission_document_create,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_create, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_document_create, user, + queryset=DocumentType.objects.all() + ) self.fields['document_type'] = forms.ModelChoiceField( empty_label=None, label=_('Document type'), queryset=queryset, diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index a8e89701b9..06f3afb64b 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -5,7 +5,6 @@ import logging import uuid from django.conf import settings -from django.core.exceptions import PermissionDenied from django.core.files import File from django.core.urlresolvers import reverse from django.db import models, transaction @@ -23,7 +22,6 @@ from converter.exceptions import InvalidOfficeFormat, PageCountError from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION from converter.models import Transformation from mimetype.api import get_mimetype -from permissions import Permission from .events import ( event_document_create, event_document_new_version, @@ -113,14 +111,9 @@ class DocumentType(models.Model): return DeletedDocument.objects.filter(document_type=self) def get_document_count(self, user): - queryset = self.documents - - try: - Permission.check_permissions(user, (permission_document_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_document_view, user, queryset=self.documents + ) return queryset.count() diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 3508ed1ddd..4655f1bdce 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -95,19 +95,9 @@ class DeletedDocumentListView(DocumentListView): } def get_document_queryset(self): - queryset = Document.trash.all() - - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_view, self.request.user, queryset - ) - - return DeletedDocument.objects.filter( - pk__in=queryset.values_list('pk', flat=True) + return AccessControlList.objects.filter_by_access( + permission_document_view, self.request.user, + queryset=DeletedDocument.trash.all() ) @@ -663,14 +653,9 @@ def document_document_type_edit(request, document_id=None, document_id_list=None elif document_id_list: queryset = Document.objects.filter(pk__in=document_id_list) - try: - Permission.check_permissions( - request.user, (permission_document_properties_edit,) - ) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_properties_edit, request.user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_document_properties_edit, request.user, queryset=queryset + ) if not queryset: if document_id: @@ -806,18 +791,10 @@ class DocumentDownloadFormView(FormView): return self.post_action_redirect def get_queryset(self): - queryset = self.get_document_queryset() - - try: - Permission.check_permissions( - self.request.user, (permission_document_download,) - ) - except PermissionDenied: - return AccessControlList.objects.filter_by_access( - permission_document_download, self.request.user, queryset - ) - else: - return queryset + return AccessControlList.objects.filter_by_access( + permission_document_download, self.request.user, + queryset=self.get_document_queryset() + ) class DocumentDownloadView(SingleObjectDownloadView): @@ -863,16 +840,9 @@ class DocumentDownloadView(SingleObjectDownloadView): queryset = self.model.objects.filter(pk__in=id_list.split(',')) - try: - Permission.check_permissions( - self.request.user, (permission_document_download,) - ) - except PermissionDenied: - return AccessControlList.objects.filter_by_access( - permission_document_download, self.request.user, queryset - ) - else: - return queryset + return AccessControlList.objects.filter_by_access( + permission_document_download, self.request.user, queryset + ) def get_file(self): queryset = self.get_document_queryset() @@ -949,14 +919,9 @@ def document_update_page_count(request, document_id=None, document_id_list=None) messages.error(request, _('At least one document must be selected.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) - try: - Permission.check_permissions( - request.user, (permission_document_tools,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_document_tools, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission_document_tools, request.user, queryset=documents + ) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) @@ -1018,14 +983,9 @@ def document_clear_transformations(request, document_id=None, document_id_list=N ) ) - try: - Permission.check_permissions( - request.user, (permission_transformation_delete,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_transformation_delete, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission_transformation_delete, request.user, queryset=documents + ) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', post_redirect or reverse('documents:document_list')))) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_redirect or reverse('documents:document_list')))) diff --git a/mayan/apps/dynamic_search/classes.py b/mayan/apps/dynamic_search/classes.py index aa3b03b122..ea4635a103 100644 --- a/mayan/apps/dynamic_search/classes.py +++ b/mayan/apps/dynamic_search/classes.py @@ -5,12 +5,10 @@ import logging import re from django.apps import apps -from django.core.exceptions import PermissionDenied from django.db.models import Q from django.utils.module_loading import import_string from django.utils.translation import ugettext as _ -from permissions import Permission from .settings import setting_limit @@ -229,12 +227,9 @@ class SearchModel(object): ) if self.permission: - try: - Permission.check_permissions(user, [self.permission]) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - self.permission, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + self.permission, user, queryset + ) return queryset, result_set, elapsed_time diff --git a/mayan/apps/folders/api_views.py b/mayan/apps/folders/api_views.py index 730194b621..04b336cf3d 100644 --- a/mayan/apps/folders/api_views.py +++ b/mayan/apps/folders/api_views.py @@ -147,18 +147,10 @@ class APIFolderDocumentListView(generics.ListCreateAPIView): def get_queryset(self): folder = self.get_folder() - documents = folder.documents.all() - - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_document_view, self.request.user, documents - ) - - return documents + return AccessControlList.objects.filter_by_access( + permission_document_view, self.request.user, + queryset=folder.documents.all() + ) def perform_create(self, serializer): serializer.save(folder=self.get_folder()) diff --git a/mayan/apps/folders/forms.py b/mayan/apps/folders/forms.py index e0a4b991c7..cb20818141 100644 --- a/mayan/apps/folders/forms.py +++ b/mayan/apps/folders/forms.py @@ -3,11 +3,9 @@ from __future__ import absolute_import, unicode_literals import logging from django import forms -from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList -from permissions import Permission from .models import Folder from .permissions import permission_folder_view @@ -21,15 +19,10 @@ class FolderListForm(forms.Form): logger.debug('user: %s', user) super(FolderListForm, self).__init__(*args, **kwargs) - queryset = Folder.objects.all() - try: - Permission.check_permissions(user, (permission_folder_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_folder_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_folder_view, user, queryset=Folder.objects.all() + ) self.fields['folder'] = forms.ModelChoiceField( - queryset=queryset, - label=_('Folder') + queryset=queryset, label=_('Folder') ) diff --git a/mayan/apps/folders/models.py b/mayan/apps/folders/models.py index b6e97d87a4..067ca1ff73 100644 --- a/mayan/apps/folders/models.py +++ b/mayan/apps/folders/models.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.db import models from django.utils.encoding import python_2_unicode_compatible @@ -9,7 +8,6 @@ from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view -from permissions import Permission from .managers import FolderManager @@ -45,14 +43,9 @@ class Folder(models.Model): verbose_name_plural = _('Folders') def get_document_count(self, user): - queryset = self.documents - - try: - Permission.check_permissions(user, (permission_document_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_document_view, user, queryset=self.documents + ) return queryset.count() diff --git a/mayan/apps/folders/views.py b/mayan/apps/folders/views.py index ffde47a614..7d7c2f7c3e 100644 --- a/mayan/apps/folders/views.py +++ b/mayan/apps/folders/views.py @@ -145,14 +145,9 @@ def folder_add_document(request, document_id=None, document_id_list=None): ) ) - try: - Permission.check_permissions( - request.user, (permission_folder_add_document,) - ) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_folder_add_document, request.user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_folder_add_document, request.user, queryset=queryset + ) post_action_redirect = None if document_id: @@ -227,14 +222,9 @@ def folder_document_remove(request, folder_id, document_id=None, document_id_lis messages.error(request, _('Must provide at least one folder document.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) - try: - Permission.check_permissions( - request.user, (permission_folder_remove_document,) - ) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_folder_remove_document, request.user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_folder_remove_document, request.user, queryset=queryset + ) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) diff --git a/mayan/apps/mailer/views.py b/mayan/apps/mailer/views.py index e3965003bd..e26002d730 100644 --- a/mayan/apps/mailer/views.py +++ b/mayan/apps/mailer/views.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals from django.conf import settings from django.contrib import messages from django.contrib.sites.models import Site -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import render_to_response @@ -14,7 +13,6 @@ from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList from common.generics import SingleObjectListView from documents.models import Document -from permissions import Permission from .forms import DocumentMailForm from .models import LogEntry @@ -45,12 +43,9 @@ def send_document_link(request, document_id=None, document_id_list=None, as_atta else: permission = permission_mailing_link - try: - Permission.check_permissions(request.user, (permission,)) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission, request.user, queryset=documents + ) if not documents: messages.error(request, _('Must provide at least one document.')) diff --git a/mayan/apps/metadata/views.py b/mayan/apps/metadata/views.py index 62631129b0..e367823037 100644 --- a/mayan/apps/metadata/views.py +++ b/mayan/apps/metadata/views.py @@ -42,14 +42,9 @@ def metadata_edit(request, document_id=None, document_id_list=None): elif document_id_list: documents = Document.objects.filter(pk__in=document_id_list) - try: - Permission.check_permissions( - request.user, (permission_metadata_document_edit,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_metadata_document_edit, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission_metadata_document_edit, request.user, queryset=documents + ) if not documents: if document_id: @@ -201,14 +196,9 @@ def metadata_add(request, document_id=None, document_id_list=None): ) ) - try: - Permission.check_permissions( - request.user, (permission_metadata_document_add,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_metadata_document_add, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission_metadata_document_add, request.user, queryset=documents + ) if not documents: if document_id: @@ -337,14 +327,9 @@ def metadata_remove(request, document_id=None, document_id_list=None): elif document_id_list: documents = Document.objects.filter(pk__in=document_id_list) - try: - Permission.check_permissions( - request.user, (permission_metadata_document_remove,) - ) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_metadata_document_remove, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission_metadata_document_remove, request.user, queryset=documents + ) if not documents: if document_id: diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 2d45129369..ca141efd2b 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -358,9 +358,11 @@ class SourceColumn(object): return cls._registry[source] except KeyError: try: + # Try it as a queryset return cls._registry[source.model] except AttributeError: try: + # It seems to be an instance, try its class return cls._registry[source.__class__] except KeyError: try: diff --git a/mayan/apps/navigation/templatetags/navigation_tags.py b/mayan/apps/navigation/templatetags/navigation_tags.py index b77995b390..6d0a2a60f7 100644 --- a/mayan/apps/navigation/templatetags/navigation_tags.py +++ b/mayan/apps/navigation/templatetags/navigation_tags.py @@ -48,7 +48,7 @@ def get_source_columns(source): # Is iterable? source = source[0] except TypeError: - # It is not + # It is not an iterable pass except IndexError: # It a list and it's empty diff --git a/mayan/apps/rest_api/filters.py b/mayan/apps/rest_api/filters.py index e390fb8bb5..845622fdb5 100644 --- a/mayan/apps/rest_api/filters.py +++ b/mayan/apps/rest_api/filters.py @@ -1,27 +1,22 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied - from rest_framework.filters import BaseFilterBackend from acls.models import AccessControlList -from permissions import Permission class MayanObjectPermissionsFilter(BaseFilterBackend): def filter_queryset(self, request, queryset, view): - required_permission = getattr( + # TODO: fix variable name to make it clear it should be a single + # permission + + required_permissions = getattr( view, 'mayan_object_permissions', {} ).get(request.method, None) - if required_permission: - try: - Permission.check_permissions(request.user, required_permission) - except PermissionDenied: - return AccessControlList.objects.filter_by_access( - required_permission[0], request.user, queryset - ) - else: - return queryset + if required_permissions: + return AccessControlList.objects.filter_by_access( + required_permissions[0], request.user, queryset=queryset + ) else: return queryset diff --git a/mayan/apps/tags/forms.py b/mayan/apps/tags/forms.py index b71631c11d..61e83aa800 100644 --- a/mayan/apps/tags/forms.py +++ b/mayan/apps/tags/forms.py @@ -3,11 +3,9 @@ from __future__ import absolute_import, unicode_literals import logging from django import forms -from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList -from permissions import Permission from .models import Tag from .permissions import permission_tag_view @@ -21,17 +19,13 @@ class TagListForm(forms.Form): logger.debug('user: %s', user) super(TagListForm, self).__init__(*args, **kwargs) - queryset = Tag.objects.all() - try: - Permission.check_permissions(user, (permission_tag_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_tag_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_tag_view, user, queryset=Tag.objects.all() + ) self.fields['tag'] = forms.ModelChoiceField( - queryset=queryset, - label=_('Tags')) + queryset=queryset, label=_('Tags') + ) class TagMultipleSelectionForm(forms.Form): @@ -40,13 +34,9 @@ class TagMultipleSelectionForm(forms.Form): logger.debug('user: %s', user) super(TagMultipleSelectionForm, self).__init__(*args, **kwargs) - queryset = Tag.objects.all() - try: - Permission.check_permissions(user, (permission_tag_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_tag_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_tag_view, user, queryset=Tag.objects.all() + ) self.fields['tags'] = forms.MultipleChoiceField( label=_('Tags'), choices=queryset.values_list('id', 'label'), diff --git a/mayan/apps/tags/models.py b/mayan/apps/tags/models.py index 941654ffca..09dc170d98 100644 --- a/mayan/apps/tags/models.py +++ b/mayan/apps/tags/models.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals from django.core.urlresolvers import reverse from django.db import models -from django.core.exceptions import PermissionDenied from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ @@ -11,7 +10,6 @@ from colorful.fields import RGBColorField from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view -from permissions import Permission @python_2_unicode_compatible @@ -35,14 +33,9 @@ class Tag(models.Model): verbose_name_plural = _('Tags') def get_document_count(self, user): - queryset = self.documents - - try: - Permission.check_permissions(user, (permission_document_view,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_view, user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_document_view, user, queryset=self.documents + ) return queryset.count() diff --git a/mayan/apps/tags/views.py b/mayan/apps/tags/views.py index 32e8234830..592ecaa28a 100644 --- a/mayan/apps/tags/views.py +++ b/mayan/apps/tags/views.py @@ -45,12 +45,9 @@ def tag_attach(request, document_id=None, document_id_list=None): elif document_id_list: queryset = Document.objects.filter(pk__in=document_id_list) - try: - Permission.check_permissions(request.user, (permission_tag_attach,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_tag_attach, request.user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_tag_attach, request.user, queryset=queryset + ) if not queryset: if document_id: @@ -164,12 +161,9 @@ def tag_delete(request, tag_id=None, tag_id_list=None): ) ) - try: - Permission.check_permissions(request.user, (permission_tag_delete,)) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_tag_delete, request.user, queryset - ) + queryset = AccessControlList.objects.filter_by_access( + permission_tag_delete, request.user, queryset=queryset + ) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) @@ -291,12 +285,9 @@ def tag_remove(request, document_id=None, document_id_list=None, tag_id=None, ta ) ) - try: - Permission.check_permissions(request.user, (permission_tag_remove,)) - except PermissionDenied: - documents = AccessControlList.objects.filter_by_access( - permission_tag_remove, request.user, documents - ) + documents = AccessControlList.objects.filter_by_access( + permission_tag_remove, request.user, documents + ) post_action_redirect = None diff --git a/mayan/apps/tags/widgets.py b/mayan/apps/tags/widgets.py index ec1cf31ff4..aa6595a71d 100644 --- a/mayan/apps/tags/widgets.py +++ b/mayan/apps/tags/widgets.py @@ -1,12 +1,9 @@ from __future__ import absolute_import, unicode_literals from django.apps import apps -from django.core.exceptions import PermissionDenied from django.utils.html import escape from django.utils.safestring import mark_safe -from permissions import Permission - from .permissions import permission_tag_view @@ -20,14 +17,9 @@ def widget_document_tags(document, user): tags_template = [] - tags = document.attached_tags().all() - - try: - Permission.check_permissions(user, (permission_tag_view,)) - except PermissionDenied: - tags = AccessControlList.objects.filter_by_access( - permission_tag_view, user, tags - ) + tags = AccessControlList.objects.filter_by_access( + permission_tag_view, user, queryset=document.attached_tags().all() + ) for tag in tags: tags_template.append(widget_single_tag(tag)) From 5893e149e097b01c74fe5ddeea944da5e0607910 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 04:58:05 -0400 Subject: [PATCH 023/119] Reduce the check_access boilerplate code. --- mayan/apps/acls/managers.py | 59 +++++----- mayan/apps/acls/views.py | 51 +++----- mayan/apps/checkouts/api_views.py | 39 ++----- mayan/apps/checkouts/views.py | 39 ++----- mayan/apps/common/mixins.py | 15 +-- mayan/apps/converter/views.py | 54 +++------ mayan/apps/document_comments/views.py | 40 ++----- mayan/apps/document_indexing/api_views.py | 27 ++--- mayan/apps/document_indexing/views.py | 40 ++----- mayan/apps/document_signatures/views.py | 76 ++++-------- mayan/apps/document_states/views.py | 65 ++++------- mayan/apps/documents/api_views.py | 15 +-- mayan/apps/documents/views.py | 136 +++++++++------------- mayan/apps/events/views.py | 14 +-- mayan/apps/folders/api_views.py | 26 ++--- mayan/apps/folders/views.py | 30 ++--- mayan/apps/linking/views.py | 78 ++++--------- mayan/apps/metadata/api_views.py | 75 ++++-------- mayan/apps/metadata/views.py | 14 +-- mayan/apps/navigation/classes.py | 25 ++-- mayan/apps/ocr/views.py | 14 +-- mayan/apps/permissions/classes.py | 9 +- mayan/apps/rest_api/permissions.py | 28 ++--- mayan/apps/sources/views.py | 28 ++--- mayan/apps/tags/api_views.py | 39 +++---- mayan/apps/tags/serializers.py | 14 +-- mayan/apps/tags/views.py | 19 ++- 27 files changed, 364 insertions(+), 705 deletions(-) diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index c817371005..63eb8c6f48 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -52,38 +52,43 @@ class AccessControlListManager(models.Manager): return True try: - stored_permissions = [ - permission.stored_permission for permission in permissions - ] - except TypeError: - # Not a list of permissions, just one - stored_permissions = [permissions.stored_permission] - - if related: - obj = return_attrib(obj, related) - - try: - parent_accessor = ModelPermission.get_inheritance(obj._meta.model) - except KeyError: - pass - else: + return Permission.check_permissions( + requester=user, permissions=permissions + ) + except PermissionDenied: try: - return self.check_access( - permissions, user, getattr(obj, parent_accessor) - ) - except PermissionDenied: + stored_permissions = [ + permission.stored_permission for permission in permissions + ] + except TypeError: + # Not a list of permissions, just one + stored_permissions = (permissions.stored_permission,) + + if related: + obj = return_attrib(obj, related) + + try: + parent_accessor = ModelPermission.get_inheritance(obj._meta.model) + except KeyError: pass + else: + try: + return self.check_access( + permissions, user, getattr(obj, parent_accessor) + ) + except PermissionDenied: + pass - user_roles = [] - for group in user.groups.all(): - for role in group.roles.all(): - if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))): - return True + user_roles = [] + for group in user.groups.all(): + for role in group.roles.all(): + if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))): + return True - user_roles.append(role) + user_roles.append(role) - if not self.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles).exists(): - raise PermissionDenied(ugettext('Insufficient access.')) + if not self.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles).exists(): + raise PermissionDenied(ugettext('Insufficient access.')) def filter_by_access(self, permission, user, queryset): if user.is_superuser or user.is_staff: diff --git a/mayan/apps/acls/views.py b/mayan/apps/acls/views.py index 2ee1228f20..aae5ae888c 100644 --- a/mayan/apps/acls/views.py +++ b/mayan/apps/acls/views.py @@ -4,7 +4,6 @@ import itertools import logging from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404 @@ -14,7 +13,7 @@ from common.views import ( AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView ) -from permissions import Permission, PermissionNamespace +from permissions import PermissionNamespace from permissions.models import StoredPermission from .classes import ModelPermission @@ -41,14 +40,10 @@ class ACLCreateView(SingleObjectCreateView): except self.content_type.model_class().DoesNotExist: raise Http404 - try: - Permission.check_permissions( - request.user, permissions=(permission_acl_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_acl_edit, request.user, self.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_acl_edit, user=request.user, + obj=self.content_object + ) return super(ACLCreateView, self).dispatch(request, *args, **kwargs) @@ -92,14 +87,10 @@ class ACLDeleteView(SingleObjectDeleteView): def dispatch(self, request, *args, **kwargs): acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, permissions=(permission_acl_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_acl_edit, request.user, acl.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_acl_edit, user=request.user, + obj=acl.content_object + ) return super(ACLDeleteView, self).dispatch(request, *args, **kwargs) @@ -133,14 +124,10 @@ class ACLListView(SingleObjectListView): except self.content_type.model_class().DoesNotExist: raise Http404 - try: - Permission.check_permissions( - request.user, permissions=(permission_acl_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_acl_view, request.user, self.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_acl_view, user=request.user, + obj=self.content_object + ) return super(ACLListView, self).dispatch(request, *args, **kwargs) @@ -183,14 +170,10 @@ class ACLPermissionsView(AssignRemoveView): def dispatch(self, request, *args, **kwargs): acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, permissions=(permission_acl_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_acl_edit, request.user, acl.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_acl_edit, user=request.user, + obj=acl.content_object + ) return super( ACLPermissionsView, self diff --git a/mayan/apps/checkouts/api_views.py b/mayan/apps/checkouts/api_views.py index 507854d428..6264dfc4a4 100644 --- a/mayan/apps/checkouts/api_views.py +++ b/mayan/apps/checkouts/api_views.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals import pytz -from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics, status @@ -11,7 +10,6 @@ from rest_framework.response import Response from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view -from permissions import Permission from .models import DocumentCheckout from .permissions import ( @@ -60,14 +58,10 @@ class APICheckedoutDocumentListView(generics.ListCreateAPIView): document = get_object_or_404( Document, pk=serializer.data['document'] ) - try: - Permission.check_permissions( - request.user, (permission_document_checkout,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_checkout, request.user, document - ) + AccessControlList.objects.check_access( + permissions=permission_document_checkout, user=request.user, + obj=document + ) timezone = pytz.utc @@ -126,24 +120,15 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): document = self.get_object().document if document.checkout_info().user == request.user: - try: - Permission.check_permissions( - request.user, (permission_document_checkin,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_checkin, request.user, document - ) + AccessControlList.objects.check_access( + permissions=permission_document_checkin, user=request.user, + obj=document + ) else: - try: - Permission.check_permissions( - request.user, (permission_document_checkin_override,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_checkin_override, request.user, - document - ) + AccessControlList.objects.check_access( + permissions=permission_document_checkin_override, + user=request.user, obj=document + ) return super( APICheckedoutDocumentView, self diff --git a/mayan/apps/checkouts/views.py b/mayan/apps/checkouts/views.py index a469265964..71a4ed1e8b 100644 --- a/mayan/apps/checkouts/views.py +++ b/mayan/apps/checkouts/views.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 @@ -15,7 +14,6 @@ from common.generics import ( ConfirmView, SingleObjectCreateView, SingleObjectDetailView ) from common.utils import encapsulate -from permissions import Permission from .exceptions import DocumentAlreadyCheckedOut, DocumentNotCheckedOut from .forms import DocumentCheckoutForm, DocumentCheckoutDefailForm @@ -32,14 +30,10 @@ class CheckoutDocumentView(SingleObjectCreateView): def dispatch(self, request, *args, **kwargs): self.document = get_object_or_404(Document, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, (permission_document_checkout,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_checkout, request.user, self.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_checkout, user=request.user, + obj=self.document + ) return super( CheckoutDocumentView, self @@ -151,24 +145,15 @@ class DocumentCheckinView(ConfirmView): document = self.get_object() if document.checkout_info().user == self.request.user: - try: - Permission.check_permissions( - self.request.user, (permission_document_checkin,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_checkin, self.request.user, document - ) + AccessControlList.objects.check_access( + permissions=permission_document_checkin, + user=self.request.user, obj=document + ) else: - try: - Permission.check_permissions( - self.request.user, (permission_document_checkin_override,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_checkin_override, self.request.user, - document - ) + AccessControlList.objects.check_access( + permissions=permission_document_checkin_override, + user=self.request.user, obj=document + ) try: document.check_in(user=self.request.user) diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index 8571f18c09..97768c6743 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -128,16 +128,11 @@ class ObjectPermissionCheckMixin(object): ) if self.object_permission: - try: - Permission.check_permissions( - request.user, (self.object_permission,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - self.object_permission, request.user, - self.get_permission_object(), - related=getattr(self, 'object_permission_related', None) - ) + AccessControlList.objects.check_access( + permissions=self.object_permission, user=request.user, + obj=self.get_permission_object(), + related=getattr(self, 'object_permission_related', None) + ) return super( ObjectPermissionCheckMixin, self diff --git a/mayan/apps/converter/views.py b/mayan/apps/converter/views.py index c1fe4044e2..540ad144a9 100644 --- a/mayan/apps/converter/views.py +++ b/mayan/apps/converter/views.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals import logging from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.http import Http404 from django.shortcuts import get_object_or_404 @@ -14,7 +13,6 @@ from common.views import ( SingleObjectCreateView, SingleObjectDeleteView, SingleObjectEditView, SingleObjectListView ) -from permissions import Permission from .models import Transformation from .permissions import ( @@ -33,15 +31,10 @@ class TransformationDeleteView(SingleObjectDeleteView): Transformation, pk=self.kwargs['pk'] ) - try: - Permission.check_permissions( - request.user, (permission_transformation_delete,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_transformation_delete, request.user, - self.transformation.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_transformation_delete, user=request.user, + obj=self.transformation.content_object + ) return super(TransformationDeleteView, self).dispatch( request, *args, **kwargs @@ -94,15 +87,10 @@ class TransformationCreateView(SingleObjectCreateView): except content_type.model_class().DoesNotExist: raise Http404 - try: - Permission.check_permissions( - request.user, (permission_transformation_create,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_transformation_create, request.user, - self.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_transformation_create, user=request.user, + obj=self.content_object + ) return super(TransformationCreateView, self).dispatch( request, *args, **kwargs @@ -150,15 +138,10 @@ class TransformationEditView(SingleObjectEditView): Transformation, pk=self.kwargs['pk'] ) - try: - Permission.check_permissions( - request.user, (permission_transformation_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_transformation_edit, request.user, - self.transformation.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_transformation_edit, user=request.user, + obj=self.transformation.content_object + ) return super(TransformationEditView, self).dispatch( request, *args, **kwargs @@ -212,15 +195,10 @@ class TransformationListView(SingleObjectListView): except content_type.model_class().DoesNotExist: raise Http404 - try: - Permission.check_permissions( - request.user, (permission_transformation_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_transformation_view, request.user, - self.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_transformation_view, user=request.user, + obj=self.content_object + ) return super(TransformationListView, self).dispatch( request, *args, **kwargs diff --git a/mayan/apps/document_comments/views.py b/mayan/apps/document_comments/views.py index 943475d886..767dc85b13 100644 --- a/mayan/apps/document_comments/views.py +++ b/mayan/apps/document_comments/views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ @@ -10,7 +9,6 @@ from common.generics import ( SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView ) from documents.models import Document -from permissions import Permission from .models import Comment from .permissions import ( @@ -25,14 +23,10 @@ class DocumentCommentCreateView(SingleObjectCreateView): object_verbose_name = _('Comment') def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_comment_create,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_comment_create, request.user, self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_comment_create, user=request.user, + obj=self.get_document() + ) return super( DocumentCommentCreateView, self @@ -67,15 +61,10 @@ class DocumentCommentDeleteView(SingleObjectDeleteView): model = Comment def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_comment_delete,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_comment_delete, request.user, - self.get_object().document - ) + AccessControlList.objects.check_access( + permissions=permission_comment_delete, user=request.user, + obj=self.get_object().document + ) return super( DocumentCommentDeleteView, self @@ -102,15 +91,10 @@ class DocumentCommentListView(SingleObjectListView): return get_object_or_404(Document, pk=self.kwargs['pk']) def get_queryset(self): - try: - Permission.check_permissions( - self.request.user, (permission_comment_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_comment_view, self.request.user, - self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_comment_view, user=self.request.user, + obj=self.get_document() + ) return self.get_document().comments.all() diff --git a/mayan/apps/document_indexing/api_views.py b/mayan/apps/document_indexing/api_views.py index 80b5b063bb..02126ccd5d 100644 --- a/mayan/apps/document_indexing/api_views.py +++ b/mayan/apps/document_indexing/api_views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics @@ -9,7 +8,6 @@ from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view from documents.serializers import DocumentSerializer -from permissions import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -99,15 +97,10 @@ class APIIndexNodeInstanceDocumentListView(generics.ListAPIView): index_node_instance = get_object_or_404( IndexInstanceNode, pk=self.kwargs['pk'] ) - try: - Permission.check_permissions( - self.request.user, (permission_document_indexing_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_indexing_view, self.request.user, - index_node_instance.index - ) + AccessControlList.objects.check_access( + permissions=permission_document_indexing_view, + user=self.request.user, obj=index_node_instance.index + ) return index_node_instance.documents.all() @@ -177,13 +170,9 @@ class APIDocumentIndexListView(generics.ListAPIView): def get_queryset(self): document = get_object_or_404(Document, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, self.request.user, document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=document + ) return document.node_instances.all() diff --git a/mayan/apps/document_indexing/views.py b/mayan/apps/document_indexing/views.py index 44b932285d..2642289c87 100644 --- a/mayan/apps/document_indexing/views.py +++ b/mayan/apps/document_indexing/views.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse, reverse_lazy from django.shortcuts import get_object_or_404 from django.utils.html import mark_safe @@ -15,7 +14,6 @@ from common.views import ( from documents.models import Document, DocumentType from documents.permissions import permission_document_view from documents.views import DocumentListView -from permissions import Permission from .forms import IndexTemplateNodeForm from .models import ( @@ -143,15 +141,10 @@ class TemplateNodeCreateView(SingleObjectCreateView): model = IndexTemplateNode def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_indexing_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_indexing_edit, request.user, - self.get_parent_node().index - ) + AccessControlList.objects.check_access( + permissions=permission_document_indexing_edit, user=request.user, + obj=self.get_parent_node().index + ) return super( TemplateNodeCreateView, self @@ -236,15 +229,10 @@ class IndexInstanceNodeView(DocumentListView): IndexInstanceNode, pk=self.kwargs['pk'] ) - try: - Permission.check_permissions( - request.user, (permission_document_indexing_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_indexing_view, - request.user, self.index_instance_node.index() - ) + AccessControlList.objects.check_access( + permissions=permission_document_indexing_view, + user=request.user, obj=self.index_instance_node.index() + ) if self.index_instance_node: if self.index_instance_node.index_template_node.link_documents: @@ -299,14 +287,10 @@ class DocumentIndexNodeListView(SingleObjectListView): object_permission_related = 'index' def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.get_document() + ) return super( DocumentIndexNodeListView, self diff --git a/mayan/apps/document_signatures/views.py b/mayan/apps/document_signatures/views.py index 3057086c44..b556c4601a 100644 --- a/mayan/apps/document_signatures/views.py +++ b/mayan/apps/document_signatures/views.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals import logging from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.files import File from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect @@ -19,7 +18,6 @@ from common.utils import TemporaryFile from django_gpg.exceptions import NeedPassphrase, PassphraseError from django_gpg.permissions import permission_key_sign from documents.models import DocumentVersion -from permissions import Permission from .forms import ( DocumentVersionSignatureCreateForm, @@ -47,14 +45,9 @@ class DocumentVersionDetachedSignatureCreateView(FormView): key = form.cleaned_data['key'] passphrase = form.cleaned_data['passphrase'] or None - try: - Permission.check_permissions( - self.request.user, (permission_key_sign,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_key_sign, self.request.user, key - ) + AccessControlList.objects.check_access( + permissions=permission_key_sign, user=self.request.user, obj=key + ) try: with self.get_document_version().open() as file_object: @@ -103,15 +96,10 @@ class DocumentVersionDetachedSignatureCreateView(FormView): ).form_valid(form) def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_version_sign_detached,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_version_sign_detached, request.user, - self.get_document_version().document - ) + AccessControlList.objects.check_access( + permissions=permission_document_version_sign_detached, + user=request.user, obj=self.get_document_version().document + ) return super( DocumentVersionDetachedSignatureCreateView, self @@ -153,14 +141,9 @@ class DocumentVersionEmbeddedSignatureCreateView(FormView): key = form.cleaned_data['key'] passphrase = form.cleaned_data['passphrase'] or None - try: - Permission.check_permissions( - self.request.user, (permission_key_sign,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_key_sign, self.request.user, key - ) + AccessControlList.objects.check_access( + permissions=permission_key_sign, user=self.request.user, obj=key + ) try: with self.get_document_version().open() as file_object: @@ -214,15 +197,10 @@ class DocumentVersionEmbeddedSignatureCreateView(FormView): ).form_valid(form) def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_version_sign_embedded,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_version_sign_embedded, request.user, - self.get_document_version().document - ) + AccessControlList.objects.check_access( + permissions=permission_document_version_sign_embedded, + user=request.user, obj=self.get_document_version().document + ) return super( DocumentVersionEmbeddedSignatureCreateView, self @@ -312,15 +290,10 @@ class DocumentVersionSignatureDownloadView(SingleObjectDownloadView): class DocumentVersionSignatureListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_version_signature_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_version_signature_view, request.user, - self.get_document_version() - ) + AccessControlList.objects.check_access( + permissions=permission_document_version_signature_view, + user=request.user, obj=self.get_document_version() + ) return super( DocumentVersionSignatureListView, self @@ -349,15 +322,10 @@ class DocumentVersionSignatureUploadView(SingleObjectCreateView): model = DetachedSignature def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_version_signature_upload,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_version_signature_upload, request.user, - self.get_document_version() - ) + AccessControlList.objects.check_access( + permissions=permission_document_version_signature_upload, + user=request.user, obj=self.get_document_version() + ) return super( DocumentVersionSignatureUploadView, self diff --git a/mayan/apps/document_states/views.py b/mayan/apps/document_states/views.py index 132212c8f0..c63ac0f777 100644 --- a/mayan/apps/document_states/views.py +++ b/mayan/apps/document_states/views.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse, reverse_lazy from django.db.utils import IntegrityError from django.http import HttpResponseRedirect @@ -16,7 +15,6 @@ from common.views import ( ) from documents.models import Document from documents.views import DocumentListView -from permissions import Permission from .forms import ( WorkflowForm, WorkflowInstanceTransitionForm, WorkflowStateForm, @@ -32,15 +30,10 @@ from .permissions import ( class DocumentWorkflowInstanceListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_workflow_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_workflow_view, request.user, - self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_workflow_view, user=request.user, + obj=self.get_document() + ) return super( DocumentWorkflowInstanceListView, self @@ -66,14 +59,10 @@ class WorkflowDocumentListView(DocumentListView): def dispatch(self, request, *args, **kwargs): self.workflow = get_object_or_404(Workflow, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, (permission_workflow_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_workflow_view, request.user, self.workflow - ) + AccessControlList.objects.check_access( + permissions=permission_workflow_view, user=request.user, + obj=self.workflow + ) return super( WorkflowDocumentListView, self @@ -94,15 +83,10 @@ class WorkflowDocumentListView(DocumentListView): class WorkflowInstanceDetailView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_workflow_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_workflow_view, request.user, - self.get_workflow_instance().document - ) + AccessControlList.objects.check_access( + permissions=permission_workflow_view, users=request.user, + obj=self.get_workflow_instance().document + ) return super( WorkflowInstanceDetailView, self @@ -131,15 +115,10 @@ class WorkflowInstanceTransitionView(FormView): template_name = 'appearance/generic_form.html' def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_workflow_transition,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_workflow_transition, request.user, - self.get_workflow_instance().document - ) + AccessControlList.objects.check_access( + permissions=permission_workflow_transition, user=request.user, + obj=self.get_workflow_instance().document + ) return super( WorkflowInstanceTransitionView, self @@ -249,14 +228,10 @@ class SetupWorkflowDocumentTypesView(AssignRemoveView): class SetupWorkflowStateListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_workflow_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_workflow_view, request.user, self.get_workflow() - ) + AccessControlList.objects.check_access( + permissions=permission_workflow_view, user=request.user, + obj=self.get_workflow() + ) return super( SetupWorkflowStateListView, self diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index e1ff278262..49678e87b1 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals import logging -from django.core.exceptions import PermissionDenied from django.http import HttpResponse from django.shortcuts import get_object_or_404 @@ -11,7 +10,6 @@ from rest_framework import generics, status from rest_framework.response import Response from acls.models import AccessControlList -from permissions import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -379,15 +377,10 @@ class APIDocumentTypeDocumentListView(generics.ListAPIView): def get_queryset(self): document_type = get_object_or_404(DocumentType, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - self.request.user, (permission_document_type_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_type_view, self.request.user, - document_type - ) + AccessControlList.objects.check_access( + permissions=permission_document_type_view, user=self.request.user, + obj=document_type + ) return document_type.documents.all() diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 4655f1bdce..cf42c29bd7 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -25,7 +25,6 @@ from common.mixins import MultipleInstanceActionMixin from converter.literals import DEFAULT_ZOOM_LEVEL from converter.models import Transformation from converter.permissions import permission_transformation_delete -from permissions import Permission from .events import event_document_download, event_document_view from .forms import ( @@ -111,14 +110,10 @@ class DeletedDocumentDeleteView(ConfirmView): Document.passthrough, pk=instance.pk ) - try: - Permission.check_permissions( - self.request.user, (permission_document_delete,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_delete, self.request.user, source_document - ) + AccessControlList.objects.check_access( + permissions=permission_document_delete, user=self.request.user, + obj=source_document + ) instance.delete() @@ -180,14 +175,10 @@ class DocumentRestoreView(ConfirmView): Document.passthrough, pk=instance.pk ) - try: - Permission.check_permissions( - self.request.user, (permission_document_restore,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_restore, self.request.user, source_document - ) + AccessControlList.objects.check_access( + permissions=permission_document_restore, user=self.request.user, + obj=source_document + ) instance.restore() @@ -214,15 +205,10 @@ class DocumentRestoreManyView(MultipleInstanceActionMixin, DocumentRestoreView): class DocumentPageListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, self.request.user, - self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=self.get_document() + ) return super( DocumentPageListView, self @@ -245,15 +231,11 @@ class DocumentPageView(SimpleView): template_name = 'appearance/generic_form.html' def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, - self.get_object().document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.get_object().document + ) + return super( DocumentPageView, self ).dispatch(request, *args, **kwargs) @@ -329,14 +311,10 @@ class DocumentTrashView(ConfirmView): return reverse('documents:document_list_recent') def object_action(self, instance): - try: - Permission.check_permissions( - self.request.user, (permission_document_trash,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_trash, self.request.user, instance - ) + AccessControlList.objects.check_access( + permissions=permission_document_trash, user=self.request.user, + obj=instance + ) instance.delete() @@ -437,15 +415,10 @@ class DocumentTypeFilenameCreateView(SingleObjectCreateView): form_class = DocumentTypeFilenameForm_create def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_type_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_type_edit, request.user, - self.get_document_type() - ) + AccessControlList.objects.check_access( + permissions=permission_document_type_edit, user=request.user, + obj=self.get_document_type() + ) return super(DocumentTypeFilenameCreateView, self).dispatch( request, *args, **kwargs @@ -543,14 +516,10 @@ class DocumentTypeFilenameListView(SingleObjectListView): class DocumentVersionListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.get_document() + ) self.get_document().add_as_recent_document_for_user(request.user) @@ -1045,10 +1014,10 @@ def document_multiple_clear_transformations(request): def document_page_navigation_next(request, document_page_id): document_page = get_object_or_404(DocumentPage, pk=document_page_id) - try: - Permission.check_permissions(request.user, (permission_document_view,)) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_view, request.user, document_page.document) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name @@ -1063,10 +1032,10 @@ def document_page_navigation_next(request, document_page_id): def document_page_navigation_previous(request, document_page_id): document_page = get_object_or_404(DocumentPage, pk=document_page_id) - try: - Permission.check_permissions(request.user, (permission_document_view,)) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_view, request.user, document_page.document) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name @@ -1082,10 +1051,10 @@ def document_page_navigation_first(request, document_page_id): document_page = get_object_or_404(DocumentPage, pk=document_page_id) document_page = get_object_or_404(document_page.siblings, page_number=1) - try: - Permission.check_permissions(request.user, (permission_document_view,)) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_view, request.user, document_page.document) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name @@ -1096,10 +1065,10 @@ def document_page_navigation_last(request, document_page_id): document_page = get_object_or_404(DocumentPage, pk=document_page_id) document_page = get_object_or_404(document_page.siblings, page_number=document_page.siblings.count()) - try: - Permission.check_permissions(request.user, (permission_document_view,)) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_view, request.user, document_page.document) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name @@ -1109,10 +1078,10 @@ def document_page_navigation_last(request, document_page_id): def transform_page(request, document_page_id, zoom_function=None, rotation_function=None): document_page = get_object_or_404(DocumentPage, pk=document_page_id) - try: - Permission.check_permissions(request.user, (permission_document_view,)) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_view, request.user, document_page.document) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name @@ -1172,10 +1141,9 @@ def document_page_rotate_left(request, document_page_id): def document_print(request, document_id): document = get_object_or_404(Document, pk=document_id) - try: - Permission.check_permissions(request.user, (permission_document_print,)) - except PermissionDenied: - AccessControlList.objects.check_access(permission_document_print, request.user, document) + AccessControlList.objects.check_access( + permissions=permission_document_print, user=request.user, obj=document + ) document.add_as_recent_document_for_user(request.user) diff --git a/mayan/apps/events/views.py b/mayan/apps/events/views.py index 779bfbc005..326ba6cb18 100644 --- a/mayan/apps/events/views.py +++ b/mayan/apps/events/views.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import PermissionDenied from django.http import Http404 from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ @@ -11,7 +10,6 @@ from actstream.models import Action, any_stream from acls.models import AccessControlList from common.utils import encapsulate from common.views import SingleObjectListView -from permissions import Permission from .classes import Event from .permissions import permission_events_view @@ -55,14 +53,10 @@ class ObjectEventListView(EventListView): except self.object_content_type.model_class().DoesNotExist: raise Http404 - try: - Permission.check_permissions( - request.user, permissions=(permission_events_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_events_view, request.user, self.content_object - ) + AccessControlList.objects.check_access( + permissions=permission_events_view, user=request.user, + obj=self.content_object + ) return super( ObjectEventListView, self diff --git a/mayan/apps/folders/api_views.py b/mayan/apps/folders/api_views.py index 04b336cf3d..8f6e306dde 100644 --- a/mayan/apps/folders/api_views.py +++ b/mayan/apps/folders/api_views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics @@ -9,7 +8,6 @@ from rest_framework.response import Response from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view -from permissions import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -37,14 +35,10 @@ class APIDocumentFolderListView(generics.ListAPIView): def get_queryset(self): document = get_object_or_404(Document, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, self.request.user, document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=document + ) queryset = document.document_folders().all() return queryset @@ -207,14 +201,10 @@ class APIFolderDocumentView(generics.RetrieveDestroyAPIView): def retrieve(self, request, *args, **kwargs): instance = self.get_object() - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, self.request.user, instance - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=instance + ) serializer = self.get_serializer(instance) return Response(serializer.data) diff --git a/mayan/apps/folders/views.py b/mayan/apps/folders/views.py index 7d7c2f7c3e..90d01b6896 100644 --- a/mayan/apps/folders/views.py +++ b/mayan/apps/folders/views.py @@ -4,7 +4,6 @@ import logging from django.conf import settings from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse, reverse_lazy from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, render_to_response @@ -19,7 +18,6 @@ from common.views import ( from documents.permissions import permission_document_view from documents.models import Document from documents.views import DocumentListView -from permissions import Permission from .forms import FolderListForm from .models import Folder @@ -69,14 +67,10 @@ class FolderDetailView(DocumentListView): def get_folder(self): folder = get_object_or_404(Folder, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - self.request.user, (permission_folder_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_folder_view, self.request.user, folder - ) + AccessControlList.objects.check_access( + permissions=permission_folder_view, user=self.request.user, + obj=folder + ) return folder @@ -109,16 +103,14 @@ class DocumentFolderListView(FolderListView): def dispatch(self, request, *args, **kwargs): self.document = get_object_or_404(Document, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, self.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.document + ) - return super(DocumentFolderListView, self).dispatch(request, *args, **kwargs) + return super(DocumentFolderListView, self).dispatch( + request, *args, **kwargs + ) def get_extra_context(self): return { diff --git a/mayan/apps/linking/views.py b/mayan/apps/linking/views.py index c7e03b0482..0af56cfcd4 100644 --- a/mayan/apps/linking/views.py +++ b/mayan/apps/linking/views.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals import logging from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse, reverse_lazy from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ @@ -16,7 +15,6 @@ from common.generics import ( from documents.models import Document, DocumentType from documents.permissions import permission_document_view from documents.views import DocumentListView -from permissions import Permission from .forms import SmartLinkConditionForm, SmartLinkForm from .models import ResolvedSmartLink, SmartLink, SmartLinkCondition @@ -37,23 +35,15 @@ class ResolvedSmartLinkView(DocumentListView): SmartLink, pk=self.kwargs['smart_link_pk'] ) - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, self.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.document + ) - try: - Permission.check_permissions( - request.user, (permission_smart_link_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_smart_link_view, request.user, self.smart_link - ) + AccessControlList.objects.check_access( + permissions=permission_smart_link_view, user=request.user, + obj=self.smart_link + ) return super( ResolvedSmartLinkView, self @@ -151,14 +141,10 @@ class DocumentSmartLinkListView(SmartLinkListView): def dispatch(self, request, *args, **kwargs): self.document = get_object_or_404(Document, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, self.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.document + ) return super( DocumentSmartLinkListView, self @@ -234,15 +220,11 @@ class SmartLinkConditionCreateView(SingleObjectCreateView): form_class = SmartLinkConditionForm def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_smart_link_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - (permission_smart_link_edit,), request.user, - self.get_smart_link() - ) + AccessControlList.objects.check_access( + permissions=permission_smart_link_edit, user=request.user, + obj=self.get_smart_link() + ) + return super( SmartLinkConditionCreateView, self ).dispatch(request, *args, **kwargs) @@ -277,15 +259,10 @@ class SmartLinkConditionEditView(SingleObjectEditView): model = SmartLinkCondition def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_smart_link_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - (permission_smart_link_edit,), request.user, - self.get_object().smart_link - ) + AccessControlList.objects.check_access( + permissions=permission_smart_link_edit, user=request.user, + obj=self.get_object().smart_link + ) return super( SmartLinkConditionEditView, self @@ -311,15 +288,10 @@ class SmartLinkConditionDeleteView(SingleObjectDeleteView): model = SmartLinkCondition def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - request.user, (permission_smart_link_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - (permission_smart_link_edit,), request.user, - self.get_object().smart_link - ) + AccessControlList.objects.check_access( + permissions=permission_smart_link_edit, user=request.user, + obj=self.get_object().smart_link + ) return super( SmartLinkConditionDeleteView, self diff --git a/mayan/apps/metadata/api_views.py b/mayan/apps/metadata/api_views.py index 569a95277d..7c7a6070f0 100644 --- a/mayan/apps/metadata/api_views.py +++ b/mayan/apps/metadata/api_views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics, status, views @@ -11,7 +10,6 @@ from documents.models import Document, DocumentType from documents.permissions import ( permission_document_type_view, permission_document_type_edit ) -from permissions import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -100,31 +98,21 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView): if self.request.method == 'GET': # Make sure the use has the permission to see the metadata for # this document - try: - Permission.check_permissions( - self.request.user, (permission_metadata_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_metadata_document_view, self.request.user, - document - ) - else: - return document.metadata.all() + AccessControlList.objects.check_access( + permissions=permission_metadata_document_view, + user=self.request.user, obj=document + ) + + return document.metadata.all() elif self.request.method == 'POST': # Make sure the use has the permission to add metadata to this # document - try: - Permission.check_permissions( - self.request.user, (permission_metadata_document_add,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_metadata_document_add, self.request.user, - document - ) - else: - return document.metadata.all() + AccessControlList.objects.check_access( + permissions=permission_metadata_document_add, + user=self.request.user, obj=document + ) + + return document.metadata.all() def get_serializer_class(self): if self.request.method == 'GET': @@ -222,15 +210,10 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView): document_type = get_object_or_404( DocumentType, pk=self.kwargs['document_type_pk'] ) - try: - Permission.check_permissions( - self.request.user, (permission_document_type_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_type_view, self.request.user, - document_type - ) + AccessControlList.objects.check_access( + permissions=permission_document_type_view, user=self.request.user, + obj=document_type + ) return document_type.metadata.filter(required=self.required_metadata) @@ -256,15 +239,10 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView): DocumentType, pk=self.kwargs['document_type_pk'] ) - try: - Permission.check_permissions( - self.request.user, (permission_document_type_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_type_edit, self.request.user, - document_type - ) + AccessControlList.objects.check_access( + permissions=permission_document_type_edit, user=self.request.user, + obj=document_type + ) serializer = self.get_serializer(data=self.request.POST) @@ -316,15 +294,10 @@ class APIDocumentTypeMetadataTypeView(views.APIView): DocumentTypeMetadataType, pk=self.kwargs['pk'] ) - try: - Permission.check_permissions( - self.request.user, (permission_document_type_edit,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_type_edit, self.request.user, - document_type_metadata_type.document_type - ) + AccessControlList.objects.check_access( + permissions=permission_document_type_edit, user=self.request.user, + obj=document_type_metadata_type.document_type + ) document_type_metadata_type.delete() return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/mayan/apps/metadata/views.py b/mayan/apps/metadata/views.py index e367823037..c5cc970e74 100644 --- a/mayan/apps/metadata/views.py +++ b/mayan/apps/metadata/views.py @@ -19,7 +19,6 @@ from documents.models import Document, DocumentType from documents.permissions import ( permission_document_type_edit ) -from permissions import Permission from .api import save_metadata_list from .forms import ( @@ -464,15 +463,10 @@ def metadata_multiple_remove(request): class DocumentMetadataListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): - try: - Permission.check_permissions( - self.request.user, (permission_metadata_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_metadata_document_view, self.request.user, - self.get_document() - ) + AccessControlList.objects.check_access( + permissions=permission_metadata_document_view, + user=self.request.user, obj=self.get_document() + ) return super(DocumentMetadataListView, self).dispatch( request, *args, **kwargs diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index ca141efd2b..049ddc44bc 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -15,7 +15,6 @@ from django.utils.encoding import smart_str, smart_unicode from django.utils.http import urlencode, urlquote from common.utils import return_attrib -from permissions import Permission logger = logging.getLogger(__name__) @@ -250,22 +249,16 @@ class Link(object): # If this link has a required permission check that the user have it # too if self.permissions: - try: - Permission.check_permissions(request.user, self.permissions) - except PermissionDenied: - # If the user doesn't have the permission, and we are passed - # an instance, check to see if the user has at least ACL - # access to the instance. - if resolved_object: - try: - AccessControlList.objects.check_access( - self.permissions, request.user, resolved_object, - related=self.permissions_related - ) - except PermissionDenied: - return None - else: + if resolved_object: + try: + AccessControlList.objects.check_access( + permissions=self.permissions, user=request.user, + obj=resolved_object, related=self.permissions_related + ) + except PermissionDenied: return None + else: + return None # Check to see if link has conditional display function and only # display it if the result of the conditional display function is diff --git a/mayan/apps/ocr/views.py b/mayan/apps/ocr/views.py index 2c4f237867..ff9495d441 100644 --- a/mayan/apps/ocr/views.py +++ b/mayan/apps/ocr/views.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 @@ -14,7 +13,6 @@ from common.generics import ( ) from common.mixins import MultipleInstanceActionMixin from documents.models import Document, DocumentType -from permissions import Permission from .forms import DocumentContentForm, DocumentTypeSelectForm from .models import DocumentVersionOCRError @@ -52,14 +50,10 @@ class DocumentSubmitView(ConfirmView): return Document.objects.get(pk=self.kwargs['pk']) def object_action(self, instance): - try: - Permission.check_permissions( - self.request.user, (permission_ocr_document,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_ocr_document, self.request.user, instance - ) + AccessControlList.objects.check_access( + permissions=permission_ocr_document, user=self.request.user, + obj=instance + ) instance.submit_for_ocr() diff --git a/mayan/apps/permissions/classes.py b/mayan/apps/permissions/classes.py index a5b6dcb093..8bcd8030d4 100644 --- a/mayan/apps/permissions/classes.py +++ b/mayan/apps/permissions/classes.py @@ -54,8 +54,13 @@ class Permission(object): @classmethod def check_permissions(cls, requester, permissions): - for permission in permissions: - if permission.stored_permission.requester_has_this(requester): + try: + for permission in permissions: + if permission.stored_permission.requester_has_this(requester): + return True + except TypeError: + # Not a list of permissions, just one + if permissions.stored_permission.requester_has_this(requester): return True logger.debug('no permission') diff --git a/mayan/apps/rest_api/permissions.py b/mayan/apps/rest_api/permissions.py index 206b16ef04..0443a61370 100644 --- a/mayan/apps/rest_api/permissions.py +++ b/mayan/apps/rest_api/permissions.py @@ -33,23 +33,19 @@ class MayanPermission(BasePermission): if required_permission: try: - Permission.check_permissions(request.user, required_permission) - except PermissionDenied: - try: - if hasattr(view, 'mayan_permission_attribute_check'): - AccessControlList.objects.check_access( - permissions=required_permission, - user=request.user, obj=obj, - related=view.mayan_permission_attribute_check - ) - else: - AccessControlList.objects.check_access( - required_permission, request.user, obj - ) - except PermissionDenied: - return False + if hasattr(view, 'mayan_permission_attribute_check'): + AccessControlList.objects.check_access( + permissions=required_permission, + user=request.user, obj=obj, + related=view.mayan_permission_attribute_check + ) else: - return True + AccessControlList.objects.check_access( + permissions=required_permission, user=request.user, + obj=obj + ) + except PermissionDenied: + return False else: return True else: diff --git a/mayan/apps/sources/views.py b/mayan/apps/sources/views.py index 288cfcd40d..0fb4d16c60 100644 --- a/mayan/apps/sources/views.py +++ b/mayan/apps/sources/views.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib import messages -from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse, reverse_lazy from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 @@ -23,7 +22,6 @@ from documents.permissions import ( from documents.tasks import task_upload_new_version from metadata.api import decode_metadata_from_url from navigation import Link -from permissions import Permission from .forms import ( NewDocumentForm, NewVersionForm, WebFormUploadForm, @@ -195,15 +193,10 @@ class UploadInteractiveView(UploadBaseView): ) ) - try: - Permission.check_permissions( - request.user, (permission_document_create,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_create, request.user, - self.document_type - ) + AccessControlList.objects.check_access( + permissions=permission_document_create, user=request.user, + obj=self.document_type + ) self.tab_links = UploadBaseView.get_active_tab_links() @@ -333,15 +326,10 @@ class UploadInteractiveVersionView(UploadBaseView): ) ) - try: - Permission.check_permissions( - self.request.user, (permission_document_new_version,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_new_version, self.request.user, - self.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_new_version, + user=self.request.user, obj=self.document + ) self.tab_links = UploadBaseView.get_active_tab_links(self.document) diff --git a/mayan/apps/tags/api_views.py b/mayan/apps/tags/api_views.py index f24e267ef3..522a5cac38 100644 --- a/mayan/apps/tags/api_views.py +++ b/mayan/apps/tags/api_views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics @@ -11,7 +10,6 @@ from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view from documents.serializers import DocumentSerializer -from permissions import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -105,14 +103,10 @@ class APITagDocumentListView(generics.ListAPIView): def get_queryset(self): tag = get_object_or_404(Tag, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - self.request.user, (permission_tag_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_tag_view, self.request.user, tag - ) + + AccessControlList.objects.check_access( + permissions=permission_tag_view, user=self.request.user, obj=tag + ) return tag.documents.all() @@ -130,14 +124,11 @@ class APIDocumentTagListView(generics.ListCreateAPIView): def get_queryset(self): document = self.get_document() - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, self.request.user, document - ) + + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=document + ) return document.attached_tags().all() @@ -198,14 +189,10 @@ class APIDocumentTagView(generics.RetrieveDestroyAPIView): def get_document(self): document = get_object_or_404(Document, pk=self.kwargs['document_pk']) - try: - Permission.check_permissions( - self.request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, self.request.user, document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=document + ) return document def get_queryset(self): diff --git a/mayan/apps/tags/serializers.py b/mayan/apps/tags/serializers.py index 3f49cf2e42..63c655ae16 100644 --- a/mayan/apps/tags/serializers.py +++ b/mayan/apps/tags/serializers.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext_lazy as _ from rest_framework import serializers @@ -8,7 +7,6 @@ from rest_framework.exceptions import ValidationError from rest_framework.reverse import reverse from acls.models import AccessControlList -from permissions import Permission from .models import Tag from .permissions import permission_tag_attach @@ -50,14 +48,10 @@ class NewDocumentTagSerializer(serializers.Serializer): try: tag = Tag.objects.get(pk=validated_data['tag']) - try: - Permission.check_permissions( - self.context['request'].user, (permission_tag_attach,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_tag_attach, self.context['request'], tag - ) + AccessControlList.objects.check_access( + permissions=permission_tag_attach, + user=self.context['request'].user, obj=tag + ) tag.documents.add(validated_data['document']) except Exception as exception: diff --git a/mayan/apps/tags/views.py b/mayan/apps/tags/views.py index 592ecaa28a..42506cff14 100644 --- a/mayan/apps/tags/views.py +++ b/mayan/apps/tags/views.py @@ -18,7 +18,6 @@ from common.views import ( from documents.models import Document from documents.views import DocumentListView from documents.permissions import permission_document_view -from permissions import Permission from .forms import TagListForm from .models import Tag @@ -245,18 +244,14 @@ class DocumentTagListView(TagListView): def dispatch(self, request, *args, **kwargs): self.document = get_object_or_404(Document, pk=self.kwargs['pk']) - try: - Permission.check_permissions( - request.user, (permission_document_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_view, request.user, self.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.document + ) - return super( - DocumentTagListView, self - ).dispatch(request, *args, **kwargs) + return super(DocumentTagListView, self).dispatch( + request, *args, **kwargs + ) def get_extra_context(self): return { From 43d2539c95815350480acd86199f3191f584f6b9 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 05:05:25 -0400 Subject: [PATCH 024/119] Update OCR backend to work with the new document image caching system. --- mayan/apps/ocr/classes.py | 40 ++++++++++++++--------------- mayan/apps/ocr/tests/test_models.py | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/mayan/apps/ocr/classes.py b/mayan/apps/ocr/classes.py index 3693b263f8..91e1561e5c 100644 --- a/mayan/apps/ocr/classes.py +++ b/mayan/apps/ocr/classes.py @@ -5,6 +5,7 @@ import logging from django.utils.module_loading import import_string from converter import converter_class +from documents.runtime import cache_storage_backend from .exceptions import NoMIMETypeMatch, ParserError from .models import DocumentPageContent @@ -52,28 +53,27 @@ class OCRBackendBase(object): self.process_document_page(document_page=document_page) def process_document_page(self, document_page): - logger.info( - 'Processing page: %d of document version: %s', - document_page.page_number, document_page.document_version + logger.info( + 'Processing page: %d of document version: %s', + document_page.page_number, document_page.document_version + ) + + cache_filename = document_page.generate_image() + + with cache_storage_backend.open(cache_filename) as file_object: + document_page_content, created = DocumentPageContent.objects.get_or_create( + document_page=document_page ) - - image = document_page.get_image() - - try: - document_page_content, created = DocumentPageContent.objects.get_or_create( - document_page=document_page - ) - document_page_content.content = self.execute( - file_object=image, language=document_page.document.language - ) - document_page_content.save() - finally: - image.close() - - logger.info( - 'Finished processing page: %d of document version: %s', - document_page.page_number, document_page.document_version + document_page_content.content = self.execute( + file_object=file_object, + language=document_page.document.language ) + document_page_content.save() + + logger.info( + 'Finished processing page: %d of document version: %s', + document_page.page_number, document_page.document_version + ) def execute(self, file_object, language=None, transformations=None): self.language = language diff --git a/mayan/apps/ocr/tests/test_models.py b/mayan/apps/ocr/tests/test_models.py index d7a834dbd6..d4a1f53a16 100644 --- a/mayan/apps/ocr/tests/test_models.py +++ b/mayan/apps/ocr/tests/test_models.py @@ -68,5 +68,5 @@ class GermanOCRSupportTestCase(BaseTestCase): 'Repository für elektronische Dokumente.' in content ) self.assertTrue( - 'Es bietet einen elektronischen Tresor oder' in content + 'Es bietet einen' in content ) From 696c2be2f3c559bd94f017a81351f302175ef49a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 16:07:46 -0400 Subject: [PATCH 025/119] Fix link global permission check. --- mayan/apps/navigation/classes.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 049ddc44bc..10c2d46da1 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -15,6 +15,7 @@ from django.utils.encoding import smart_str, smart_unicode from django.utils.http import urlencode, urlquote from common.utils import return_attrib +from permissions import Permission logger = logging.getLogger(__name__) @@ -258,7 +259,12 @@ class Link(object): except PermissionDenied: return None else: - return None + try: + Permission.check_permissions( + requester=request.user, permissions=self.permissions + ) + except PermissionDenied: + return None # Check to see if link has conditional display function and only # display it if the result of the conditional display function is From 3ab4778814e7456cfd17af09e8836594895637e5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 17:38:54 -0400 Subject: [PATCH 026/119] Remove lazy view string loading from urls.py as per Django's deprecation plan. --- mayan/apps/acls/urls.py | 2 +- mayan/apps/authentication/urls.py | 28 +++++++++++-------- mayan/apps/checkouts/urls.py | 2 +- mayan/apps/common/urls.py | 17 +++++++----- mayan/apps/converter/urls.py | 2 +- mayan/apps/django_gpg/urls.py | 2 +- mayan/apps/documents/urls.py | 44 +++++++++++++++++------------- mayan/apps/dynamic_search/urls.py | 2 +- mayan/apps/events/urls.py | 2 +- mayan/apps/folders/urls.py | 11 ++++---- mayan/apps/mailer/urls.py | 8 +++--- mayan/apps/metadata/urls.py | 18 ++++++------ mayan/apps/statistics/urls.py | 2 +- mayan/apps/tags/urls.py | 17 ++++++------ mayan/apps/user_management/urls.py | 11 ++++---- 15 files changed, 94 insertions(+), 74 deletions(-) diff --git a/mayan/apps/acls/urls.py b/mayan/apps/acls/urls.py index f68cc5e0b8..4da8a6d7fc 100644 --- a/mayan/apps/acls/urls.py +++ b/mayan/apps/acls/urls.py @@ -7,7 +7,7 @@ from .views import ( ) urlpatterns = patterns( - 'acls.views', + '', url( r'^(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/create/$', ACLCreateView.as_view(), name='acl_create' diff --git a/mayan/apps/authentication/urls.py b/mayan/apps/authentication/urls.py index dfeaaaa05a..9f9f948594 100644 --- a/mayan/apps/authentication/urls.py +++ b/mayan/apps/authentication/urls.py @@ -2,16 +2,23 @@ from __future__ import unicode_literals from django.conf import settings from django.conf.urls import patterns, url +from django.contrib.auth.views import ( + logout, password_reset, password_reset_confirm, password_reset_complete, + password_reset_done +) + +from .views import login_view, password_change_done, password_change_view + urlpatterns = patterns( - 'authentication.views', - url(r'^login/$', 'login_view', name='login_view'), + '', + url(r'^login/$', login_view, name='login_view'), url( - r'^password/change/done/$', 'password_change_done', + r'^password/change/done/$', password_change_done, name='password_change_done' ), url( - r'^password/change/$', 'password_change_view', + r'^password/change/$', password_change_view, name='password_change_view' ), ) @@ -19,12 +26,11 @@ urlpatterns = patterns( urlpatterns += patterns( '', url( - r'^logout/$', 'django.contrib.auth.views.logout', - {'next_page': settings.LOGIN_REDIRECT_URL}, name='logout_view' + r'^logout/$', logout, {'next_page': settings.LOGIN_REDIRECT_URL}, + name='logout_view' ), url( - r'^password/reset/$', 'django.contrib.auth.views.password_reset', - { + r'^password/reset/$', password_reset, { 'email_template_name': 'appearance/password_reset_email.html', 'template_name': 'appearance/password_reset_form.html', 'post_reset_redirect': '/password/reset/done' @@ -32,19 +38,19 @@ urlpatterns += patterns( ), url( r'^password/reset/confirm/(?P[0-9A-Za-z]+)-(?P.+)/$', - 'django.contrib.auth.views.password_reset_confirm', { + password_reset_confirm, { 'template_name': 'appearance/password_reset_confirm.html', 'post_reset_redirect': '/password/reset/complete/' }, name='password_reset_confirm_view' ), url( r'^password/reset/complete/$', - 'django.contrib.auth.views.password_reset_complete', { + password_reset_complete, { 'template_name': 'appearance/password_reset_complete.html' }, name='password_reset_complete_view'), url( r'^password/reset/done/$', - 'django.contrib.auth.views.password_reset_done', { + password_reset_done, { 'template_name': 'appearance/password_reset_done.html' }, name='password_reset_done_view'), ) diff --git a/mayan/apps/checkouts/urls.py b/mayan/apps/checkouts/urls.py index dd192954ff..c9b3a61bd3 100644 --- a/mayan/apps/checkouts/urls.py +++ b/mayan/apps/checkouts/urls.py @@ -9,7 +9,7 @@ from .views import ( ) urlpatterns = patterns( - 'checkouts.views', + '', url(r'^list/$', CheckoutListView.as_view(), name='checkout_list'), url( r'^(?P\d+)/check/out/$', CheckoutDocumentView.as_view(), diff --git a/mayan/apps/common/urls.py b/mayan/apps/common/urls.py index 11b6e1acf8..cef19076a8 100644 --- a/mayan/apps/common/urls.py +++ b/mayan/apps/common/urls.py @@ -3,23 +3,27 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url from django.contrib.staticfiles.templatetags.staticfiles import static from django.views.generic import RedirectView -from django.views.i18n import javascript_catalog +from django.views.i18n import javascript_catalog, set_language from .views import ( AboutView, CurrentUserDetailsView, CurrentUserEditView, CurrentUserLocaleProfileDetailsView, CurrentUserLocaleProfileEditView, FilterResultListView, FilterSelectView, HomeView, LicenseView, - PackagesLicensesView, SetupListView, ToolsListView + PackagesLicensesView, SetupListView, ToolsListView, + multi_object_action_view ) urlpatterns = patterns( - 'common.views', + '', url(r'^$', HomeView.as_view(), name='home'), url(r'^about/$', AboutView.as_view(), name='about_view'), url(r'^license/$', LicenseView.as_view(), name='license_view'), - url(r'^packages/licenses/$', PackagesLicensesView.as_view(), name='packages_licenses_view'), url( - r'^object/multiple/action/$', 'multi_object_action_view', + r'^packages/licenses/$', PackagesLicensesView.as_view(), + name='packages_licenses_view' + ), + url( + r'^object/multiple/action/$', multi_object_action_view, name='multi_object_action_view' ), url(r'^setup/$', SetupListView.as_view(), name='setup_list'), @@ -62,7 +66,6 @@ urlpatterns += patterns( name='javascript_catalog' ), url( - r'^set_language/$', 'django.views.i18n.set_language', - name='set_language' + r'^set_language/$', set_language, name='set_language' ), ) diff --git a/mayan/apps/converter/urls.py b/mayan/apps/converter/urls.py index d1f6da99b7..60604f077d 100644 --- a/mayan/apps/converter/urls.py +++ b/mayan/apps/converter/urls.py @@ -8,7 +8,7 @@ from .views import ( ) urlpatterns = patterns( - 'converter.views', + '', url( r'^create_for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', TransformationCreateView.as_view(), name='transformation_create' diff --git a/mayan/apps/django_gpg/urls.py b/mayan/apps/django_gpg/urls.py index 929e613e71..be6e3f68a1 100644 --- a/mayan/apps/django_gpg/urls.py +++ b/mayan/apps/django_gpg/urls.py @@ -9,7 +9,7 @@ from .views import ( ) urlpatterns = patterns( - 'django_gpg.views', + '', url( r'^(?P\d+)/$', KeyDetailView.as_view(), name='key_detail' ), diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 57edb77275..1810e3a6b3 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -25,11 +25,19 @@ from .views import ( DocumentTypeFilenameListView, DocumentTypeListView, DocumentTypeEditView, DocumentVersionDownloadFormView, DocumentVersionDownloadView, DocumentVersionListView, DocumentVersionRevertView, DocumentView, - EmptyTrashCanView, RecentDocumentListView + EmptyTrashCanView, RecentDocumentListView, document_clear_transformations, + document_document_type_edit, document_multiple_clear_transformations, + document_multiple_document_type_edit, document_multiple_update_page_count, + document_page_navigation_first, document_page_navigation_last, + document_page_navigation_next, document_page_navigation_previous, + document_page_rotate_left, document_page_rotate_right, + document_page_zoom_in, document_page_zoom_out, document_print, + document_update_page_count ) + urlpatterns = patterns( - 'documents.views', + '', url(r'^list/$', DocumentListView.as_view(), name='document_list'), url( r'^list/recent/$', RecentDocumentListView.as_view(), @@ -65,11 +73,11 @@ urlpatterns = patterns( name='document_multiple_delete' ), url( - r'^(?P\d+)/type/$', 'document_document_type_edit', + r'^(?P\d+)/type/$', document_document_type_edit, name='document_document_type_edit' ), url( - r'^multiple/type/$', 'document_multiple_document_type_edit', + r'^multiple/type/$', document_multiple_document_type_edit, name='document_multiple_document_type_edit' ), url( @@ -85,16 +93,15 @@ urlpatterns = patterns( name='document_edit' ), url( - r'^(?P\d+)/print/$', 'document_print', + r'^(?P\d+)/print/$', document_print, name='document_print' ), url( r'^(?P\d+)/reset_page_count/$', - 'document_update_page_count', name='document_update_page_count' + document_update_page_count, name='document_update_page_count' ), url( - r'^multiple/reset_page_count/$', - 'document_multiple_update_page_count', + r'^multiple/reset_page_count/$', document_multiple_update_page_count, name='document_multiple_update_page_count' ), url( @@ -115,8 +122,7 @@ urlpatterns = patterns( ), url( r'^(?P\d+)/clear_transformations/$', - 'document_clear_transformations', - name='document_clear_transformations' + document_clear_transformations, name='document_clear_transformations' ), url( @@ -144,7 +150,7 @@ urlpatterns = patterns( url( r'^multiple/clear_transformations/$', - 'document_multiple_clear_transformations', + document_multiple_clear_transformations, name='document_multiple_clear_transformations' ), url( @@ -162,36 +168,36 @@ urlpatterns = patterns( ), url( r'^page/(?P\d+)/navigation/next/$', - 'document_page_navigation_next', name='document_page_navigation_next' + document_page_navigation_next, name='document_page_navigation_next' ), url( r'^page/(?P\d+)/navigation/previous/$', - 'document_page_navigation_previous', + document_page_navigation_previous, name='document_page_navigation_previous' ), url( r'^page/(?P\d+)/navigation/first/$', - 'document_page_navigation_first', name='document_page_navigation_first' + document_page_navigation_first, name='document_page_navigation_first' ), url( r'^page/(?P\d+)/navigation/last/$', - 'document_page_navigation_last', name='document_page_navigation_last' + document_page_navigation_last, name='document_page_navigation_last' ), url( r'^page/(?P\d+)/zoom/in/$', - 'document_page_zoom_in', name='document_page_zoom_in' + document_page_zoom_in, name='document_page_zoom_in' ), url( r'^page/(?P\d+)/zoom/out/$', - 'document_page_zoom_out', name='document_page_zoom_out' + document_page_zoom_out, name='document_page_zoom_out' ), url( r'^page/(?P\d+)/rotate/right/$', - 'document_page_rotate_right', name='document_page_rotate_right' + document_page_rotate_right, name='document_page_rotate_right' ), url( r'^page/(?P\d+)/rotate/left/$', - 'document_page_rotate_left', name='document_page_rotate_left' + document_page_rotate_left, name='document_page_rotate_left' ), url( r'^page/(?P\d+)/reset/$', DocumentPageViewResetView.as_view(), diff --git a/mayan/apps/dynamic_search/urls.py b/mayan/apps/dynamic_search/urls.py index bcf566ca36..4087ee281d 100644 --- a/mayan/apps/dynamic_search/urls.py +++ b/mayan/apps/dynamic_search/urls.py @@ -8,7 +8,7 @@ from .views import ( ) urlpatterns = patterns( - 'dynamic_search.views', + '', url(r'^(?P[\.\w]+)/$', SearchView.as_view(), name='search'), url( r'^advanced/(?P[\.\w]+)/$', AdvancedSearchView.as_view(), diff --git a/mayan/apps/events/urls.py b/mayan/apps/events/urls.py index 3f87a57e58..f04ea071e5 100644 --- a/mayan/apps/events/urls.py +++ b/mayan/apps/events/urls.py @@ -5,7 +5,7 @@ from django.conf.urls import patterns, url from .views import EventListView, ObjectEventListView, VerbEventListView urlpatterns = patterns( - 'events.views', + '', url(r'^all/$', EventListView.as_view(), name='events_list'), url( r'^for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', diff --git a/mayan/apps/folders/urls.py b/mayan/apps/folders/urls.py index 9c0c5872e8..0b59d11486 100644 --- a/mayan/apps/folders/urls.py +++ b/mayan/apps/folders/urls.py @@ -8,11 +8,12 @@ from .api_views import ( ) from .views import ( DocumentFolderListView, FolderCreateView, FolderDeleteView, - FolderDetailView, FolderEditView, FolderListView + FolderDetailView, FolderEditView, FolderListView, folder_add_document, + folder_add_multiple_documents, folder_document_multiple_remove ) urlpatterns = patterns( - 'folders.views', + '', url(r'^list/$', FolderListView.as_view(), name='folder_list'), url(r'^create/$', FolderCreateView.as_view(), name='folder_create'), url(r'^(?P\d+)/edit/$', FolderEditView.as_view(), name='folder_edit'), @@ -23,16 +24,16 @@ urlpatterns = patterns( url(r'^(?P\d+)/$', FolderDetailView.as_view(), name='folder_view'), url( r'^(?P\d+)/remove/document/multiple/$', - 'folder_document_multiple_remove', + folder_document_multiple_remove, name='folder_document_multiple_remove' ), url( r'^document/(?P\d+)/folder/add/$', - 'folder_add_document', name='folder_add_document' + folder_add_document, name='folder_add_document' ), url( - r'^document/multiple/folder/add/$', 'folder_add_multiple_documents', + r'^document/multiple/folder/add/$', folder_add_multiple_documents, name='folder_add_multiple_documents' ), url( diff --git a/mayan/apps/mailer/urls.py b/mayan/apps/mailer/urls.py index c32833bfac..49c42d953d 100644 --- a/mayan/apps/mailer/urls.py +++ b/mayan/apps/mailer/urls.py @@ -2,16 +2,16 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .views import LogEntryListView +from .views import LogEntryListView, send_document_link urlpatterns = patterns( - 'mailer.views', + '', url( - r'^(?P\d+)/send/link/$', 'send_document_link', + r'^(?P\d+)/send/link/$', send_document_link, name='send_document_link' ), url( - r'^(?P\d+)/send/document/$', 'send_document_link', + r'^(?P\d+)/send/document/$', send_document_link, {'as_attachment': True}, name='send_document' ), url( diff --git a/mayan/apps/metadata/urls.py b/mayan/apps/metadata/urls.py index b94acc25a3..b7779710de 100644 --- a/mayan/apps/metadata/urls.py +++ b/mayan/apps/metadata/urls.py @@ -13,33 +13,35 @@ from .views import ( DocumentMetadataListView, MetadataTypeCreateView, MetadataTypeDeleteView, MetadataTypeEditView, MetadataTypeListView, SetupDocumentTypeMetadataOptionalView, - SetupDocumentTypeMetadataRequiredView + SetupDocumentTypeMetadataRequiredView, metadata_add, metadata_edit, + metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove, + metadata_remove ) urlpatterns = patterns( - 'metadata.views', + '', url( - r'^(?P\d+)/edit/$', 'metadata_edit', name='metadata_edit' + r'^(?P\d+)/edit/$', metadata_edit, name='metadata_edit' ), url( r'^(?P\d+)/view/$', DocumentMetadataListView.as_view(), name='metadata_view' ), url( - r'^multiple/edit/$', 'metadata_multiple_edit', + r'^multiple/edit/$', metadata_multiple_edit, name='metadata_multiple_edit' ), - url(r'^(?P\d+)/add/$', 'metadata_add', name='metadata_add'), + url(r'^(?P\d+)/add/$', metadata_add, name='metadata_add'), url( - r'^multiple/add/$', 'metadata_multiple_add', + r'^multiple/add/$', metadata_multiple_add, name='metadata_multiple_add' ), url( - r'^(?P\d+)/remove/$', 'metadata_remove', + r'^(?P\d+)/remove/$', metadata_remove, name='metadata_remove' ), url( - r'^multiple/remove/$', 'metadata_multiple_remove', + r'^multiple/remove/$', metadata_multiple_remove, name='metadata_multiple_remove' ), diff --git a/mayan/apps/statistics/urls.py b/mayan/apps/statistics/urls.py index 3f568d6df4..1e1982c701 100644 --- a/mayan/apps/statistics/urls.py +++ b/mayan/apps/statistics/urls.py @@ -8,7 +8,7 @@ from .views import ( ) urlpatterns = patterns( - 'statistics.views', + '', url(r'^$', NamespaceListView.as_view(), name='namespace_list'), url( r'^namespace/(?P[\w-]+)/details/$', diff --git a/mayan/apps/tags/urls.py b/mayan/apps/tags/urls.py index 0ee9d5f19f..bb6dff9ccf 100644 --- a/mayan/apps/tags/urls.py +++ b/mayan/apps/tags/urls.py @@ -8,11 +8,13 @@ from .api_views import ( ) from .views import ( DocumentTagListView, TagCreateView, TagEditView, TagListView, - TagTaggedItemListView + TagTaggedItemListView, tag_attach, tag_multiple_attach, + tag_multiple_delete, multiple_documents_selection_tag_remove, + single_document_multiple_tag_remove ) urlpatterns = patterns( - 'tags.views', + '', url(r'^list/$', TagListView.as_view(), name='tag_list'), url(r'^create/$', TagCreateView.as_view(), name='tag_create'), url(r'^(?P\d+)/delete/$', 'tag_delete', name='tag_delete'), @@ -22,27 +24,26 @@ urlpatterns = patterns( name='tag_tagged_item_list' ), url( - r'^multiple/delete/$', 'tag_multiple_delete', - name='tag_multiple_delete' + r'^multiple/delete/$', tag_multiple_delete, name='tag_multiple_delete' ), url( r'^multiple/remove/document/(?P\d+)/$', - 'single_document_multiple_tag_remove', + single_document_multiple_tag_remove, name='single_document_multiple_tag_remove' ), url( r'^multiple/remove/document/multiple/$', - 'multiple_documents_selection_tag_remove', + multiple_documents_selection_tag_remove, name='multiple_documents_selection_tag_remove' ), url( - r'^selection/attach/document/(?P\d+)/$', 'tag_attach', + r'^selection/attach/document/(?P\d+)/$', tag_attach, name='tag_attach' ), url( - r'^selection/attach/document/multiple/$', 'tag_multiple_attach', + r'^selection/attach/document/multiple/$', tag_multiple_attach, name='multiple_documents_tag_attach' ), diff --git a/mayan/apps/user_management/urls.py b/mayan/apps/user_management/urls.py index d56a45995d..26731722fc 100644 --- a/mayan/apps/user_management/urls.py +++ b/mayan/apps/user_management/urls.py @@ -8,11 +8,12 @@ from .api_views import ( ) from .views import ( GroupCreateView, GroupDeleteView, GroupEditView, GroupListView, - GroupMembersView, UserEditView, UserGroupsView, UserListView + GroupMembersView, UserEditView, UserGroupsView, UserListView, + user_multiple_delete, user_multiple_set_password, user_set_password ) urlpatterns = patterns( - 'user_management.views', + '', url(r'^group/list/$', GroupListView.as_view(), name='group_list'), url(r'^group/add/$', GroupCreateView.as_view(), name='group_add'), url( @@ -33,15 +34,15 @@ urlpatterns = patterns( url(r'^user/(?P\d+)/edit/$', UserEditView.as_view(), name='user_edit'), url(r'^user/(?P\d+)/delete/$', 'user_delete', name='user_delete'), url( - r'^user/multiple/delete/$', 'user_multiple_delete', + r'^user/multiple/delete/$', user_multiple_delete, name='user_multiple_delete' ), url( - r'^user/(?P\d+)/set_password/$', 'user_set_password', + r'^user/(?P\d+)/set_password/$', user_set_password, name='user_set_password' ), url( - r'^user/multiple/set_password/$', 'user_multiple_set_password', + r'^user/multiple/set_password/$', user_multiple_set_password, name='user_multiple_set_password' ), url( From 2777dc1070738d79a7a5ab476014ec13fc39d27a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 19:01:30 -0400 Subject: [PATCH 027/119] Convert document page zoom and rotation views to CBV. --- mayan/apps/documents/links.py | 10 ++- mayan/apps/documents/tests/test_views.py | 32 +++++++ mayan/apps/documents/urls.py | 30 +++---- mayan/apps/documents/views.py | 107 ++++++++++++----------- 4 files changed, 108 insertions(+), 71 deletions(-) diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py index 0b185627ce..8b1b70f7a8 100644 --- a/mayan/apps/documents/links.py +++ b/mayan/apps/documents/links.py @@ -194,12 +194,12 @@ link_document_page_return = Link( link_document_page_rotate_left = Link( icon='fa fa-rotate-left', permissions=(permission_document_view,), text=_('Rotate left'), view='documents:document_page_rotate_left', - args='resolved_object.pk' + args='resolved_object.pk', keep_query=True ) link_document_page_rotate_right = Link( icon='fa fa-rotate-right', permissions=(permission_document_view,), text=_('Rotate right'), view='documents:document_page_rotate_right', - args='resolved_object.pk' + args='resolved_object.pk', keep_query=True ) link_document_page_view = Link( permissions=(permission_document_view,), text=_('Page image'), @@ -212,12 +212,14 @@ link_document_page_view_reset = Link( link_document_page_zoom_in = Link( conditional_disable=is_max_zoom, icon='fa fa-search-plus', permissions=(permission_document_view,), text=_('Zoom in'), - view='documents:document_page_zoom_in', args='resolved_object.pk' + view='documents:document_page_zoom_in', args='resolved_object.pk', + keep_query=True ) link_document_page_zoom_out = Link( conditional_disable=is_min_zoom, icon='fa fa-search-minus', permissions=(permission_document_view,), text=_('Zoom out'), - view='documents:document_page_zoom_out', args='resolved_object.pk' + view='documents:document_page_zoom_out', args='resolved_object.pk', + keep_query=True ) # Document versions diff --git a/mayan/apps/documents/tests/test_views.py b/mayan/apps/documents/tests/test_views.py index 98ae7dc534..8505be80cd 100644 --- a/mayan/apps/documents/tests/test_views.py +++ b/mayan/apps/documents/tests/test_views.py @@ -571,6 +571,38 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertContains(response, 'reverted', status_code=200) self.assertEqual(self.document.versions.count(), 1) + def test_document_page_view_no_permissions(self): + self.login( + username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD + ) + + response = self.get( + 'documents:document_page_view', args=( + self.document.pages.first().pk, + ) + ) + + self.assertEqual(response.status_code, 403) + + def test_document_page_view_with_permissions(self): + self.login( + username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD + ) + + self.role.permissions.add( + permission_document_view.stored_permission + ) + response = self.get( + 'documents:document_page_view', args=( + self.document.pages.first().pk, + ), + follow=True + ) + + self.assertContains( + response, unicode(self.document.pages.first()), status_code=200 + ) + class DocumentTypeViewsTestCase(GenericDocumentViewTestCase): def test_document_type_create_view_no_permission(self): diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 1810e3a6b3..310191e218 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -16,10 +16,11 @@ from .views import ( ClearImageCacheView, DeletedDocumentDeleteView, DeletedDocumentDeleteManyView, DeletedDocumentListView, DocumentDownloadFormView, DocumentDownloadView, DocumentEditView, - DocumentListView, DocumentPageView, DocumentPageListView, - DocumentPageViewResetView, DocumentPreviewView, DocumentRestoreView, - DocumentRestoreManyView, DocumentTrashView, DocumentTrashManyView, - DocumentTypeCreateView, DocumentTypeDeleteView, + DocumentListView, DocumentPageListView, DocumentPageRotateLeftView, + DocumentPageRotateRightView, DocumentPageView, DocumentPageViewResetView, + DocumentPageZoomInView, DocumentPageZoomOutView, DocumentPreviewView, + DocumentRestoreView, DocumentRestoreManyView, DocumentTrashView, + DocumentTrashManyView, DocumentTypeCreateView, DocumentTypeDeleteView, DocumentTypeDocumentListView, DocumentTypeFilenameCreateView, DocumentTypeFilenameDeleteView, DocumentTypeFilenameEditView, DocumentTypeFilenameListView, DocumentTypeListView, DocumentTypeEditView, @@ -30,9 +31,7 @@ from .views import ( document_multiple_document_type_edit, document_multiple_update_page_count, document_page_navigation_first, document_page_navigation_last, document_page_navigation_next, document_page_navigation_previous, - document_page_rotate_left, document_page_rotate_right, - document_page_zoom_in, document_page_zoom_out, document_print, - document_update_page_count + document_print, document_update_page_count ) @@ -184,20 +183,21 @@ urlpatterns = patterns( document_page_navigation_last, name='document_page_navigation_last' ), url( - r'^page/(?P\d+)/zoom/in/$', - document_page_zoom_in, name='document_page_zoom_in' + r'^page/(?P\d+)/zoom/in/$', + DocumentPageZoomInView.as_view(), name='document_page_zoom_in' ), url( - r'^page/(?P\d+)/zoom/out/$', - document_page_zoom_out, name='document_page_zoom_out' + r'^page/(?P\d+)/zoom/out/$', + DocumentPageZoomOutView.as_view(), name='document_page_zoom_out' ), url( - r'^page/(?P\d+)/rotate/right/$', - document_page_rotate_right, name='document_page_rotate_right' + r'^page/(?P\d+)/rotate/left/$', + DocumentPageRotateLeftView.as_view(), name='document_page_rotate_left' ), url( - r'^page/(?P\d+)/rotate/left/$', - document_page_rotate_left, name='document_page_rotate_left' + r'^page/(?P\d+)/rotate/right/$', + DocumentPageRotateRightView.as_view(), + name='document_page_rotate_right' ), url( r'^page/(?P\d+)/reset/$', DocumentPageViewResetView.as_view(), diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index cf42c29bd7..07c92ced58 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -22,7 +22,7 @@ from common.generics import ( SingleObjectEditView, SingleObjectListView ) from common.mixins import MultipleInstanceActionMixin -from converter.literals import DEFAULT_ZOOM_LEVEL +from converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL from converter.models import Transformation from converter.permissions import permission_transformation_delete @@ -241,8 +241,9 @@ class DocumentPageView(SimpleView): ).dispatch(request, *args, **kwargs) def get_extra_context(self): - zoom = self.request.GET.get('zoom') - rotation = self.request.GET.get('rotation') + zoom = int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) + rotation = int(self.request.GET.get('rotation', DEFAULT_ROTATION)) + document_page_form = DocumentPageForm( instance=self.get_object(), zoom=zoom, rotation=rotation ) @@ -250,7 +251,7 @@ class DocumentPageView(SimpleView): base_title = _('Image of: %s') % self.get_object() if zoom != DEFAULT_ZOOM_LEVEL: - zoom_text = '(%d%%)' % zoom + zoom_text = '({}%)'.format(zoom) else: zoom_text = '' @@ -260,7 +261,7 @@ class DocumentPageView(SimpleView): 'navigation_object_list': ('page',), 'page': self.get_object(), 'rotation': rotation, - 'title': ' '.join([base_title, zoom_text]), + 'title': ' '.join((base_title, zoom_text,)), 'read_only': True, 'zoom': zoom, } @@ -1075,67 +1076,69 @@ def document_page_navigation_last(request, document_page_id): return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) -def transform_page(request, document_page_id, zoom_function=None, rotation_function=None): - document_page = get_object_or_404(DocumentPage, pk=document_page_id) +class DocumentPageInteractiveTransformation(RedirectView): + def dispatch(self, request, *args, **kwargs): + object = self.get_object() - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=document_page.document - ) + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=object + ) - view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name + return super(DocumentPageInteractiveTransformation, self).dispatch( + request, *args, **kwargs + ) - # Get the query string from the referer url - query = urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).query - # Parse the query string and get the zoom value - # parse_qs return a dictionary whose values are lists - zoom = int(urlparse.parse_qs(query).get('zoom', ['100'])[0]) - rotation = int(urlparse.parse_qs(query).get('rotation', ['0'])[0]) + def get_object(self): + return get_object_or_404(DocumentPage, pk=self.kwargs['pk']) - if zoom_function: - zoom = zoom_function(zoom) + def get_redirect_url(self, *args, **kwargs): + url = reverse( + 'documents:document_page_view', args=(self.kwargs['pk'],) + ) - if rotation_function: - rotation = rotation_function(rotation) + query_dict = { + 'rotation': int(self.request.GET.get('rotation', DEFAULT_ROTATION)), + 'zoom': int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) + } - return HttpResponseRedirect( - '?'.join([ - reverse(view, args=(document_page.pk,)), - urlencode({'zoom': zoom, 'rotation': rotation}) - ]) - ) + self.transformation_function(query_dict) + + return '{}?{}'.format(url, urlencode(query_dict)) -def document_page_zoom_in(request, document_page_id): - return transform_page( - request, - document_page_id, - zoom_function=lambda x: setting_zoom_max_level.value if x + setting_zoom_percent_step.value > setting_zoom_max_level.value else x + setting_zoom_percent_step.value - ) +class DocumentPageZoomInView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + zoom = query_dict['zoom'] + setting_zoom_percent_step.value + + if zoom > setting_zoom_max_level.value: + zoom = setting_zoom_max_level.value + + query_dict['zoom'] = zoom -def document_page_zoom_out(request, document_page_id): - return transform_page( - request, - document_page_id, - zoom_function=lambda x: setting_zoom_min_level.value if x - setting_zoom_percent_step.value < setting_zoom_min_level.value else x - setting_zoom_percent_step.value - ) +class DocumentPageZoomOutView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + zoom = query_dict['zoom'] - setting_zoom_percent_step.value + + if zoom < setting_zoom_min_level.value: + zoom = setting_zoom_min_level.value + + query_dict['zoom'] = zoom -def document_page_rotate_right(request, document_page_id): - return transform_page( - request, - document_page_id, - rotation_function=lambda x: (x + setting_rotation_step.value) % 360 - ) +class DocumentPageRotateLeftView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + query_dict['rotation'] = ( + query_dict['rotation'] - setting_rotation_step.value + ) % 360 -def document_page_rotate_left(request, document_page_id): - return transform_page( - request, - document_page_id, - rotation_function=lambda x: (x - setting_rotation_step.value) % 360 - ) +class DocumentPageRotateRightView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + query_dict['rotation'] = ( + query_dict['rotation'] + setting_rotation_step.value + ) % 360 def document_print(request, document_id): From 6fbbc7bacb3db4f4b1c35b6d2d338191e0f4710a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 2 Nov 2016 19:01:51 -0400 Subject: [PATCH 028/119] Fix tag url typo. --- mayan/apps/tags/urls.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mayan/apps/tags/urls.py b/mayan/apps/tags/urls.py index bb6dff9ccf..f80692fafb 100644 --- a/mayan/apps/tags/urls.py +++ b/mayan/apps/tags/urls.py @@ -8,7 +8,7 @@ from .api_views import ( ) from .views import ( DocumentTagListView, TagCreateView, TagEditView, TagListView, - TagTaggedItemListView, tag_attach, tag_multiple_attach, + TagTaggedItemListView, tag_attach, tag_delete, tag_multiple_attach, tag_multiple_delete, multiple_documents_selection_tag_remove, single_document_multiple_tag_remove ) @@ -17,7 +17,7 @@ urlpatterns = patterns( '', url(r'^list/$', TagListView.as_view(), name='tag_list'), url(r'^create/$', TagCreateView.as_view(), name='tag_create'), - url(r'^(?P\d+)/delete/$', 'tag_delete', name='tag_delete'), + url(r'^(?P\d+)/delete/$', tag_delete, name='tag_delete'), url(r'^(?P\d+)/edit/$', TagEditView.as_view(), name='tag_edit'), url( r'^(?P\d+)/documents/$', TagTaggedItemListView.as_view(), From 2cdee10d500f83e45bae028c6bc6b4d8162b4ead Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 15:34:32 -0400 Subject: [PATCH 029/119] Make sure transformation arguments are always valid. --- mayan/apps/documents/api_views.py | 4 ++-- mayan/apps/documents/models.py | 10 ++++------ mayan/apps/documents/widgets.py | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index 49678e87b1..0d52a5deac 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -247,8 +247,8 @@ class APIDocumentPageImageView(generics.RetrieveAPIView): def retrieve(self, request, *args, **kwargs): size = request.GET.get('size') - zoom = request.GET.get('zoom') - rotation = request.GET.get('rotation') + zoom = int(request.GET.get('zoom')) + rotation = int(request.GET.get('rotation')) task = task_generate_document_page_image.apply_async( kwargs=dict( diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index 06f3afb64b..22797878ce 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -680,12 +680,10 @@ class DocumentPage(models.Model): # Convert arguments into transformations transformations = kwargs.get('transformations', []) size = kwargs.get('size', setting_display_size.value) - rotation = int( - kwargs.get('rotation', DEFAULT_ROTATION) or DEFAULT_ROTATION - ) % 360 - zoom_level = int( - kwargs.get('zoom', DEFAULT_ZOOM_LEVEL) or DEFAULT_ZOOM_LEVEL - ) + + rotation = kwargs.get('rotation', DEFAULT_ROTATION) + + zoom_level = kwargs.get('zoom', DEFAULT_ZOOM_LEVEL) if zoom_level < setting_zoom_min_level.value: zoom_level = setting_zoom_min_level.value diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index d996fde790..a0b7f9870d 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -98,8 +98,8 @@ def document_html_widget(document_page, click_view=None, click_view_arguments=No document = document_page.document query_dict = { - 'zoom': zoom, - 'rotation': rotation, + 'zoom': zoom or DEFAULT_ZOOM_LEVEL, + 'rotation': rotation or DEFAULT_ROTATION, 'size': size, 'page': document_page.page_number } From 12e500e55d3763688f5b8594be67701afa3d8a9b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 15:35:03 -0400 Subject: [PATCH 030/119] Display a message instead of a UI specific icon when there are not pages to show. --- mayan/apps/documents/widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index a0b7f9870d..21143b67df 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -72,7 +72,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): output.append('') if not total_pages: - output.append('') + output.append('

No pages to display

') output.append('') From 877772f80dc6798a87e64595d6078110d4d8542f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 15:49:28 -0400 Subject: [PATCH 031/119] Add another temporary directory to be ignored during tests. --- mayan/apps/common/tests/mixins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mayan/apps/common/tests/mixins.py b/mayan/apps/common/tests/mixins.py index d5bfaf2e31..e5c818b1ed 100644 --- a/mayan/apps/common/tests/mixins.py +++ b/mayan/apps/common/tests/mixins.py @@ -34,7 +34,7 @@ class ContentTypeCheckMixin(object): class TempfileCheckMixin(object): # Ignore the jvmstat instrumentation and GitLab's CI .config files - ignore_globs = ('hsperfdata_*', '.config') + ignore_globs = ('hsperfdata_*', '.config', '.cache') def _get_temporary_entries(self): ignored_result = [] From 2b335e9454fb53ad1e4348b9def8ee5897e74918 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 15:49:56 -0400 Subject: [PATCH 032/119] Add test for deleted document restore link. --- mayan/apps/documents/tests/test_links.py | 44 ++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/mayan/apps/documents/tests/test_links.py b/mayan/apps/documents/tests/test_links.py index f13a97970b..a6f75d7481 100644 --- a/mayan/apps/documents/tests/test_links.py +++ b/mayan/apps/documents/tests/test_links.py @@ -12,10 +12,12 @@ from user_management.tests.literals import ( ) from ..links import ( - link_document_version_download, link_document_version_revert + link_document_restore, link_document_version_download, + link_document_version_revert ) from ..permissions import ( - permission_document_download, permission_document_version_revert + permission_document_download, permission_document_restore, + permission_document_version_revert ) from .literals import TEST_SMALL_DOCUMENT_PATH @@ -98,3 +100,41 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase): args=(self.document.latest_version.pk,) ) ) + + +class DeletedDocumentsLinksTestCase(GenericDocumentViewTestCase): + def test_deleted_document_restore_link_no_permission(self): + self.document.delete() + + self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD) + + self.add_test_view(test_object=self.document) + context = self.get_test_view() + resolved_link = link_document_restore.resolve(context=context) + + self.assertEqual(resolved_link, None) + + def test_deleted_document_restore_link_with_permission(self): + self.document.delete() + + self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD) + + acl = AccessControlList.objects.create( + content_object=self.document, role=self.role + ) + acl.permissions.add( + permission_document_restore.stored_permission + ) + + self.add_test_view(test_object=self.document) + context = self.get_test_view() + resolved_link = link_document_restore.resolve(context=context) + + self.assertNotEqual(resolved_link, None) + self.assertEqual( + resolved_link.url, + reverse( + 'documents:document_restore', + args=(self.document.pk,) + ) + ) From b9791287d3e13b8369c0e6bbf9da0617b53ca4ef Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 15:50:23 -0400 Subject: [PATCH 033/119] Fix typo defining user_delete view. --- mayan/apps/user_management/urls.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mayan/apps/user_management/urls.py b/mayan/apps/user_management/urls.py index 26731722fc..c2dc6da777 100644 --- a/mayan/apps/user_management/urls.py +++ b/mayan/apps/user_management/urls.py @@ -9,7 +9,8 @@ from .api_views import ( from .views import ( GroupCreateView, GroupDeleteView, GroupEditView, GroupListView, GroupMembersView, UserEditView, UserGroupsView, UserListView, - user_multiple_delete, user_multiple_set_password, user_set_password + user_delete, user_multiple_delete, user_multiple_set_password, + user_set_password ) urlpatterns = patterns( @@ -32,7 +33,7 @@ urlpatterns = patterns( url(r'^user/list/$', UserListView.as_view(), name='user_list'), url(r'^user/add/$', 'user_add', name='user_add'), url(r'^user/(?P\d+)/edit/$', UserEditView.as_view(), name='user_edit'), - url(r'^user/(?P\d+)/delete/$', 'user_delete', name='user_delete'), + url(r'^user/(?P\d+)/delete/$', user_delete, name='user_delete'), url( r'^user/multiple/delete/$', user_multiple_delete, name='user_multiple_delete' From 4d9da588904d48aee95e9d8943732b77e5587593 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 15:50:38 -0400 Subject: [PATCH 034/119] Update search api test to work with the new url scheme. --- mayan/apps/dynamic_search/tests/test_api.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mayan/apps/dynamic_search/tests/test_api.py b/mayan/apps/dynamic_search/tests/test_api.py index d218757736..e8483a90a4 100644 --- a/mayan/apps/dynamic_search/tests/test_api.py +++ b/mayan/apps/dynamic_search/tests/test_api.py @@ -9,6 +9,7 @@ from django.test import override_settings from rest_framework.test import APITestCase from documents.models import DocumentType +from documents.search import document_search from documents.tests import TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_PATH from user_management.tests import ( TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME @@ -42,7 +43,13 @@ class SearchAPITestCase(APITestCase): ) response = self.client.get( - '{}?q={}'.format(reverse('rest_api:search-view'), document.label) + '{}?q={}'.format( + reverse( + 'rest_api:search-view', args=( + document_search.get_full_name(), + ) + ), document.label + ) ) content = loads(response.content) From a59c4e8fc1d71cd9c0ab260c6ea084aa61e5d7d2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 17:47:30 -0400 Subject: [PATCH 035/119] Fix dynamic search tests. --- mayan/apps/dynamic_search/tests/test_views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mayan/apps/dynamic_search/tests/test_views.py b/mayan/apps/dynamic_search/tests/test_views.py index 38f756027d..5d53ebb50f 100644 --- a/mayan/apps/dynamic_search/tests/test_views.py +++ b/mayan/apps/dynamic_search/tests/test_views.py @@ -59,7 +59,9 @@ class Issue46TestCase(TestCase): with self.settings(COMMON_PAGINATE_BY=2): # Funcitonal test for the first page of advanced results response = self.client.get( - reverse('search:results'), {'label': 'test'} + reverse( + 'search:results', args=(document_search.get_full_name(),) + ), {'label': 'test'} ) self.assertContains( @@ -69,7 +71,9 @@ class Issue46TestCase(TestCase): # Functional test for the second page of advanced results response = self.client.get( - reverse('search:results'), {'label': 'test', 'page': 2} + reverse( + 'search:results', args=(document_search.get_full_name(),) + ), {'label': 'test', 'page': 2} ) self.assertContains( response, 'Total (3 - 4 out of 4) (Page 2 of 2)', From b2ba2c70dcbdca84828ebbdec68abaef7c45424a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 17:47:45 -0400 Subject: [PATCH 036/119] Fix typo in user_add view url definition. --- mayan/apps/user_management/urls.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mayan/apps/user_management/urls.py b/mayan/apps/user_management/urls.py index c2dc6da777..8b82a1cd61 100644 --- a/mayan/apps/user_management/urls.py +++ b/mayan/apps/user_management/urls.py @@ -9,7 +9,7 @@ from .api_views import ( from .views import ( GroupCreateView, GroupDeleteView, GroupEditView, GroupListView, GroupMembersView, UserEditView, UserGroupsView, UserListView, - user_delete, user_multiple_delete, user_multiple_set_password, + user_add, user_delete, user_multiple_delete, user_multiple_set_password, user_set_password ) @@ -31,7 +31,7 @@ urlpatterns = patterns( ), url(r'^user/list/$', UserListView.as_view(), name='user_list'), - url(r'^user/add/$', 'user_add', name='user_add'), + url(r'^user/add/$', user_add, name='user_add'), url(r'^user/(?P\d+)/edit/$', UserEditView.as_view(), name='user_edit'), url(r'^user/(?P\d+)/delete/$', user_delete, name='user_delete'), url( From 31b2464899d264dca3f38aabbb0616efea82a9c2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2016 18:33:25 -0400 Subject: [PATCH 037/119] Add explicit test for deferred fields instances in menu resolution. Fixes document link appearing in deleted document views. Fixes GitLab issue #331. --- mayan/apps/navigation/classes.py | 78 +++++++++++++++++++------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 10c2d46da1..2d0b39c755 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -88,7 +88,37 @@ class Menu(object): links=links, position=position, source=sources ) + def get_resolved_navigation_object_list(self, context, source): + resolved_navigation_object_list = [] + + if source: + resolved_navigation_object_list = [source] + else: + navigation_object_list = context.get( + 'navigation_object_list', ('object',) + ) + + logger.debug('navigation_object_list: %s', navigation_object_list) + + # Multiple objects + for navigation_object in navigation_object_list: + try: + resolved_navigation_object_list.append( + Variable(navigation_object).resolve(context) + ) + except VariableDoesNotExist: + pass + + logger.debug( + 'resolved_navigation_object_list: %s', + resolved_navigation_object_list + ) + + return resolved_navigation_object_list + def resolve(self, context, source=None): + result = [] + try: request = Variable('request').resolve(context) except VariableDoesNotExist: @@ -101,44 +131,29 @@ class Menu(object): # Get sources: view name, view objects current_view = resolve(current_path).view_name - resolved_navigation_object_list = [] - result = [] - - if source: - resolved_navigation_object_list = [source] - else: - navigation_object_list = context.get( - 'navigation_object_list', ('object',) - ) - - # Multiple objects - for navigation_object in navigation_object_list: - try: - resolved_navigation_object_list.append( - Variable(navigation_object).resolve(context) - ) - except VariableDoesNotExist: - pass + resolved_navigation_object_list = self.get_resolved_navigation_object_list( + context=context, source=source + ) for resolved_navigation_object in resolved_navigation_object_list: resolved_links = [] for bound_source, links in self.bound_links.iteritems(): try: - if inspect.isclass(bound_source) and type(resolved_navigation_object) == bound_source: - for link in links: - resolved_link = link.resolve( - context=context, - resolved_object=resolved_navigation_object - ) - if resolved_link: - resolved_links.append(resolved_link) - # No need for further content object match testing - break - else: - # Second try for objects using .defer() or .only() - if inspect.isclass(bound_source) and isinstance(resolved_navigation_object, bound_source): + if inspect.isclass(bound_source): + if type(resolved_navigation_object) == bound_source: + for link in links: + resolved_link = link.resolve( + context=context, + resolved_object=resolved_navigation_object + ) + if resolved_link: + resolved_links.append(resolved_link) + # No need for further content object match testing + break + elif resolved_navigation_object.get_deferred_fields() and isinstance(resolved_navigation_object, bound_source): + # Second try for objects using .defer() or .only() for link in links: resolved_link = link.resolve( context=context, @@ -148,7 +163,6 @@ class Menu(object): resolved_links.append(resolved_link) # No need for further content object match testing break - except TypeError: # When source is a dictionary pass From 011db7c0f6a16f47fdfb5eee84cf9af9ec39d20f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 4 Nov 2016 01:32:59 -0400 Subject: [PATCH 038/119] Convert the document print view to CBV. Tweak the print template. Make 'print all' pages the default. --- mayan/apps/documents/forms.py | 7 +- .../templates/documents/document_print.html | 5 +- mayan/apps/documents/urls.py | 15 ++-- mayan/apps/documents/views.py | 87 +++++++++++-------- 4 files changed, 64 insertions(+), 50 deletions(-) diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index 57a95478e5..6740c3472c 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -13,7 +13,7 @@ from common.forms import DetailForm, ModelForm from .models import ( Document, DocumentType, DocumentPage, DocumentTypeFilename ) -from .literals import DEFAULT_ZIP_FILENAME, PAGE_RANGE_CHOICES +from .literals import DEFAULT_ZIP_FILENAME, PAGE_RANGE_ALL, PAGE_RANGE_CHOICES from .permissions import permission_document_create from .widgets import DocumentPagesCarouselWidget, DocumentPageImageWidget @@ -207,8 +207,9 @@ class DocumentDownloadForm(forms.Form): self.fields['compressed'].widget.attrs.update({'disabled': True}) -class PrintForm(forms.Form): +class DocumentPrintForm(forms.Form): page_group = forms.ChoiceField( - widget=forms.RadioSelect, choices=PAGE_RANGE_CHOICES + choices=PAGE_RANGE_CHOICES, initial=PAGE_RANGE_ALL, + widget=forms.RadioSelect ) page_range = forms.CharField(label=_('Page range'), required=False) diff --git a/mayan/apps/documents/templates/documents/document_print.html b/mayan/apps/documents/templates/documents/document_print.html index 46360f3ec9..696abb1d21 100644 --- a/mayan/apps/documents/templates/documents/document_print.html +++ b/mayan/apps/documents/templates/documents/document_print.html @@ -4,9 +4,6 @@ {% block content_plain %} {% for page in pages %} - + {% endfor %} {% endblock %} - - -setting_print_size.value diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 310191e218..f4955df250 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -19,11 +19,12 @@ from .views import ( DocumentListView, DocumentPageListView, DocumentPageRotateLeftView, DocumentPageRotateRightView, DocumentPageView, DocumentPageViewResetView, DocumentPageZoomInView, DocumentPageZoomOutView, DocumentPreviewView, - DocumentRestoreView, DocumentRestoreManyView, DocumentTrashView, - DocumentTrashManyView, DocumentTypeCreateView, DocumentTypeDeleteView, - DocumentTypeDocumentListView, DocumentTypeFilenameCreateView, - DocumentTypeFilenameDeleteView, DocumentTypeFilenameEditView, - DocumentTypeFilenameListView, DocumentTypeListView, DocumentTypeEditView, + DocumentPrint, DocumentRestoreView, DocumentRestoreManyView, + DocumentTrashView, DocumentTrashManyView, DocumentTypeCreateView, + DocumentTypeDeleteView, DocumentTypeDocumentListView, + DocumentTypeFilenameCreateView, DocumentTypeFilenameDeleteView, + DocumentTypeFilenameEditView, DocumentTypeFilenameListView, + DocumentTypeListView, DocumentTypeEditView, DocumentVersionDownloadFormView, DocumentVersionDownloadView, DocumentVersionListView, DocumentVersionRevertView, DocumentView, EmptyTrashCanView, RecentDocumentListView, document_clear_transformations, @@ -31,7 +32,7 @@ from .views import ( document_multiple_document_type_edit, document_multiple_update_page_count, document_page_navigation_first, document_page_navigation_last, document_page_navigation_next, document_page_navigation_previous, - document_print, document_update_page_count + document_update_page_count ) @@ -92,7 +93,7 @@ urlpatterns = patterns( name='document_edit' ), url( - r'^(?P\d+)/print/$', document_print, + r'^(?P\d+)/print/$', DocumentPrint.as_view(), name='document_print' ), url( diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 07c92ced58..b64c008c04 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -29,8 +29,8 @@ from converter.permissions import permission_transformation_delete from .events import event_document_download, event_document_view from .forms import ( DocumentDownloadForm, DocumentForm, DocumentPageForm, DocumentPreviewForm, - DocumentPropertiesForm, DocumentTypeSelectForm, - DocumentTypeFilenameForm_create, PrintForm + DocumentPrintForm, DocumentPropertiesForm, DocumentTypeSelectForm, + DocumentTypeFilenameForm_create ) from .literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME from .models import ( @@ -1141,46 +1141,61 @@ class DocumentPageRotateRightView(DocumentPageInteractiveTransformation): ) % 360 -def document_print(request, document_id): - document = get_object_or_404(Document, pk=document_id) +class DocumentPrint(FormView): + form_class = DocumentPrintForm - AccessControlList.objects.check_access( - permissions=permission_document_print, user=request.user, obj=document - ) + def form_valid(self, form): + instance = self.get_object() - document.add_as_recent_document_for_user(request.user) + if form.cleaned_data['page_group'] == PAGE_RANGE_RANGE: + page_range = form.cleaned_data['page_range'] - post_redirect = None - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_redirect or document.get_absolute_url()))) - - if request.method == 'POST': - form = PrintForm(request.POST) - if form.is_valid(): - if form.cleaned_data['page_group'] == PAGE_RANGE_RANGE: - page_range = form.cleaned_data['page_range'] - - if page_range: - page_range = parse_range(page_range) - pages = document.pages.filter(page_number__in=page_range) - else: - pages = document.pages.all() + if page_range: + page_range = parse_range(page_range) + pages = instance.pages.filter(page_number__in=page_range) else: - pages = document.pages.all() + pages = instance.pages.all() + else: + pages = instance.pages.all() - return render_to_response('documents/document_print.html', { + context = self.get_context_data() + + context.update( + { 'appearance_type': 'plain', - 'object': document, 'pages': pages, 'size': setting_print_size.value, - 'title': _('Print: %s') % document, - }, context_instance=RequestContext(request)) - else: - form = PrintForm() + } + ) - return render_to_response('appearance/generic_form.html', { - 'form': form, - 'object': document, - 'next': next, - 'title': _('Print: %s') % document, - 'submit_label': _('Submit'), - }, context_instance=RequestContext(request)) + return self.render_to_response(context=context) + + def get_extra_context(self): + instance = self.get_object() + + context = { + 'object': instance, + 'submit_method': 'POST', + 'submit_label': _('Submit'), + 'title': _('Print: %s') % instance, + } + + return context + + def get_object(self): + instance = get_object_or_404(Document, pk=self.kwargs['pk']) + + AccessControlList.objects.check_access( + permissions=permission_document_print, user=self.request.user, + obj=instance + ) + + instance.add_as_recent_document_for_user(self.request.user) + + return instance + + def get_template_names(self): + if self.request.method == 'POST': + return ['documents/document_print.html'] + else: + return [self.template_name] From 0992e22568cf925e4a3c4df98a9aac9a6869e692 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 4 Nov 2016 01:33:44 -0400 Subject: [PATCH 039/119] Typecast to integers only when there is querystring data. --- mayan/apps/documents/api_views.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index 0d52a5deac..92d66c6c27 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -247,8 +247,15 @@ class APIDocumentPageImageView(generics.RetrieveAPIView): def retrieve(self, request, *args, **kwargs): size = request.GET.get('size') - zoom = int(request.GET.get('zoom')) - rotation = int(request.GET.get('rotation')) + zoom = request.GET.get('zoom') + + if zoom: + zoom = int(zoom) + + rotation = request.GET.get('rotation') + + if rotation: + rotation = int(rotation) task = task_generate_document_page_image.apply_async( kwargs=dict( From 3df30b63f374dff03182ad3d61541997881fdc43 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 4 Nov 2016 01:34:12 -0400 Subject: [PATCH 040/119] Make sure the method has sensible defaults. --- mayan/apps/documents/models.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index 22797878ce..4599e3a1bc 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -679,11 +679,13 @@ class DocumentPage(models.Model): def generate_image(self, *args, **kwargs): # Convert arguments into transformations transformations = kwargs.get('transformations', []) - size = kwargs.get('size', setting_display_size.value) - rotation = kwargs.get('rotation', DEFAULT_ROTATION) + # Set sensible defaults if the argument is not specified or if the + # argument is None - zoom_level = kwargs.get('zoom', DEFAULT_ZOOM_LEVEL) + size = kwargs.get('size', setting_display_size.value) or setting_display_size.value + rotation = kwargs.get('rotation', DEFAULT_ROTATION) or DEFAULT_ROTATION + zoom_level = kwargs.get('zoom', DEFAULT_ZOOM_LEVEL) or DEFAULT_ZOOM_LEVEL if zoom_level < setting_zoom_min_level.value: zoom_level = setting_zoom_min_level.value From d473245fb2c151d12437ad7ef1534108dfdcbfc3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 4 Nov 2016 01:45:40 -0400 Subject: [PATCH 041/119] Rename the document_html_widget to document_page_html_widget for clarity of purpose. --- mayan/apps/documents/apps.py | 10 +++++----- mayan/apps/documents/widgets.py | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index ee975aa16a..33ff3f12ba 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -74,7 +74,7 @@ from .statistics import ( new_document_versions_per_month, total_document_per_month, total_document_page_per_month, total_document_version_per_month ) -from .widgets import document_html_widget +from .widgets import document_page_html_widget class DocumentsApp(MayanAppConfig): @@ -151,7 +151,7 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=Document, label=_('Thumbnail'), - func=lambda context: document_html_widget( + func=lambda context: document_page_html_widget( document_page=context['object'].latest_version.pages.first(), click_view='rest_api:documentpage-image', click_view_arguments_lazy=lambda: ( @@ -168,7 +168,7 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=DocumentPage, label=_('Thumbnail'), - func=lambda context: document_html_widget( + func=lambda context: document_page_html_widget( document_page=context['object'], click_view='rest_api:documentpage-image', click_view_arguments=(context['object'].pk,), @@ -181,7 +181,7 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=DocumentPageResult, label=_('Thumbnail'), - func=lambda context: document_html_widget( + func=lambda context: document_page_html_widget( document_page=context['object'], click_view='rest_api:documentpage-image', click_view_arguments=(context['object'].pk,), @@ -210,7 +210,7 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=DeletedDocument, label=_('Thumbnail'), - func=lambda context: document_html_widget( + func=lambda context: document_page_html_widget( document_page=context['object'].latest_version.pages.first(), click_view='rest_api:documentpage-image', click_view_arguments_lazy=lambda: ( diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index 21143b67df..f935ccd831 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -24,7 +24,7 @@ class DocumentPageImageWidget(forms.widgets.Widget): '
' ) - output.append(document_html_widget( + output.append(document_page_html_widget( value, zoom=zoom, rotation=rotation, image_class='lazy-load', nolazyload=False, size=setting_display_size.value) ) @@ -51,7 +51,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): for document_page in document_pages: output.append('
diff --git a/mayan/apps/appearance/templates/navigation/generic_link_instance.html b/mayan/apps/appearance/templates/navigation/generic_link_instance.html index f2d57259cd..f35dbd6e98 100644 --- a/mayan/apps/appearance/templates/navigation/generic_link_instance.html +++ b/mayan/apps/appearance/templates/navigation/generic_link_instance.html @@ -1,5 +1,9 @@ -{% if link.disabled %} - {% if link.icon %} {% endif %}{{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}{% if horizontal %}{% if not forloop.last %} {% endif %}{% endif %} +{% if link.separator %} + {% else %} - {% if link.icon %} {% endif %}{{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}{% if horizontal %}{% if not forloop.last %} {% endif %}{% endif %} + {% if link.disabled %} + {% if link.icon %} {% endif %}{{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}{% if horizontal %}{% if not forloop.last %} {% endif %}{% endif %} + {% else %} + {% if link.icon %} {% endif %}{{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}{% if horizontal %}{% if not forloop.last %} {% endif %}{% endif %} + {% endif %} {% endif %} diff --git a/mayan/apps/authentication/apps.py b/mayan/apps/authentication/apps.py index dd63d47de9..85942e587c 100644 --- a/mayan/apps/authentication/apps.py +++ b/mayan/apps/authentication/apps.py @@ -4,7 +4,7 @@ import logging from django.utils.translation import ugettext_lazy as _ -from common import MayanAppConfig, menu_secondary +from common import MayanAppConfig, menu_user from .links import link_logout, link_password_change @@ -19,14 +19,8 @@ class AuthenticationApp(MayanAppConfig): def ready(self): super(AuthenticationApp, self).ready() - menu_secondary.bind_links( + menu_user.bind_links( links=( link_password_change, link_logout - ), position=99, sources=( - 'common:current_user_details', 'common:current_user_edit', - 'common:current_user_locale_profile_details', - 'common:current_user_locale_profile_edit', - 'authentication:password_change_view', - 'common:setup_list', 'common:tools_list' - ) + ), position=99 ) diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index 793a204d80..ecbd535d24 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -27,7 +27,7 @@ from .links import ( link_packages_licenses, link_setup, link_tools ) from .literals import DELETE_STALE_UPLOADS_INTERVAL -from .menus import menu_facet, menu_main, menu_secondary, menu_tools +from .menus import menu_facet, menu_main, menu_tools, menu_user from .settings import setting_auto_logging from .tasks import task_delete_stale_uploads # NOQA - Force task registration @@ -1013,20 +1013,15 @@ THE SOFTWARE. }, } ) - - menu_facet.bind_links( + from navigation.classes import Separator + menu_user.bind_links( links=( - link_current_user_details, - link_current_user_locale_profile_details, link_tools, - link_setup - ), sources=( - 'common:current_user_details', 'common:current_user_edit', - 'common:current_user_locale_profile_details', - 'common:current_user_locale_profile_edit', - 'authentication:password_change_view', 'common:setup_list', - 'common:tools_list' + link_current_user_details, link_current_user_edit, + link_current_user_locale_profile_edit, link_tools, link_setup, + Separator() ) ) + menu_facet.bind_links( links=(link_about, link_license, link_packages_licenses), sources=( @@ -1035,18 +1030,6 @@ THE SOFTWARE. ) ) menu_main.bind_links(links=(link_about,), position=99) - menu_secondary.bind_links( - links=( - link_current_user_edit, link_current_user_locale_profile_edit - ), - sources=( - 'common:current_user_details', 'common:current_user_edit', - 'common:current_user_locale_profile_details', - 'common:current_user_locale_profile_edit', - 'authentication:password_change_view', 'common:setup_list', - 'common:tools_list' - ) - ) menu_tools.bind_links( links=(link_filters,) diff --git a/mayan/apps/common/menus.py b/mayan/apps/common/menus.py index b1004b952c..382fd7f4d2 100644 --- a/mayan/apps/common/menus.py +++ b/mayan/apps/common/menus.py @@ -5,7 +5,7 @@ from navigation import Menu __all__ = ( 'menu_facet', 'menu_front_page', 'menu_object', 'menu_main', 'menu_multi_item', 'menu_secondary', 'menu_setup', 'menu_sidebar', - 'menu_tools' + 'menu_tools', 'menu_user' ) menu_facet = Menu(name='object facet') @@ -17,3 +17,4 @@ menu_secondary = Menu(name='secondary menu') menu_setup = Menu(name='setup menu') menu_sidebar = Menu(name='sidebar menu') menu_tools = Menu(name='tools menu') +menu_user = Menu(name='user menu') diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 58cc553e85..0104ed15c8 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -153,7 +153,7 @@ class Menu(object): # No need for further content object match testing break elif hasattr(resolved_navigation_object, 'get_deferred_fields') and resolved_navigation_object.get_deferred_fields() and isinstance(resolved_navigation_object, bound_source): - # Second try for objects using .defer() or .only() + # Second try for objects using .defer() or .only() for link in links: resolved_link = link.resolve( context=context, @@ -362,6 +362,21 @@ class Link(object): return resolved_link +class Separator(Link): + def __init__(self, text=None, view=None, args=None, condition=None, + conditional_disable=None, description=None, icon=None, + keep_query=False, kwargs=None, permissions=None, + permissions_related=None, remove_from_query=None, tags=None): + self.icon = None + self.text = None + self.view = None + + def resolve(self, context, resolved_object=None): + result = ResolvedLink(current_view=None, link=self) + result.separator = True + return result + + class SourceColumn(object): _registry = {} From 248d3886e07e836b1818d958edcc94478dfb8717 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 11 Nov 2016 02:12:42 -0400 Subject: [PATCH 048/119] Add dashboard feature --- .../appearance/static/appearance/css/base.css | 9 ++ .../appearance/dashboard_widget.html | 32 +++++++ .../appearance/templates/appearance/home.html | 25 +++-- mayan/apps/common/classes.py | 18 ++++ mayan/apps/common/templatetags/common_tags.py | 6 ++ mayan/apps/documents/apps.py | 39 +++++++- mayan/apps/documents/statistics.py | 95 ++++++++++++++----- 7 files changed, 185 insertions(+), 39 deletions(-) create mode 100644 mayan/apps/appearance/templates/appearance/dashboard_widget.html diff --git a/mayan/apps/appearance/static/appearance/css/base.css b/mayan/apps/appearance/static/appearance/css/base.css index a1df431e76..e353760ec5 100644 --- a/mayan/apps/appearance/static/appearance/css/base.css +++ b/mayan/apps/appearance/static/appearance/css/base.css @@ -159,3 +159,12 @@ hr { a i { padding-right: 3px; } + +.panel-dashboard-widget { + box-shadow: 1px 1px 1px rgba(0,0,0,0.3); + border: 1px solid black; +} + +.panel-dashboard-widget .panel-heading i { + text-shadow: 1px 1px 1px rgba(0,0,0,0.3); +} diff --git a/mayan/apps/appearance/templates/appearance/dashboard_widget.html b/mayan/apps/appearance/templates/appearance/dashboard_widget.html new file mode 100644 index 0000000000..8e7c1b853c --- /dev/null +++ b/mayan/apps/appearance/templates/appearance/dashboard_widget.html @@ -0,0 +1,32 @@ +{% load i18n %} + +
+
+
+
+
+ +
+
+ {{ widget.label }} +
+ {% if widget.func %} + {{ widget.func }} + {% else %} + {{ widget.queryset.count }} + {% endif %} +
+
+
+
+ {% if widget.link %} + + + + {% endif %} +
+
diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html index 1386cf6d09..2c6fe6437c 100644 --- a/mayan/apps/appearance/templates/appearance/home.html +++ b/mayan/apps/appearance/templates/appearance/home.html @@ -3,6 +3,7 @@ {% load i18n %} {% load static %} +{% load common_tags %} {% load navigation_tags %} {% block title %}{% trans 'Home' %}{% endblock %} @@ -53,30 +54,21 @@
-
{% trans 'Search pages' %}
+
{% trans 'Search' %}
- + {% trans 'Advanced' %}
-
-
-
-
- -
-
-
-
{% trans 'Search documents' %}
-
+
- + {% trans 'Advanced' %} @@ -88,4 +80,11 @@
+ {% get_dashboard_widgets as dashboard_widgets %} +
+ {% for widget in dashboard_widgets %} + {% include 'appearance/dashboard_widget.html' %} + {% endfor %} +
+ {% endblock %} diff --git a/mayan/apps/common/classes.py b/mayan/apps/common/classes.py index 0ef0e12578..df51e0d376 100644 --- a/mayan/apps/common/classes.py +++ b/mayan/apps/common/classes.py @@ -5,6 +5,24 @@ from django.db import models from django.utils.translation import ugettext +class DashboardWidget(object): + _registry = [] + + @classmethod + def get_all(cls): + return cls._registry + + def __init__(self, label, func=None, icon=None, link=None, queryset=None, statistic_slug=None): + self.label = label + self.icon = icon + self.link = link + self.queryset = queryset + self.func = func + self.statistic_slug = statistic_slug + + self.__class__._registry.append(self) + + class ModelAttribute(object): __registry = {} diff --git a/mayan/apps/common/templatetags/common_tags.py b/mayan/apps/common/templatetags/common_tags.py index a4f6b40b42..a09b29649b 100644 --- a/mayan/apps/common/templatetags/common_tags.py +++ b/mayan/apps/common/templatetags/common_tags.py @@ -10,6 +10,7 @@ from django.template.loader import get_template import mayan +from ..classes import DashboardWidget from ..utils import return_attrib register = Library() @@ -22,6 +23,11 @@ except sh.CommandNotFound: DATE = None +@register.assignment_tag +def get_dashboard_widgets(): + return DashboardWidget.get_all() + + @register.filter def get_encoded_parameter(item, parameters_dict): result = {} diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 33ff3f12ba..188a8395b5 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -4,6 +4,7 @@ from datetime import timedelta from kombu import Exchange, Queue +from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext_lazy as _ from acls import ModelPermission @@ -13,7 +14,7 @@ from common import ( MayanAppConfig, MissingItem, menu_facet, menu_front_page, menu_object, menu_secondary, menu_setup, menu_sidebar, menu_multi_item, menu_tools ) -from common.classes import ModelAttribute +from common.classes import DashboardWidget, ModelAttribute from common.signals import post_initial_setup from common.widgets import two_state_template from converter.links import link_transformation_list @@ -71,6 +72,7 @@ from .search import document_search, document_page_search # NOQA from .settings import setting_display_size, setting_thumbnail_size from .statistics import ( new_documents_per_month, new_document_pages_per_month, + new_document_pages_this_month, new_documents_this_month, new_document_versions_per_month, total_document_per_month, total_document_page_per_month, total_document_version_per_month ) @@ -96,6 +98,41 @@ class DocumentsApp(MayanAppConfig): DocumentTypeFilename = self.get_model('DocumentTypeFilename') DocumentVersion = self.get_model('DocumentVersion') + DashboardWidget( + func=new_document_pages_this_month, icon='fa fa-calendar', + label=_('New pages this month'), + link=reverse_lazy( + 'statistics:statistic_detail', + args=('new-document-pages-per-month',) + ) + ) + DashboardWidget( + func=new_documents_this_month, icon='fa fa-calendar', + label=_('New documents this month'), + link=reverse_lazy( + 'statistics:statistic_detail', + args=('new-documents-per-month',) + ) + ) + + DashboardWidget( + icon='fa fa-file', queryset=Document.objects.all(), + label=_('Total documents'), + link=reverse_lazy('documents:document_list') + ) + + DashboardWidget( + icon='fa fa-book', queryset=DocumentType.objects.all(), + label=_('Document types'), + link=reverse_lazy('documents:document_type_list') + ) + + DashboardWidget( + icon='fa fa-trash', queryset=DeletedDocument.objects.all(), + label=_('Documents in trash'), + link=reverse_lazy('documents:document_list_deleted') + ) + MissingItem( label=_('Create a document type'), description=_( diff --git a/mayan/apps/documents/statistics.py b/mayan/apps/documents/statistics.py index 12d0a71f49..a7b5773101 100644 --- a/mayan/apps/documents/statistics.py +++ b/mayan/apps/documents/statistics.py @@ -2,11 +2,13 @@ from __future__ import absolute_import, unicode_literals import datetime +from django.apps import apps + import qsstats def new_documents_per_month(): - from .models import Document + Document = apps.get_model(app_label='documents', model_name='Document') qss = qsstats.QuerySetStats(Document.passthrough.all(), 'date_added') @@ -15,43 +17,78 @@ def new_documents_per_month(): return { 'series': { - 'Documents': map(lambda x: {x[0].month: x[1]}, qss.time_series(start=this_year, end=today, interval='months')) - } - } - - -def new_document_versions_per_month(): - from .models import DocumentVersion - - qss = qsstats.QuerySetStats(DocumentVersion.objects.all(), 'document__date_added') - - today = datetime.date.today() - this_year = datetime.date(year=today.year, month=1, day=1) - - return { - 'series': { - 'Versions': map(lambda x: {x[0].month: x[1]}, qss.time_series(start=this_year, end=today, interval='months')) + 'Documents': map( + lambda x: {x[0].month: x[1]}, + qss.time_series(start=this_year, end=today, interval='months') + ) } } def new_document_pages_per_month(): - from .models import DocumentPage + DocumentPage = apps.get_model( + app_label='documents', model_name='DocumentPage' + ) - qss = qsstats.QuerySetStats(DocumentPage.objects.all(), 'document_version__document__date_added') + qss = qsstats.QuerySetStats( + DocumentPage.objects.all(), 'document_version__document__date_added' + ) today = datetime.date.today() this_year = datetime.date(year=today.year, month=1, day=1) return { 'series': { - 'Pages': map(lambda x: {x[0].month: x[1]}, qss.time_series(start=this_year, end=today, interval='months')) + 'Pages': map( + lambda x: {x[0].month: x[1]}, + qss.time_series(start=this_year, end=today, interval='months') + ) } } +def new_documents_this_month(): + Document = apps.get_model(app_label='documents', model_name='Document') + + qss = qsstats.QuerySetStats(Document.objects.all(), 'date_added') + return qss.this_month() or '0' + + +def new_document_versions_per_month(): + DocumentVersion = apps.get_model( + app_label='documents', model_name='DocumentVersion' + ) + + qss = qsstats.QuerySetStats( + DocumentVersion.objects.all(), 'document__date_added' + ) + + today = datetime.date.today() + this_year = datetime.date(year=today.year, month=1, day=1) + + return { + 'series': { + 'Versions': map( + lambda x: {x[0].month: x[1]}, + qss.time_series(start=this_year, end=today, interval='months') + ) + } + } + + +def new_document_pages_this_month(): + DocumentPage = apps.get_model( + app_label='documents', model_name='DocumentPage' + ) + + qss = qsstats.QuerySetStats( + DocumentPage.objects.all(), 'document_version__document__date_added' + ) + return qss.this_month() or '0' + + def total_document_per_month(): - from .models import Document + Document = apps.get_model(app_label='documents', model_name='Document') qss = qsstats.QuerySetStats(Document.objects.all(), 'date_added') this_year = datetime.date.today().year @@ -78,9 +115,13 @@ def total_document_per_month(): def total_document_version_per_month(): - from .models import DocumentVersion + DocumentVersion = apps.get_model( + app_label='documents', model_name='DocumentVersion' + ) - qss = qsstats.QuerySetStats(DocumentVersion.objects.all(), 'document__date_added') + qss = qsstats.QuerySetStats( + DocumentVersion.objects.all(), 'document__date_added' + ) this_year = datetime.date.today().year result = [] @@ -105,9 +146,13 @@ def total_document_version_per_month(): def total_document_page_per_month(): - from .models import DocumentPage + DocumentPage = apps.get_model( + app_label='documents', model_name='DocumentPage' + ) - qss = qsstats.QuerySetStats(DocumentPage.objects.all(), 'document_version__document__date_added') + qss = qsstats.QuerySetStats( + DocumentPage.objects.all(), 'document_version__document__date_added' + ) this_year = datetime.date.today().year result = [] From aa91bce3aba4cc663ae93d36309309c6ec15b88a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 11 Nov 2016 04:06:43 -0400 Subject: [PATCH 049/119] Add support for drop down menu in the navigation bar. Simplify the home screen. --- .../appearance/dashboard_widget.html | 2 +- .../appearance/templates/appearance/home.html | 64 +++++++------------ .../navigation/generic_subnavigation.html | 26 ++++++++ mayan/apps/checkouts/apps.py | 2 +- mayan/apps/common/apps.py | 1 - mayan/apps/common/menus.py | 6 +- mayan/apps/common/templatetags/common_tags.py | 5 ++ mayan/apps/document_indexing/apps.py | 2 +- mayan/apps/documents/apps.py | 8 ++- mayan/apps/documents/links.py | 2 +- mayan/apps/documents/menus.py | 9 +++ mayan/apps/documents/widgets.py | 1 - mayan/apps/folders/apps.py | 18 ++++-- mayan/apps/folders/links.py | 6 +- mayan/apps/folders/menus.py | 9 +++ mayan/apps/navigation/classes.py | 27 +++++--- mayan/apps/sources/apps.py | 7 +- mayan/apps/tags/apps.py | 19 ++++-- mayan/apps/tags/links.py | 6 +- mayan/apps/tags/menus.py | 9 +++ 20 files changed, 144 insertions(+), 85 deletions(-) create mode 100644 mayan/apps/documents/menus.py create mode 100644 mayan/apps/folders/menus.py create mode 100644 mayan/apps/tags/menus.py diff --git a/mayan/apps/appearance/templates/appearance/dashboard_widget.html b/mayan/apps/appearance/templates/appearance/dashboard_widget.html index 8e7c1b853c..2010a06197 100644 --- a/mayan/apps/appearance/templates/appearance/dashboard_widget.html +++ b/mayan/apps/appearance/templates/appearance/dashboard_widget.html @@ -22,7 +22,7 @@ {% if widget.link %} diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html index 2c6fe6437c..f51286aa98 100644 --- a/mayan/apps/appearance/templates/appearance/home.html +++ b/mayan/apps/appearance/templates/appearance/home.html @@ -6,11 +6,11 @@ {% load common_tags %} {% load navigation_tags %} -{% block title %}{% trans 'Home' %}{% endblock %} +{% block title %}{% trans 'Dashboard' %}{% endblock %} {% block content %}

- {% trans 'Home' %} + {% trans 'Dashboard' %}


@@ -35,47 +35,31 @@
{% endif %} - -
-
- {% get_menu_links 'front page menu' as resolved_links %} - {% with 'navigation/large_button_link.html' as link_template %} - {% with 'col-xs-12 col-sm-6 col-md-4 col-lg-3' as div_class %} - {% for object_navigation_links in resolved_links %} - {% include 'navigation/generic_navigation.html' %} - {% endfor %} - {% endwith %} - {% endwith %} -
-
-
-
-
-
{% trans 'Search' %}
-
+
+
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
diff --git a/mayan/apps/appearance/templates/navigation/generic_subnavigation.html b/mayan/apps/appearance/templates/navigation/generic_subnavigation.html index acf06cf0fd..de6b2329aa 100644 --- a/mayan/apps/appearance/templates/navigation/generic_subnavigation.html +++ b/mayan/apps/appearance/templates/navigation/generic_subnavigation.html @@ -1,5 +1,29 @@ +{% load common_tags %} {% load navigation_tags %} +{% if link|get_type == "" %} + +{% else %} + {% if as_li %}
  • {% endif %} @@ -9,3 +33,5 @@ {% if as_li %}
  • {% endif %} + +{% endif %} diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index e1f27f0eba..733e3bacf5 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -100,7 +100,7 @@ class CheckoutsApp(MayanAppConfig): ) menu_facet.bind_links(links=(link_checkout_info,), sources=(Document,)) - menu_main.bind_links(links=(link_checkout_list,)) + menu_main.bind_links(links=(link_checkout_list,), position=98) menu_sidebar.bind_links( links=(link_checkout_document, link_checkin_document), sources=( diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index ecbd535d24..9924ee5f2f 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -22,7 +22,6 @@ from .handlers import ( ) from .links import ( link_about, link_current_user_details, link_current_user_edit, - link_current_user_locale_profile_details, link_current_user_locale_profile_edit, link_filters, link_license, link_packages_licenses, link_setup, link_tools ) diff --git a/mayan/apps/common/menus.py b/mayan/apps/common/menus.py index 382fd7f4d2..3ebeb82b95 100644 --- a/mayan/apps/common/menus.py +++ b/mayan/apps/common/menus.py @@ -3,13 +3,11 @@ from __future__ import unicode_literals from navigation import Menu __all__ = ( - 'menu_facet', 'menu_front_page', 'menu_object', 'menu_main', - 'menu_multi_item', 'menu_secondary', 'menu_setup', 'menu_sidebar', - 'menu_tools', 'menu_user' + 'menu_facet', 'menu_object', 'menu_main', 'menu_multi_item', + 'menu_secondary', 'menu_setup', 'menu_sidebar', 'menu_tools', 'menu_user' ) menu_facet = Menu(name='object facet') -menu_front_page = Menu(name='front page menu') menu_object = Menu(name='object menu') menu_main = Menu(name='main menu') menu_multi_item = Menu(name='multi item menu') diff --git a/mayan/apps/common/templatetags/common_tags.py b/mayan/apps/common/templatetags/common_tags.py index a09b29649b..ba749b036e 100644 --- a/mayan/apps/common/templatetags/common_tags.py +++ b/mayan/apps/common/templatetags/common_tags.py @@ -82,3 +82,8 @@ def build(): return '' else: return '' + + +@register.filter +def get_type(value): + return unicode(type(value)) diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 6633c11ee0..6fc92f823c 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -213,7 +213,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. link_template_node_delete ), sources=(IndexTemplateNode,) ) - menu_main.bind_links(links=(link_index_main_menu,)) + menu_main.bind_links(links=(link_index_main_menu,), position=98) menu_secondary.bind_links( links=(link_index_setup_list, link_index_setup_create), sources=( diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 188a8395b5..c32668a2c7 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -11,7 +11,7 @@ from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view from common import ( - MayanAppConfig, MissingItem, menu_facet, menu_front_page, menu_object, + MayanAppConfig, MissingItem, menu_facet, menu_main, menu_object, menu_secondary, menu_setup, menu_sidebar, menu_multi_item, menu_tools ) from common.classes import DashboardWidget, ModelAttribute @@ -59,6 +59,7 @@ from .literals import ( CHECK_DELETE_PERIOD_INTERVAL, CHECK_TRASH_PERIOD_INTERVAL, DELETE_STALE_STUBS_INTERVAL ) +from .menus import menu_documents from .permissions import ( permission_document_create, permission_document_delete, permission_document_download, permission_document_edit, @@ -343,12 +344,15 @@ class DocumentsApp(MayanAppConfig): } ) - menu_front_page.bind_links( + menu_documents.bind_links( links=( link_document_list_recent, link_document_list, link_document_list_deleted ) ) + + menu_main.bind_links(links=(menu_documents,), position=0) + menu_setup.bind_links(links=(link_document_type_setup,)) menu_tools.bind_links(links=(link_clear_image_cache,)) diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py index 8b1b70f7a8..308d7d99d3 100644 --- a/mayan/apps/documents/links.py +++ b/mayan/apps/documents/links.py @@ -141,7 +141,7 @@ link_document_list_recent = Link( view='documents:document_list_recent' ) link_document_list_deleted = Link( - icon='fa fa-trash', text=_('Trash'), + icon='fa fa-trash', text=_('Trash can'), view='documents:document_list_deleted' ) diff --git a/mayan/apps/documents/menus.py b/mayan/apps/documents/menus.py new file mode 100644 index 0000000000..98fcfcfff5 --- /dev/null +++ b/mayan/apps/documents/menus.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from navigation import Menu + +menu_documents = Menu( + icon='fa fa-file', label=_('Documents'), name='documents menu' +) diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index 37d3cdfde0..49fccc9564 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals from django import forms -from django.contrib.staticfiles.templatetags.staticfiles import static from django.core.urlresolvers import reverse from django.utils.html import strip_tags from django.utils.http import urlencode diff --git a/mayan/apps/folders/apps.py b/mayan/apps/folders/apps.py index 5e6af46e05..b81df5a013 100644 --- a/mayan/apps/folders/apps.py +++ b/mayan/apps/folders/apps.py @@ -7,8 +7,8 @@ from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view from common import ( - MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary, - menu_sidebar, menu_multi_item + MayanAppConfig, menu_facet, menu_main, menu_object, menu_sidebar, + menu_multi_item ) from navigation import SourceColumn from rest_api.classes import APIEndPoint @@ -20,6 +20,7 @@ from .links import ( link_folder_delete, link_folder_document_multiple_remove, link_folder_edit, link_folder_view ) +from .menus import menu_folders from .permissions import ( permission_folder_add_document, permission_folder_delete, permission_folder_edit, permission_folder_remove_document, @@ -77,7 +78,14 @@ class FoldersApp(MayanAppConfig): menu_facet.bind_links( links=(link_document_folder_list,), sources=(Document,) ) - menu_main.bind_links(links=(link_folder_list,)) + + menu_folders.bind_links( + links=( + link_folder_list, link_folder_create + ) + ) + + menu_main.bind_links(links=(menu_folders,), position=98) menu_multi_item.bind_links( links=(link_folder_add_multiple_documents,), sources=(Document,) ) @@ -96,10 +104,6 @@ class FoldersApp(MayanAppConfig): link_folder_delete ), sources=(Folder,) ) - menu_secondary.bind_links( - links=(link_folder_list, link_folder_create), - sources=(Folder, 'folders:folder_list', 'folders:folder_create') - ) menu_sidebar.bind_links( links=(link_folder_add_document,), sources=( diff --git a/mayan/apps/folders/links.py b/mayan/apps/folders/links.py index ce0163cde9..3c3bcfdeb7 100644 --- a/mayan/apps/folders/links.py +++ b/mayan/apps/folders/links.py @@ -24,8 +24,8 @@ link_folder_add_multiple_documents = Link( text=_('Add to folder'), view='folders:folder_add_multiple_documents' ) link_folder_create = Link( - permissions=(permission_folder_create,), text=_('Create folder'), - view='folders:folder_create' + icon='fa fa-plus', permissions=(permission_folder_create,), + text=_('Create folder'), view='folders:folder_create' ) link_folder_delete = Link( permissions=(permission_folder_delete,), tags='dangerous', @@ -41,7 +41,7 @@ link_folder_edit = Link( view='folders:folder_edit', args='object.pk' ) link_folder_list = Link( - icon='fa fa-folder', text=_('Folders'), view='folders:folder_list' + icon='fa fa-folder', text=_('All'), view='folders:folder_list' ) link_folder_view = Link( permissions=(permission_folder_view,), text=_('Documents'), diff --git a/mayan/apps/folders/menus.py b/mayan/apps/folders/menus.py new file mode 100644 index 0000000000..fbe25580b6 --- /dev/null +++ b/mayan/apps/folders/menus.py @@ -0,0 +1,9 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from navigation import Menu + +menu_folders = Menu( + icon='fa fa-folder', label=_('Folders'), name='folders menu' +) diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 0104ed15c8..f6ef5bad04 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -55,11 +55,13 @@ class Menu(object): def get(cls, name): return cls._registry[name] - def __init__(self, name): + def __init__(self, name, icon=None, label=None): if name in self.__class__._registry: raise Exception('A menu with this name already exists') + self.icon = icon self.name = name + self.label = label self.bound_links = {} self.unbound_links = {} self.link_positions = {} @@ -184,7 +186,11 @@ class Menu(object): # Main menu links for link in self.bound_links.get(None, []): - resolved_link = link.resolve(context) + if isinstance(link, Menu): + resolved_link = link + else: + resolved_link = link.resolve(context) + if resolved_link: resolved_links.append(resolved_link) @@ -197,12 +203,16 @@ class Menu(object): unbound_links.extend(self.unbound_links.get(current_view, ())) for resolved_link in result[0]: - if resolved_link.link in unbound_links: - result[0].remove(resolved_link) + try: + if resolved_link.link in unbound_links: + result[0].remove(resolved_link) + except AttributeError: + # It's a menu, ignore + pass # Sort links by position value passed during bind result[0] = sorted( - result[0], key=lambda item: self.link_positions.get(item.link) + result[0], key=lambda item: self.link_positions.get(item.link) if isinstance(item, ResolvedLink) else self.link_positions.get(item) ) return result @@ -363,15 +373,12 @@ class Link(object): class Separator(Link): - def __init__(self, text=None, view=None, args=None, condition=None, - conditional_disable=None, description=None, icon=None, - keep_query=False, kwargs=None, permissions=None, - permissions_related=None, remove_from_query=None, tags=None): + def __init__(self, *args, **kwargs): self.icon = None self.text = None self.view = None - def resolve(self, context, resolved_object=None): + def resolve(self, *args, **kwargs): result = ResolvedLink(current_view=None, link=self) result.separator = True return result diff --git a/mayan/apps/sources/apps.py b/mayan/apps/sources/apps.py index 076e4206b5..7b99b54a53 100644 --- a/mayan/apps/sources/apps.py +++ b/mayan/apps/sources/apps.py @@ -5,11 +5,12 @@ from django.utils.translation import ugettext_lazy as _ from kombu import Exchange, Queue from common import ( - MayanAppConfig, MissingItem, menu_front_page, menu_object, menu_secondary, - menu_sidebar, menu_setup + MayanAppConfig, MissingItem, menu_object, menu_secondary, menu_sidebar, + menu_setup ) from common.signals import post_initial_setup, post_upgrade from converter.links import link_transformation_list +from documents.menus import menu_documents from documents.signals import post_version_upload from mayan.celery import app from navigation import SourceColumn @@ -112,8 +113,8 @@ class SourcesApp(MayanAppConfig): }, } ) + menu_documents.bind_links(links=(link_document_create_multiple,)) - menu_front_page.bind_links(links=(link_document_create_multiple,)) menu_object.bind_links( links=( link_setup_source_edit, link_setup_source_delete, diff --git a/mayan/apps/tags/apps.py b/mayan/apps/tags/apps.py index d7a1b5d1eb..05a2c7fcc4 100644 --- a/mayan/apps/tags/apps.py +++ b/mayan/apps/tags/apps.py @@ -7,8 +7,8 @@ from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view from common import ( - MayanAppConfig, menu_facet, menu_secondary, menu_object, menu_main, - menu_multi_item, menu_sidebar + MayanAppConfig, menu_facet, menu_object, menu_main, menu_multi_item, + menu_sidebar ) from documents.search import document_page_search, document_search from navigation import SourceColumn @@ -20,6 +20,7 @@ from .links import ( link_tag_delete, link_tag_document_list, link_tag_edit, link_tag_list, link_tag_multiple_delete, link_tag_tagged_item_list ) +from .menus import menu_tags from .permissions import ( permission_tag_attach, permission_tag_delete, permission_tag_edit, permission_tag_remove, permission_tag_view @@ -107,7 +108,15 @@ class TagsApp(MayanAppConfig): menu_facet.bind_links( links=(link_tag_document_list,), sources=(Document,) ) - menu_main.bind_links(links=(link_tag_list,)) + + menu_tags.bind_links( + links=( + link_tag_list, link_tag_create + ) + ) + + menu_main.bind_links(links=(menu_tags,), position=98) + menu_multi_item.bind_links( links=( link_multiple_documents_attach_tag, @@ -129,10 +138,6 @@ class TagsApp(MayanAppConfig): ), sources=(Tag,) ) - menu_secondary.bind_links( - links=(link_tag_list, link_tag_create), - sources=(Tag, 'tags:tag_list', 'tags:tag_create') - ) menu_sidebar.bind_links( links=(link_tag_attach,), sources=( diff --git a/mayan/apps/tags/links.py b/mayan/apps/tags/links.py index 7acd009875..fd4995aaf9 100644 --- a/mayan/apps/tags/links.py +++ b/mayan/apps/tags/links.py @@ -25,8 +25,8 @@ link_tag_attach = Link( view='tags:tag_attach', args='object.pk' ) link_tag_create = Link( - permissions=(permission_tag_create,), text=_('Create new tag'), - view='tags:tag_create' + icon='fa fa-plus', permissions=(permission_tag_create,), + text=_('Create new tag'), view='tags:tag_create' ) link_tag_delete = Link( permissions=(permission_tag_delete,), tags='dangerous', text=_('Delete'), @@ -40,7 +40,7 @@ link_tag_document_list = Link( icon='fa fa-tag', permissions=(permission_tag_view,), text=_('Tags'), view='tags:document_tags', args='resolved_object.pk' ) -link_tag_list = Link(icon='fa fa-tag', text=_('Tags'), view='tags:tag_list') +link_tag_list = Link(icon='fa fa-tag', text=_('All'), view='tags:tag_list') link_tag_multiple_delete = Link( permissions=(permission_tag_delete,), text=_('Delete'), view='tags:tag_multiple_delete' diff --git a/mayan/apps/tags/menus.py b/mayan/apps/tags/menus.py new file mode 100644 index 0000000000..9ab3149490 --- /dev/null +++ b/mayan/apps/tags/menus.py @@ -0,0 +1,9 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from navigation import Menu + +menu_tags = Menu( + icon='fa fa-tag', label=_('Tags'), name='tags menu' +) From 99302e930001fcade2b9f82dbe9590f0c36edf92 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 12 Nov 2016 02:28:06 -0400 Subject: [PATCH 050/119] Move package licenses to their own modules within the apps. --- docs/releases/2.2.rst | 5 +- mayan/apps/appearance/apps.py | 144 +--- mayan/apps/appearance/packages.py | 144 ++++ mayan/apps/common/apps.py | 912 +--------------------- mayan/apps/common/packages.py | 913 +++++++++++++++++++++++ mayan/apps/converter/apps.py | 15 +- mayan/apps/converter/packages.py | 16 + mayan/apps/django_gpg/apps.py | 30 +- mayan/apps/django_gpg/packages.py | 31 + mayan/apps/document_indexing/apps.py | 42 +- mayan/apps/document_indexing/packages.py | 43 ++ mayan/apps/events/apps.py | 33 +- mayan/apps/events/packages.py | 34 + mayan/apps/mimetype/apps.py | 27 +- mayan/apps/mimetype/packages.py | 27 + mayan/apps/rest_api/apps.py | 37 +- mayan/apps/rest_api/packages.py | 38 + mayan/apps/statistics/apps.py | 12 +- mayan/apps/statistics/packages.py | 13 + 19 files changed, 1274 insertions(+), 1242 deletions(-) create mode 100644 mayan/apps/appearance/packages.py create mode 100644 mayan/apps/common/packages.py create mode 100644 mayan/apps/converter/packages.py create mode 100644 mayan/apps/django_gpg/packages.py create mode 100644 mayan/apps/document_indexing/packages.py create mode 100644 mayan/apps/events/packages.py create mode 100644 mayan/apps/mimetype/packages.py create mode 100644 mayan/apps/rest_api/packages.py create mode 100644 mayan/apps/statistics/packages.py diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index 3f1b5f291e..75aa8ffce8 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -17,7 +17,10 @@ Other changes - Fix height calculation in resize transformation - Improve upgrade instructions - New image caching pipeline -- New drop down user menu +- New drop down menus for the documents, folders and tags app as well as for +the user links +- Dashboard +- Moved licenses to their own module in every app Removals -------- diff --git a/mayan/apps/appearance/apps.py b/mayan/apps/appearance/apps.py index 8a6c0608a7..511ea15fed 100644 --- a/mayan/apps/appearance/apps.py +++ b/mayan/apps/appearance/apps.py @@ -3,7 +3,8 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig -from common.classes import Package + +from .packages import * # NOQA class AppearanceApp(MayanAppConfig): @@ -12,144 +13,3 @@ class AppearanceApp(MayanAppConfig): def ready(self): super(AppearanceApp, self).ready() - - Package(label='Bootstrap', license_text=''' -The MIT License (MIT) - -Copyright (c) 2011-2015 Twitter, Inc - -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. - ''') - - Package(label='Animate.css', license_text=''' -Animate.css is licensed under the MIT license. (http://opensource.org/licenses/MIT) - ''') - - Package(label='Bootswatch', license_text=''' -The MIT License (MIT) - -Copyright (c) 2013 Thomas Park - -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. - ''') - - Package(label='fancyBox', license_text=''' -fancyBox licensed under Creative Commons Attribution-NonCommercial 3.0 license. - ''') - - Package(label='jquery_lazyload', license_text=''' -All code licensed under the MIT License. All images licensed under Creative Commons Attribution 3.0 Unported License. In other words you are basically free to do whatever you want. Just don't remove my name from the source. - ''') - - Package(label='ScrollView', license_text=''' -Copyright (c) 2009 Toshimitsu Takahashi -Released under the MIT license. - ''') - - Package(label='Font Awesome', license_text=''' -Font License - - Applies to all desktop and webfont files in the following directory: font-awesome/fonts/. - License: SIL OFL 1.1 - URL: http://scripts.sil.org/OFL - -Code License - - Applies to all CSS and LESS files in the following directories: font-awesome/css/, font-awesome/less/, and font-awesome/scss/. - License: MIT License - URL: http://opensource.org/licenses/mit-license.html - - ''') - - Package(label='jQuery', license_text=''' -Copyright jQuery Foundation and other contributors, https://jquery.org/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery - -The following license applies to all parts of this software except as -documented below: - -==== - -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. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - ''') - - Package(label='django-widget-tweaks', license_text=''' -Copyright (c) 2011-2015 Mikhail Korobov - -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. - ''') diff --git a/mayan/apps/appearance/packages.py b/mayan/apps/appearance/packages.py new file mode 100644 index 0000000000..abb148ea7f --- /dev/null +++ b/mayan/apps/appearance/packages.py @@ -0,0 +1,144 @@ +from __future__ import unicode_literals + +from common.classes import Package + +Package(label='Bootstrap', license_text=''' +The MIT License (MIT) + +Copyright (c) 2011-2015 Twitter, Inc + +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. +''') + +Package(label='Animate.css', license_text=''' +Animate.css is licensed under the MIT license. (http://opensource.org/licenses/MIT) +''') + +Package(label='Bootswatch', license_text=''' +The MIT License (MIT) + +Copyright (c) 2013 Thomas Park + +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. +''') + +Package(label='fancyBox', license_text=''' +fancyBox licensed under Creative Commons Attribution-NonCommercial 3.0 license. +''') + +Package(label='jquery_lazyload', license_text=''' +All code licensed under the MIT License. All images licensed under Creative Commons Attribution 3.0 Unported License. In other words you are basically free to do whatever you want. Just don't remove my name from the source. +''') + +Package(label='ScrollView', license_text=''' +Copyright (c) 2009 Toshimitsu Takahashi +Released under the MIT license. +''') + +Package(label='Font Awesome', license_text=''' +Font License + +Applies to all desktop and webfont files in the following directory: font-awesome/fonts/. +License: SIL OFL 1.1 +URL: http://scripts.sil.org/OFL + +Code License + +Applies to all CSS and LESS files in the following directories: font-awesome/css/, font-awesome/less/, and font-awesome/scss/. +License: MIT License +URL: http://opensource.org/licenses/mit-license.html + +''') + +Package(label='jQuery', license_text=''' +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery + +The following license applies to all parts of this software except as +documented below: + +==== + +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. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. +''') + +Package(label='django-widget-tweaks', license_text=''' +Copyright (c) 2011-2015 Mikhail Korobov + +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. +''') diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index 9924ee5f2f..e283db6827 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - from __future__ import absolute_import, unicode_literals from datetime import timedelta @@ -16,7 +14,6 @@ from django.utils.translation import ugettext_lazy as _ from mayan.celery import app -from .classes import Package from .handlers import ( user_locale_profile_session_config, user_locale_profile_create ) @@ -27,6 +24,7 @@ from .links import ( ) from .literals import DELETE_STALE_UPLOADS_INTERVAL from .menus import menu_facet, menu_main, menu_tools, menu_user +from .packages import * # NOQA from .settings import setting_auto_logging from .tasks import task_delete_stale_uploads # NOQA - Force task registration @@ -73,914 +71,6 @@ class CommonApp(MayanAppConfig): def ready(self): super(CommonApp, self).ready() - Package(label='Django', license_text=''' -Copyright (c) Django Software Foundation and individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of Django nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='PyYAML', license_text=''' -Copyright (c) 2006 Kirill Simonov - -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. - ''') - - Package(label='Celery', license_text=''' -Copyright (c) 2015 Ask Solem & contributors. All rights reserved. -Copyright (c) 2012-2014 GoPivotal, Inc. All rights reserved. -Copyright (c) 2009, 2010, 2011, 2012 Ask Solem, and individual contributors. All rights reserved. - -Celery is licensed under The BSD License (3 Clause, also known as -the new BSD license). The license is an OSI approved Open Source -license and is GPL-compatible(1). - -The license text can also be found here: -http://www.opensource.org/licenses/BSD-3-Clause - -License -======= - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Ask Solem, nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Ask Solem OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -Documentation License -===================== - -The documentation portion of Celery (the rendered contents of the -"docs" directory of a software distribution or checkout) is supplied -under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 -United States License as described by -http://creativecommons.org/licenses/by-nc-sa/3.0/us/ - -Footnotes -========= -(1) A GPL-compatible license makes it possible to - combine Celery with other software that is released - under the GPL, it does not mean that we're distributing - Celery under the GPL license. The BSD license, unlike the GPL, - let you distribute a modified version without making your - changes open source. - ''') - - Package(label='cssmin', license_text=''' -`cssmin.py` - A Python port of the YUI CSS compressor. - -Copyright (c) 2010 Zachary Voase - -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. - -------------------------------------------------------------------------------- - -This software contains portions of the YUI CSS Compressor, notably some regular -expressions for reducing the size of CSS. The YUI Compressor source code can be -found at , and is licensed as follows: - -> YUI Compressor Copyright License Agreement (BSD License) -> -> Copyright (c) 2009, Yahoo! Inc. -> All rights reserved. -> -> Redistribution and use of this software in source and binary forms, -> with or without modification, are permitted provided that the following -> conditions are met: -> -> * Redistributions of source code must retain the above -> copyright notice, this list of conditions and the -> following disclaimer. -> -> * Redistributions in binary form must reproduce the above -> copyright notice, this list of conditions and the -> following disclaimer in the documentation and/or other -> materials provided with the distribution. -> -> * Neither the name of Yahoo! Inc. nor the names of its -> contributors may be used to endorse or promote products -> derived from this software without specific prior -> written permission of Yahoo! Inc. -> -> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='django-autoadmin', license_text=''' -The MIT License (MIT) - -Copyright (c) 2014 Roberto Rosario - -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. - ''') - - Package(label='django-celery', license_text=''' -Copyright (c) 2012-2013 GoPivotal, Inc. All Rights Reserved. -Copyright (c) 2009-2012 Ask Solem. All Rights Reserved. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -Neither the name of Ask Solem nor the names of its contributors may be used -to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='django-colorful', license_text=''' -copyright (c) 2010 SIMON CHARETTE - -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. - ''') - - Package(label='django-compressor', license_text=''' -django_compressor ------------------ -Copyright (c) 2009-2014 Django Compressor authors (see AUTHORS file) - -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. - - -django_compressor contains code from Andreas Pelme's django-compress --------------------------------------------------------------------- -Copyright (c) 2008 Andreas Pelme - -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. - - -rjsmin.py (License-information from the file) ---------------------------------------------- -Copyright 2006, 2007, 2008, 2009, 2010, 2011 -André Malo or his licensors, as applicable - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -utils.cache.cached_property extracted from Celery -------------------------------------------- -Copyright (c) 2009-2011, Ask Solem and contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -Neither the name of Ask Solem nor the names of its contributors may be used -to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -utils.FormattableString ------------------------ -Copyright (c) 2010 by Florent Xicluna. - -Some rights reserved. - -Redistribution and use in source and binary forms of the software as well -as documentation, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - ''') - - Package(label='django-cors-headers', license_text=''' -Copyright 2013 Otto Yiu and other contributors -http://ottoyiu.com - -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. - ''') - - Package(label='django-pure-pagination', license_text=''' -Copyright (c) James Pacileo and contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of Django nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='django-model-util', license_text=''' -Copyright (c) 2009-2015, Carl Meyer and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of the author nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='django-qsstats-magic', license_text=''' -Copyright (c) 2010, Matt Croydon, Mikhail Korobov -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the tastypie nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MATT CROYDON BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='Django Suit', license_text=''' -Django Suit ------------ - -Django Suit by is licensed under a -Creative Commons Attribution-NonCommercial 3.0 Unported License - -See online version of this license here: -http://creativecommons.org/licenses/by-nc/3.0/ - -License -------- - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE -COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY -COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS -AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE -BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE -CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE -IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - a. "Adaptation" means a work based upon the Work, or upon the Work and other - pre-existing works, such as a translation, adaptation, derivative work, - arrangement of music or other alterations of a literary or artistic work, or - phonogram or performance and includes cinematographic adaptations or any - other form in which the Work may be recast, transformed, or adapted - including in any form recognizably derived from the original, except that a - work that constitutes a Collection will not be considered an Adaptation for - the purpose of this License. For the avoidance of doubt, where the Work is a - musical work, performance or phonogram, the synchronization of the Work in - timed-relation with a moving image ("synching") will be considered an - Adaptation for the purpose of this License. - - b. "Collection" means a collection of literary or artistic works, such as - encyclopedias and anthologies, or performances, phonograms or broadcasts, or - other works or subject matter other than works listed in Section 1(f) below, - which, by reason of the selection and arrangement of their contents, - constitute intellectual creations, in which the Work is included in its - entirety in unmodified form along with one or more other contributions, each - constituting separate and independent works in themselves, which together - are assembled into a collective whole. A work that constitutes a Collection - will not be considered an Adaptation (as defined above) for the purposes of - this License. - - c. "Distribute" means to make available to the public the original and - copies of the Work or Adaptation, as appropriate, through sale or other - transfer of ownership. - - d. "Licensor" means the individual, individuals, entity or entities that - offer(s) the Work under the terms of this License. - - e. "Original Author" means, in the case of a literary or artistic work, the - individual, individuals, entity or entities who created the Work or if no - individual or entity can be identified, the publisher; and in addition (i) - in the case of a performance the actors, singers, musicians, dancers, and - other persons who act, sing, deliver, declaim, play in, interpret or - otherwise perform literary or artistic works or expressions of folklore; - (ii) in the case of a phonogram the producer being the person or legal - entity who first fixes the sounds of a performance or other sounds; and, - (iii) in the case of broadcasts, the organization that transmits the - broadcast. - - f. "Work" means the literary and/or artistic work offered under the terms of - this License including without limitation any production in the literary, - scientific and artistic domain, whatever may be the mode or form of its - expression including digital form, such as a book, pamphlet and other - writing; a lecture, address, sermon or other work of the same nature; a - dramatic or dramatico-musical work; a choreographic work or entertainment in - dumb show; a musical composition with or without words; a cinematographic - work to which are assimilated works expressed by a process analogous to - cinematography; a work of drawing, painting, architecture, sculpture, - engraving or lithography; a photographic work to which are assimilated works - expressed by a process analogous to photography; a work of applied art; an - illustration, map, plan, sketch or three-dimensional work relative to - geography, topography, architecture or science; a performance; a broadcast; - a phonogram; a compilation of data to the extent it is protected as a - copyrightable work; or a work performed by a variety or circus performer to - the extent it is not otherwise considered a literary or artistic work. - - g. "You" means an individual or entity exercising rights under this License - who has not previously violated the terms of this License with respect to - the Work, or who has received express permission from the Licensor to - exercise rights under this License despite a previous violation. - - h. "Publicly Perform" means to perform public recitations of the Work and to - communicate to the public those public recitations, by any means or process, - including by wire or wireless means or public digital performances; to make - available to the public Works in such a way that members of the public may - access these Works from a place and at a place individually chosen by them; - to perform the Work to the public by any means or process and the - communication to the public of the performances of the Work, including by - public digital performance; to broadcast and rebroadcast the Work by any - means including signs, sounds or images. - - i. "Reproduce" means to make copies of the Work by any means including - without limitation by sound or visual recordings and the right of fixation - and reproducing fixations of the Work, including storage of a protected - performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, -or restrict any uses free from copyright or rights arising from limitations or -exceptions that are provided for in connection with the copyright protection -under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, -Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual -(for the duration of the applicable copyright) license to exercise the rights -in the Work as stated below: - - a. to Reproduce the Work, to incorporate the Work into one or more - Collections, and to Reproduce the Work as incorporated in the Collections; - - b. to create and Reproduce Adaptations provided that any such Adaptation, - including any translation in any medium, takes reasonable steps to clearly - label, demarcate or otherwise identify that changes were made to the - original Work. For example, a translation could be marked "The original work - was translated from English to Spanish," or a modification could indicate - "The original work has been modified."; - - c. to Distribute and Publicly Perform the Work including as incorporated in - Collections; and, - - d. to Distribute and Publicly Perform Adaptations. - -The above rights may be exercised in all media and formats whether now known -or hereafter devised. The above rights include the right to make such -modifications as are technically necessary to exercise the rights in other -media and formats. Subject to Section 8(f), all rights not expressly granted -by Licensor are hereby reserved, including but not limited to the rights set -forth in Section 4(d). - -4. Restrictions. The license granted in Section 3 above is expressly made -subject to and limited by the following restrictions: - - a. You may Distribute or Publicly Perform the Work only under the terms of - this License. You must include a copy of, or the Uniform Resource Identifier - (URI) for, this License with every copy of the Work You Distribute or - Publicly Perform. You may not offer or impose any terms on the Work that - restrict the terms of this License or the ability of the recipient of the - Work to exercise the rights granted to that recipient under the terms of the - License. You may not sublicense the Work. You must keep intact all notices - that refer to this License and to the disclaimer of warranties with every - copy of the Work You Distribute or Publicly Perform. When You Distribute or - Publicly Perform the Work, You may not impose any effective technological - measures on the Work that restrict the ability of a recipient of the Work - from You to exercise the rights granted to that recipient under the terms of - the License. This Section 4(a) applies to the Work as incorporated in a - Collection, but this does not require the Collection apart from the Work - itself to be made subject to the terms of this License. If You create a - Collection, upon notice from any Licensor You must, to the extent - practicable, remove from the Collection any credit as required by Section - 4(c), as requested. If You create an Adaptation, upon notice from any - Licensor You must, to the extent practicable, remove from the Adaptation any - credit as required by Section 4(c), as requested. - - b. You may not exercise any of the rights granted to You in Section 3 above - in any manner that is primarily intended for or directed toward commercial - advantage or private monetary compensation. The exchange of the Work for - other copyrighted works by means of digital file-sharing or otherwise shall - not be considered to be intended for or directed toward commercial advantage - or private monetary compensation, provided there is no payment of any - monetary compensation in connection with the exchange of copyrighted works. - - c. If You Distribute, or Publicly Perform the Work or any Adaptations or - Collections, You must, unless a request has been made pursuant to Section - 4(a), keep intact all copyright notices for the Work and provide, reasonable - to the medium or means You are utilizing: (i) the name of the Original - Author (or pseudonym, if applicable) if supplied, and/or if the Original - Author and/or Licensor designate another party or parties (e.g., a sponsor - institute, publishing entity, journal) for attribution ("Attribution - Parties") in Licensor's copyright notice, terms of service or by other - reasonable means, the name of such party or parties; (ii) the title of the - Work if supplied; (iii) to the extent reasonably practicable, the URI, if - any, that Licensor specifies to be associated with the Work, unless such URI - does not refer to the copyright notice or licensing information for the - Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, - a credit identifying the use of the Work in the Adaptation (e.g., "French - translation of the Work by Original Author," or "Screenplay based on - original Work by Original Author"). The credit required by this Section 4(c) - may be implemented in any reasonable manner; provided, however, that in the - case of a Adaptation or Collection, at a minimum such credit will appear, if - a credit for all contributing authors of the Adaptation or Collection - appears, then as part of these credits and in a manner at least as prominent - as the credits for the other contributing authors. For the avoidance of - doubt, You may only use the credit required by this Section for the purpose - of attribution in the manner set out above and, by exercising Your rights - under this License, You may not implicitly or explicitly assert or imply any - connection with, sponsorship or endorsement by the Original Author, Licensor - and/or Attribution Parties, as appropriate, of You or Your use of the Work, - without the separate, express prior written permission of the Original - Author, Licensor and/or Attribution Parties. - - d. For the avoidance of doubt: - - i. Non-waivable Compulsory License Schemes. In those jurisdictions in - which the right to collect royalties through any statutory or compulsory - licensing scheme cannot be waived, the Licensor reserves the exclusive - right to collect such royalties for any exercise by You of the rights - granted under this License; - - ii. Waivable Compulsory License Schemes. In those jurisdictions in which - the right to collect royalties through any statutory or compulsory - licensing scheme can be waived, the Licensor reserves the exclusive right - to collect such royalties for any exercise by You of the rights granted - under this License if Your exercise of such rights is for a purpose or use - which is otherwise than noncommercial as permitted under Section 4(b) and - otherwise waives the right to collect royalties through any statutory or - compulsory licensing scheme; and, - - iii. Voluntary License Schemes. The Licensor reserves the right to collect - royalties, whether individually or, in the event that the Licensor is a - member of a collecting society that administers voluntary licensing - schemes, via that society, from any exercise by You of the rights granted - under this License that is for a purpose or use which is otherwise than - noncommercial as permitted under Section 4(c). - - e. Except as otherwise agreed in writing by the Licensor or as may be - otherwise permitted by applicable law, if You Reproduce, Distribute or - Publicly Perform the Work either by itself or as part of any Adaptations or - Collections, You must not distort, mutilate, modify or take other derogatory - action in relation to the Work which would be prejudicial to the Original - Author's honor or reputation. Licensor agrees that in those jurisdictions - (e.g. Japan), in which any exercise of the right granted in Section 3(b) of - this License (the right to make Adaptations) would be deemed to be a - distortion, mutilation, modification or other derogatory action prejudicial - to the Original Author's honor and reputation, the Licensor will waive or - not assert, as appropriate, this Section, to the fullest extent permitted by - the applicable national law, to enable You to reasonably exercise Your right - under Section 3(b) of this License (right to make Adaptations) but not - otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS -THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND -CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, -WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A -PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER -DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT -DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED -WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, -IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY -SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT -OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF -THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - a. This License and the rights granted hereunder will terminate - automatically upon any breach by You of the terms of this License. - Individuals or entities who have received Adaptations or Collections from - You under this License, however, will not have their licenses terminated - provided such individuals or entities remain in full compliance with those - licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this - License. - - b. Subject to the above terms and conditions, the license granted here is - perpetual (for the duration of the applicable copyright in the Work). - Notwithstanding the above, Licensor reserves the right to release the Work - under different license terms or to stop distributing the Work at any time; - provided, however that any such election will not serve to withdraw this - License (or any other license that has been, or is required to be, granted - under the terms of this License), and this License will continue in full - force and effect unless terminated as stated above. - -8. Miscellaneous - - a. Each time You Distribute or Publicly Perform the Work or a Collection, - the Licensor offers to the recipient a license to the Work on the same terms - and conditions as the license granted to You under this License. - - b. Each time You Distribute or Publicly Perform an Adaptation, Licensor - offers to the recipient a license to the original Work on the same terms and - conditions as the license granted to You under this License. - - c. If any provision of this License is invalid or unenforceable under - applicable law, it shall not affect the validity or enforceability of the - remainder of the terms of this License, and without further action by the - parties to this agreement, such provision shall be reformed to the minimum - extent necessary to make such provision valid and enforceable. - - d. No term or provision of this License shall be deemed waived and no breach - consented to unless such waiver or consent shall be in writing and signed by - the party to be charged with such waiver or consent. - - e. This License constitutes the entire agreement between the parties with - respect to the Work licensed here. There are no understandings, agreements - or representations with respect to the Work not specified here. Licensor - shall not be bound by any additional provisions that may appear in any - communication from You. This License may not be modified without the mutual - written agreement of the Licensor and You. - - f. The rights granted under, and the subject matter referenced, in this - License were drafted utilizing the terminology of the Berne Convention for - the Protection of Literary and Artistic Works (as amended on September 28, - 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the - WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright - Convention (as revised on July 24, 1971). These rights and subject matter - take effect in the relevant jurisdiction in which the License terms are - sought to be enforced according to the corresponding provisions of the - implementation of those treaty provisions in the applicable national law. If - the standard suite of rights granted under applicable copyright law includes - additional rights not granted under this License, such additional rights are - deemed to be included in the License; this License is not intended to - restrict the license of any rights under applicable law. - ''') - - Package(label='pdfminer', license_text=''' -(This is so-called MIT/X License) - -Copyright (c) 2004-2014 Yusuke Shinyama - -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. - ''') - - Package(label='pycountry', license_text=''' -Author: Christian Theune -License: LGPL 2.1 - ''') - - Package(label='pytesseract', license_text=''' -LICENSE: Python-tesseract is released under the GPL v3. - ''') - - Package(label='dateutil', license_text=''' -dateutil - Extensions to the standard Python datetime module. - -Copyright (c) 2003-2011 - Gustavo Niemeyer -Copyright (c) 2012-2014 - Tomi Pieviläinen -Copyright (c) 2014 - Yaron de Leeuw - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='pytz', license_text=''' -Copyright (c) 2003-2005 Stuart Bishop - -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. - ''') - - Package(label='sh', license_text=''' -Copyright (C) 2011-2012 by Andrew Moffat - -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. - ''') - app.conf.CELERYBEAT_SCHEDULE.update( { 'task_delete_stale_uploads': { diff --git a/mayan/apps/common/packages.py b/mayan/apps/common/packages.py new file mode 100644 index 0000000000..856e55d5bc --- /dev/null +++ b/mayan/apps/common/packages.py @@ -0,0 +1,913 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from .classes import Package + +Package(label='Django', license_text=''' +Copyright (c) Django Software Foundation and individual contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. Neither the name of Django nor the names of its contributors may be used +to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='PyYAML', license_text=''' +Copyright (c) 2006 Kirill Simonov + +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. +''') + +Package(label='Celery', license_text=''' +Copyright (c) 2015 Ask Solem & contributors. All rights reserved. +Copyright (c) 2012-2014 GoPivotal, Inc. All rights reserved. +Copyright (c) 2009, 2010, 2011, 2012 Ask Solem, and individual contributors. All rights reserved. + +Celery is licensed under The BSD License (3 Clause, also known as +the new BSD license). The license is an OSI approved Open Source +license and is GPL-compatible(1). + +The license text can also be found here: +http://www.opensource.org/licenses/BSD-3-Clause + +License +======= + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +* Neither the name of Ask Solem, nor the +names of its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Ask Solem OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Documentation License +===================== + +The documentation portion of Celery (the rendered contents of the +"docs" directory of a software distribution or checkout) is supplied +under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 +United States License as described by +http://creativecommons.org/licenses/by-nc-sa/3.0/us/ + +Footnotes +========= +(1) A GPL-compatible license makes it possible to +combine Celery with other software that is released +under the GPL, it does not mean that we're distributing +Celery under the GPL license. The BSD license, unlike the GPL, +let you distribute a modified version without making your +changes open source. +''') + +Package(label='cssmin', license_text=''' +`cssmin.py` - A Python port of the YUI CSS compressor. + +Copyright (c) 2010 Zachary Voase + +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. + +------------------------------------------------------------------------------- + +This software contains portions of the YUI CSS Compressor, notably some regular +expressions for reducing the size of CSS. The YUI Compressor source code can be +found at , and is licensed as follows: + +> YUI Compressor Copyright License Agreement (BSD License) +> +> Copyright (c) 2009, Yahoo! Inc. +> All rights reserved. +> +> Redistribution and use of this software in source and binary forms, +> with or without modification, are permitted provided that the following +> conditions are met: +> +> * Redistributions of source code must retain the above +> copyright notice, this list of conditions and the +> following disclaimer. +> +> * Redistributions in binary form must reproduce the above +> copyright notice, this list of conditions and the +> following disclaimer in the documentation and/or other +> materials provided with the distribution. +> +> * Neither the name of Yahoo! Inc. nor the names of its +> contributors may be used to endorse or promote products +> derived from this software without specific prior +> written permission of Yahoo! Inc. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='django-autoadmin', license_text=''' +The MIT License (MIT) + +Copyright (c) 2014 Roberto Rosario + +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. +''') + +Package(label='django-celery', license_text=''' +Copyright (c) 2012-2013 GoPivotal, Inc. All Rights Reserved. +Copyright (c) 2009-2012 Ask Solem. All Rights Reserved. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +Neither the name of Ask Solem nor the names of its contributors may be used +to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='django-colorful', license_text=''' +copyright (c) 2010 SIMON CHARETTE + +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. +''') + +Package(label='django-compressor', license_text=''' +django_compressor +----------------- +Copyright (c) 2009-2014 Django Compressor authors (see AUTHORS file) + +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. + + +django_compressor contains code from Andreas Pelme's django-compress +-------------------------------------------------------------------- +Copyright (c) 2008 Andreas Pelme + +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. + + +rjsmin.py (License-information from the file) +--------------------------------------------- +Copyright 2006, 2007, 2008, 2009, 2010, 2011 +André Malo or his licensors, as applicable + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +utils.cache.cached_property extracted from Celery +------------------------------------------- +Copyright (c) 2009-2011, Ask Solem and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +Neither the name of Ask Solem nor the names of its contributors may be used +to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +utils.FormattableString +----------------------- +Copyright (c) 2010 by Florent Xicluna. + +Some rights reserved. + +Redistribution and use in source and binary forms of the software as well +as documentation, with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +* The names of the contributors may not be used to endorse or +promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +''') + +Package(label='django-cors-headers', license_text=''' +Copyright 2013 Otto Yiu and other contributors +http://ottoyiu.com + +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. +''') + +Package(label='django-pure-pagination', license_text=''' +Copyright (c) James Pacileo and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. Neither the name of Django nor the names of its contributors may be used +to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='django-model-util', license_text=''' +Copyright (c) 2009-2015, Carl Meyer and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. +* Neither the name of the author nor the names of other +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='django-qsstats-magic', license_text=''' +Copyright (c) 2010, Matt Croydon, Mikhail Korobov +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +* Neither the name of the tastypie nor the +names of its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MATT CROYDON BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='Django Suit', license_text=''' +Django Suit +----------- + +Django Suit by is licensed under a +Creative Commons Attribution-NonCommercial 3.0 Unported License + +See online version of this license here: +http://creativecommons.org/licenses/by-nc/3.0/ + +License +------- + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE +BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE +CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE +IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + +a. "Adaptation" means a work based upon the Work, or upon the Work and other +pre-existing works, such as a translation, adaptation, derivative work, +arrangement of music or other alterations of a literary or artistic work, or +phonogram or performance and includes cinematographic adaptations or any +other form in which the Work may be recast, transformed, or adapted +including in any form recognizably derived from the original, except that a +work that constitutes a Collection will not be considered an Adaptation for +the purpose of this License. For the avoidance of doubt, where the Work is a +musical work, performance or phonogram, the synchronization of the Work in +timed-relation with a moving image ("synching") will be considered an +Adaptation for the purpose of this License. + +b. "Collection" means a collection of literary or artistic works, such as +encyclopedias and anthologies, or performances, phonograms or broadcasts, or +other works or subject matter other than works listed in Section 1(f) below, +which, by reason of the selection and arrangement of their contents, +constitute intellectual creations, in which the Work is included in its +entirety in unmodified form along with one or more other contributions, each +constituting separate and independent works in themselves, which together +are assembled into a collective whole. A work that constitutes a Collection +will not be considered an Adaptation (as defined above) for the purposes of +this License. + +c. "Distribute" means to make available to the public the original and +copies of the Work or Adaptation, as appropriate, through sale or other +transfer of ownership. + +d. "Licensor" means the individual, individuals, entity or entities that +offer(s) the Work under the terms of this License. + +e. "Original Author" means, in the case of a literary or artistic work, the +individual, individuals, entity or entities who created the Work or if no +individual or entity can be identified, the publisher; and in addition (i) +in the case of a performance the actors, singers, musicians, dancers, and +other persons who act, sing, deliver, declaim, play in, interpret or +otherwise perform literary or artistic works or expressions of folklore; +(ii) in the case of a phonogram the producer being the person or legal +entity who first fixes the sounds of a performance or other sounds; and, +(iii) in the case of broadcasts, the organization that transmits the +broadcast. + +f. "Work" means the literary and/or artistic work offered under the terms of +this License including without limitation any production in the literary, +scientific and artistic domain, whatever may be the mode or form of its +expression including digital form, such as a book, pamphlet and other +writing; a lecture, address, sermon or other work of the same nature; a +dramatic or dramatico-musical work; a choreographic work or entertainment in +dumb show; a musical composition with or without words; a cinematographic +work to which are assimilated works expressed by a process analogous to +cinematography; a work of drawing, painting, architecture, sculpture, +engraving or lithography; a photographic work to which are assimilated works +expressed by a process analogous to photography; a work of applied art; an +illustration, map, plan, sketch or three-dimensional work relative to +geography, topography, architecture or science; a performance; a broadcast; +a phonogram; a compilation of data to the extent it is protected as a +copyrightable work; or a work performed by a variety or circus performer to +the extent it is not otherwise considered a literary or artistic work. + +g. "You" means an individual or entity exercising rights under this License +who has not previously violated the terms of this License with respect to +the Work, or who has received express permission from the Licensor to +exercise rights under this License despite a previous violation. + +h. "Publicly Perform" means to perform public recitations of the Work and to +communicate to the public those public recitations, by any means or process, +including by wire or wireless means or public digital performances; to make +available to the public Works in such a way that members of the public may +access these Works from a place and at a place individually chosen by them; +to perform the Work to the public by any means or process and the +communication to the public of the performances of the Work, including by +public digital performance; to broadcast and rebroadcast the Work by any +means including signs, sounds or images. + +i. "Reproduce" means to make copies of the Work by any means including +without limitation by sound or visual recordings and the right of fixation +and reproducing fixations of the Work, including storage of a protected +performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, +or restrict any uses free from copyright or rights arising from limitations or +exceptions that are provided for in connection with the copyright protection +under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual +(for the duration of the applicable copyright) license to exercise the rights +in the Work as stated below: + +a. to Reproduce the Work, to incorporate the Work into one or more +Collections, and to Reproduce the Work as incorporated in the Collections; + +b. to create and Reproduce Adaptations provided that any such Adaptation, +including any translation in any medium, takes reasonable steps to clearly +label, demarcate or otherwise identify that changes were made to the +original Work. For example, a translation could be marked "The original work +was translated from English to Spanish," or a modification could indicate +"The original work has been modified."; + +c. to Distribute and Publicly Perform the Work including as incorporated in +Collections; and, + +d. to Distribute and Publicly Perform Adaptations. + +The above rights may be exercised in all media and formats whether now known +or hereafter devised. The above rights include the right to make such +modifications as are technically necessary to exercise the rights in other +media and formats. Subject to Section 8(f), all rights not expressly granted +by Licensor are hereby reserved, including but not limited to the rights set +forth in Section 4(d). + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + +a. You may Distribute or Publicly Perform the Work only under the terms of +this License. You must include a copy of, or the Uniform Resource Identifier +(URI) for, this License with every copy of the Work You Distribute or +Publicly Perform. You may not offer or impose any terms on the Work that +restrict the terms of this License or the ability of the recipient of the +Work to exercise the rights granted to that recipient under the terms of the +License. You may not sublicense the Work. You must keep intact all notices +that refer to this License and to the disclaimer of warranties with every +copy of the Work You Distribute or Publicly Perform. When You Distribute or +Publicly Perform the Work, You may not impose any effective technological +measures on the Work that restrict the ability of a recipient of the Work +from You to exercise the rights granted to that recipient under the terms of +the License. This Section 4(a) applies to the Work as incorporated in a +Collection, but this does not require the Collection apart from the Work +itself to be made subject to the terms of this License. If You create a +Collection, upon notice from any Licensor You must, to the extent +practicable, remove from the Collection any credit as required by Section +4(c), as requested. If You create an Adaptation, upon notice from any +Licensor You must, to the extent practicable, remove from the Adaptation any +credit as required by Section 4(c), as requested. + +b. You may not exercise any of the rights granted to You in Section 3 above +in any manner that is primarily intended for or directed toward commercial +advantage or private monetary compensation. The exchange of the Work for +other copyrighted works by means of digital file-sharing or otherwise shall +not be considered to be intended for or directed toward commercial advantage +or private monetary compensation, provided there is no payment of any +monetary compensation in connection with the exchange of copyrighted works. + +c. If You Distribute, or Publicly Perform the Work or any Adaptations or +Collections, You must, unless a request has been made pursuant to Section +4(a), keep intact all copyright notices for the Work and provide, reasonable +to the medium or means You are utilizing: (i) the name of the Original +Author (or pseudonym, if applicable) if supplied, and/or if the Original +Author and/or Licensor designate another party or parties (e.g., a sponsor +institute, publishing entity, journal) for attribution ("Attribution +Parties") in Licensor's copyright notice, terms of service or by other +reasonable means, the name of such party or parties; (ii) the title of the +Work if supplied; (iii) to the extent reasonably practicable, the URI, if +any, that Licensor specifies to be associated with the Work, unless such URI +does not refer to the copyright notice or licensing information for the +Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, +a credit identifying the use of the Work in the Adaptation (e.g., "French +translation of the Work by Original Author," or "Screenplay based on +original Work by Original Author"). The credit required by this Section 4(c) +may be implemented in any reasonable manner; provided, however, that in the +case of a Adaptation or Collection, at a minimum such credit will appear, if +a credit for all contributing authors of the Adaptation or Collection +appears, then as part of these credits and in a manner at least as prominent +as the credits for the other contributing authors. For the avoidance of +doubt, You may only use the credit required by this Section for the purpose +of attribution in the manner set out above and, by exercising Your rights +under this License, You may not implicitly or explicitly assert or imply any +connection with, sponsorship or endorsement by the Original Author, Licensor +and/or Attribution Parties, as appropriate, of You or Your use of the Work, +without the separate, express prior written permission of the Original +Author, Licensor and/or Attribution Parties. + +d. For the avoidance of doubt: + +i. Non-waivable Compulsory License Schemes. In those jurisdictions in +which the right to collect royalties through any statutory or compulsory +licensing scheme cannot be waived, the Licensor reserves the exclusive +right to collect such royalties for any exercise by You of the rights +granted under this License; + +ii. Waivable Compulsory License Schemes. In those jurisdictions in which +the right to collect royalties through any statutory or compulsory +licensing scheme can be waived, the Licensor reserves the exclusive right +to collect such royalties for any exercise by You of the rights granted +under this License if Your exercise of such rights is for a purpose or use +which is otherwise than noncommercial as permitted under Section 4(b) and +otherwise waives the right to collect royalties through any statutory or +compulsory licensing scheme; and, + +iii. Voluntary License Schemes. The Licensor reserves the right to collect +royalties, whether individually or, in the event that the Licensor is a +member of a collecting society that administers voluntary licensing +schemes, via that society, from any exercise by You of the rights granted +under this License that is for a purpose or use which is otherwise than +noncommercial as permitted under Section 4(c). + +e. Except as otherwise agreed in writing by the Licensor or as may be +otherwise permitted by applicable law, if You Reproduce, Distribute or +Publicly Perform the Work either by itself or as part of any Adaptations or +Collections, You must not distort, mutilate, modify or take other derogatory +action in relation to the Work which would be prejudicial to the Original +Author's honor or reputation. Licensor agrees that in those jurisdictions +(e.g. Japan), in which any exercise of the right granted in Section 3(b) of +this License (the right to make Adaptations) would be deemed to be a +distortion, mutilation, modification or other derogatory action prejudicial +to the Original Author's honor and reputation, the Licensor will waive or +not assert, as appropriate, this Section, to the fullest extent permitted by +the applicable national law, to enable You to reasonably exercise Your right +under Section 3(b) of this License (right to make Adaptations) but not +otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS +THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND +CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, +WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A +PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER +DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT +DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED +WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, +IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY +SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT +OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF +THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + +a. This License and the rights granted hereunder will terminate +automatically upon any breach by You of the terms of this License. +Individuals or entities who have received Adaptations or Collections from +You under this License, however, will not have their licenses terminated +provided such individuals or entities remain in full compliance with those +licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this +License. + +b. Subject to the above terms and conditions, the license granted here is +perpetual (for the duration of the applicable copyright in the Work). +Notwithstanding the above, Licensor reserves the right to release the Work +under different license terms or to stop distributing the Work at any time; +provided, however that any such election will not serve to withdraw this +License (or any other license that has been, or is required to be, granted +under the terms of this License), and this License will continue in full +force and effect unless terminated as stated above. + +8. Miscellaneous + +a. Each time You Distribute or Publicly Perform the Work or a Collection, +the Licensor offers to the recipient a license to the Work on the same terms +and conditions as the license granted to You under this License. + +b. Each time You Distribute or Publicly Perform an Adaptation, Licensor +offers to the recipient a license to the original Work on the same terms and +conditions as the license granted to You under this License. + +c. If any provision of this License is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of the +remainder of the terms of this License, and without further action by the +parties to this agreement, such provision shall be reformed to the minimum +extent necessary to make such provision valid and enforceable. + +d. No term or provision of this License shall be deemed waived and no breach +consented to unless such waiver or consent shall be in writing and signed by +the party to be charged with such waiver or consent. + +e. This License constitutes the entire agreement between the parties with +respect to the Work licensed here. There are no understandings, agreements +or representations with respect to the Work not specified here. Licensor +shall not be bound by any additional provisions that may appear in any +communication from You. This License may not be modified without the mutual +written agreement of the Licensor and You. + +f. The rights granted under, and the subject matter referenced, in this +License were drafted utilizing the terminology of the Berne Convention for +the Protection of Literary and Artistic Works (as amended on September 28, +1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the +WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright +Convention (as revised on July 24, 1971). These rights and subject matter +take effect in the relevant jurisdiction in which the License terms are +sought to be enforced according to the corresponding provisions of the +implementation of those treaty provisions in the applicable national law. If +the standard suite of rights granted under applicable copyright law includes +additional rights not granted under this License, such additional rights are +deemed to be included in the License; this License is not intended to +restrict the license of any rights under applicable law. +''') + +Package(label='pdfminer', license_text=''' +(This is so-called MIT/X License) + +Copyright (c) 2004-2014 Yusuke Shinyama + +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. +''') + +Package(label='pycountry', license_text=''' +Author: Christian Theune +License: LGPL 2.1 +''') + +Package(label='pytesseract', license_text=''' +LICENSE: Python-tesseract is released under the GPL v3. +''') + +Package(label='dateutil', license_text=''' +dateutil - Extensions to the standard Python datetime module. + +Copyright (c) 2003-2011 - Gustavo Niemeyer +Copyright (c) 2012-2014 - Tomi Pieviläinen +Copyright (c) 2014 - Yaron de Leeuw + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='pytz', license_text=''' +Copyright (c) 2003-2005 Stuart Bishop + +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. +''') + +Package(label='sh', license_text=''' +Copyright (C) 2011-2012 by Andrew Moffat + +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. +''') diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index 04e197b661..36f0dc92ec 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig, menu_object, menu_sidebar -from common.classes import Package from navigation import SourceColumn @@ -11,6 +10,7 @@ from .links import ( link_transformation_create, link_transformation_delete, link_transformation_edit ) +from .packages import * # NOQA class ConverterApp(MayanAppConfig): @@ -23,19 +23,6 @@ class ConverterApp(MayanAppConfig): Transformation = self.get_model('Transformation') - Package(label='Pillow', license_text=''' -The Python Imaging Library (PIL) is - - Copyright (c) 1997-2011 by Secret Labs AB - Copyright (c) 1995-2011 by Fredrik Lundh - -By obtaining, using, and/or copying this software and/or its associated documentation, you agree that you have read, understood, and will comply with the following terms and conditions: - -Permission to use, copy, modify, and distribute this software and its associated documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies, and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Secret Labs AB or the author not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. - -SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ''') - SourceColumn(source=Transformation, label=_('Order'), attribute='order') SourceColumn( source=Transformation, label=_('Transformation'), diff --git a/mayan/apps/converter/packages.py b/mayan/apps/converter/packages.py new file mode 100644 index 0000000000..a319c0082f --- /dev/null +++ b/mayan/apps/converter/packages.py @@ -0,0 +1,16 @@ +from __future__ import unicode_literals + +from common.classes import Package + +Package(label='Pillow', license_text=''' +The Python Imaging Library (PIL) is + + Copyright (c) 1997-2011 by Secret Labs AB + Copyright (c) 1995-2011 by Fredrik Lundh + +By obtaining, using, and/or copying this software and/or its associated documentation, you agree that you have read, understood, and will comply with the following terms and conditions: + +Permission to use, copy, modify, and distribute this software and its associated documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies, and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Secret Labs AB or the author not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +''') diff --git a/mayan/apps/django_gpg/apps.py b/mayan/apps/django_gpg/apps.py index b3abb60d18..3f00d9b4a9 100644 --- a/mayan/apps/django_gpg/apps.py +++ b/mayan/apps/django_gpg/apps.py @@ -8,7 +8,6 @@ from acls.permissions import permission_acl_edit, permission_acl_view from common import ( MayanAppConfig, menu_facet, menu_object, menu_setup, menu_sidebar ) -from common.classes import Package from navigation import SourceColumn from .classes import KeyStub @@ -17,6 +16,7 @@ from .links import ( link_key_receive, link_key_setup, link_key_upload, link_private_keys, link_public_keys ) +from .packages import * # NOQA from .permissions import ( permission_key_delete, permission_key_download, permission_key_sign, permission_key_view @@ -42,34 +42,6 @@ class DjangoGPGApp(MayanAppConfig): ) ) - Package(label='python-gnupg', license_text=''' -Copyright (c) 2008-2014 by Vinay Sajip. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name(s) of the copyright holder(s) may not be used to endorse or - promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - SourceColumn(source=Key, label=_('Key ID'), attribute='key_id') SourceColumn(source=Key, label=_('User ID'), attribute='user_id') diff --git a/mayan/apps/django_gpg/packages.py b/mayan/apps/django_gpg/packages.py new file mode 100644 index 0000000000..48a271fec7 --- /dev/null +++ b/mayan/apps/django_gpg/packages.py @@ -0,0 +1,31 @@ +from __future__ import absolute_import, unicode_literals + +from common.classes import Package + +Package(label='python-gnupg', license_text=''' +Copyright (c) 2008-2014 by Vinay Sajip. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * The name(s) of the copyright holder(s) may not be used to endorse or + promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 6fc92f823c..4411469de6 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -14,7 +14,6 @@ from common import ( MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary, menu_setup, menu_tools ) -from common.classes import Package from common.widgets import two_state_template from documents.signals import post_document_created, post_initial_document_type from mayan.celery import app @@ -34,6 +33,7 @@ from .links import ( link_template_node_create, link_template_node_delete, link_template_node_edit ) +from .packages import * # NOQA from .permissions import ( permission_document_indexing_create, permission_document_indexing_delete, permission_document_indexing_edit, permission_document_indexing_view @@ -82,46 +82,6 @@ class DocumentIndexingApp(MayanAppConfig): ) ) - Package(label='Django MPTT', license_text=''' -Django MPTT ------------ - -Copyright (c) 2007, Jonathan Buchanan - -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. - ''') - - Package(label='djangorestframework-recursive', license_text=''' -Copyright (c) 2015, Warren Jin - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ''') - SourceColumn(source=Index, label=_('Label'), attribute='label') SourceColumn(source=Index, label=_('Slug'), attribute='slug') SourceColumn( diff --git a/mayan/apps/document_indexing/packages.py b/mayan/apps/document_indexing/packages.py new file mode 100644 index 0000000000..2c981908d2 --- /dev/null +++ b/mayan/apps/document_indexing/packages.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import, unicode_literals + +from common.classes import Package + +Package(label='Django MPTT', license_text=''' +Django MPTT +----------- + +Copyright (c) 2007, Jonathan Buchanan + +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. +''') + +Package(label='djangorestframework-recursive', license_text=''' +Copyright (c) 2015, Warren Jin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +''') diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index 1c28b6bbb7..443f4cde3c 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -4,11 +4,11 @@ from django.apps import apps from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig, menu_tools -from common.classes import Package from navigation import SourceColumn from .links import link_events_list +from .packages import * # NOQA from .widgets import event_type_link @@ -21,37 +21,6 @@ class EventsApp(MayanAppConfig): super(EventsApp, self).ready() Action = apps.get_model(app_label='actstream', model_name='Action') - Package(label='django-activity-stream', license_text=''' -Copyright (c) 2010-2015, Justin Quick -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of the author nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - SourceColumn( source=Action, label=_('Timestamp'), attribute='timestamp' ) diff --git a/mayan/apps/events/packages.py b/mayan/apps/events/packages.py new file mode 100644 index 0000000000..4ea6e2d0f6 --- /dev/null +++ b/mayan/apps/events/packages.py @@ -0,0 +1,34 @@ +from __future__ import unicode_literals + +from common.classes import Package + +Package(label='django-activity-stream', license_text=''' +Copyright (c) 2010-2015, Justin Quick +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the author nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') diff --git a/mayan/apps/mimetype/apps.py b/mayan/apps/mimetype/apps.py index cbb878fc42..35d57f3e55 100644 --- a/mayan/apps/mimetype/apps.py +++ b/mayan/apps/mimetype/apps.py @@ -3,7 +3,8 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig -from common.classes import Package + +from .packages import * # NOQA class MIMETypesApp(MayanAppConfig): @@ -12,27 +13,3 @@ class MIMETypesApp(MayanAppConfig): def ready(self, *args, **kwargs): super(MIMETypesApp, self).ready(*args, **kwargs) - - Package(label='python-magic', license_text=''' -The MIT License (MIT) - -Copyright (c) 2001-2014 Adam Hupp - -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. - ''') diff --git a/mayan/apps/mimetype/packages.py b/mayan/apps/mimetype/packages.py new file mode 100644 index 0000000000..2574cb4d4e --- /dev/null +++ b/mayan/apps/mimetype/packages.py @@ -0,0 +1,27 @@ +from __future__ import unicode_literals + +from common.classes import Package + +Package(label='python-magic', license_text=''' +The MIT License (MIT) + +Copyright (c) 2001-2014 Adam Hupp + +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. +''') diff --git a/mayan/apps/rest_api/apps.py b/mayan/apps/rest_api/apps.py index 883198886c..f506a57469 100644 --- a/mayan/apps/rest_api/apps.py +++ b/mayan/apps/rest_api/apps.py @@ -4,10 +4,10 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig, menu_tools -from common.classes import Package from .classes import APIEndPoint from .links import link_api, link_api_documentation +from .packages import * # NOQA class RESTAPIApp(MayanAppConfig): @@ -22,39 +22,4 @@ class RESTAPIApp(MayanAppConfig): APIEndPoint(app=self, name='rest', version_string='1') - Package(label='Django REST framework', license_text=''' -Copyright (c) 2011-2015, Tom Christie All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - - Package(label='django-rest-swagger', license_text=''' -Copyright (c) 2013, Marc Gibbons -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''') - menu_tools.bind_links(links=(link_api, link_api_documentation)) diff --git a/mayan/apps/rest_api/packages.py b/mayan/apps/rest_api/packages.py new file mode 100644 index 0000000000..4037ef8f7d --- /dev/null +++ b/mayan/apps/rest_api/packages.py @@ -0,0 +1,38 @@ +from __future__ import unicode_literals + +from common.classes import Package + +Package(label='Django REST framework', license_text=''' +Copyright (c) 2011-2015, Tom Christie All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') + +Package(label='django-rest-swagger', license_text=''' +Copyright (c) 2013, Marc Gibbons +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +''') diff --git a/mayan/apps/statistics/apps.py b/mayan/apps/statistics/apps.py index 0f182b9b80..7560da6fb4 100644 --- a/mayan/apps/statistics/apps.py +++ b/mayan/apps/statistics/apps.py @@ -6,7 +6,6 @@ from django.utils.translation import ugettext_lazy as _ from mayan.celery import app from common import MayanAppConfig, menu_object, menu_secondary, menu_tools -from common.classes import Package from navigation import SourceColumn @@ -15,6 +14,7 @@ from .links import ( link_execute, link_namespace_details, link_namespace_list, link_statistics, link_view ) +from .packages import * # NOQA from .tasks import task_execute_statistic # NOQA - Force registration of task @@ -26,16 +26,6 @@ class StatisticsApp(MayanAppConfig): def ready(self): super(StatisticsApp, self).ready() - Package(label='Chart.js', license_text=''' -Copyright (c) 2013-2015 Nick Downie - -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. - ''') - SourceColumn( source=Statistic, # Translators: Schedule here is a verb, the 'schedule' at which the diff --git a/mayan/apps/statistics/packages.py b/mayan/apps/statistics/packages.py new file mode 100644 index 0000000000..a7cc3ad7d4 --- /dev/null +++ b/mayan/apps/statistics/packages.py @@ -0,0 +1,13 @@ +from __future__ import unicode_literals + +from common.classes import Package + +Package(label='Chart.js', license_text=''' +Copyright (c) 2013-2015 Nick Downie + +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. +''') From 9ed20091d240a8a89dd15395e2f86cca18041b16 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 12 Nov 2016 23:59:50 -0400 Subject: [PATCH 051/119] Rename the licenses modules from packages.py to licenses.py --- mayan/apps/appearance/apps.py | 2 +- mayan/apps/appearance/{packages.py => licenses.py} | 0 mayan/apps/common/apps.py | 2 +- mayan/apps/common/{packages.py => licenses.py} | 0 mayan/apps/converter/apps.py | 2 +- mayan/apps/converter/{packages.py => licenses.py} | 0 mayan/apps/django_gpg/apps.py | 2 +- mayan/apps/django_gpg/{packages.py => licenses.py} | 0 mayan/apps/document_indexing/apps.py | 2 +- mayan/apps/document_indexing/{packages.py => licenses.py} | 0 mayan/apps/events/apps.py | 2 +- mayan/apps/events/{packages.py => licenses.py} | 0 mayan/apps/mimetype/apps.py | 2 +- mayan/apps/mimetype/{packages.py => licenses.py} | 0 mayan/apps/rest_api/apps.py | 2 +- mayan/apps/rest_api/{packages.py => licenses.py} | 0 mayan/apps/statistics/apps.py | 2 +- mayan/apps/statistics/{packages.py => licenses.py} | 0 18 files changed, 9 insertions(+), 9 deletions(-) rename mayan/apps/appearance/{packages.py => licenses.py} (100%) rename mayan/apps/common/{packages.py => licenses.py} (100%) rename mayan/apps/converter/{packages.py => licenses.py} (100%) rename mayan/apps/django_gpg/{packages.py => licenses.py} (100%) rename mayan/apps/document_indexing/{packages.py => licenses.py} (100%) rename mayan/apps/events/{packages.py => licenses.py} (100%) rename mayan/apps/mimetype/{packages.py => licenses.py} (100%) rename mayan/apps/rest_api/{packages.py => licenses.py} (100%) rename mayan/apps/statistics/{packages.py => licenses.py} (100%) diff --git a/mayan/apps/appearance/apps.py b/mayan/apps/appearance/apps.py index 511ea15fed..b8781b2023 100644 --- a/mayan/apps/appearance/apps.py +++ b/mayan/apps/appearance/apps.py @@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig -from .packages import * # NOQA +from .licenses import * # NOQA class AppearanceApp(MayanAppConfig): diff --git a/mayan/apps/appearance/packages.py b/mayan/apps/appearance/licenses.py similarity index 100% rename from mayan/apps/appearance/packages.py rename to mayan/apps/appearance/licenses.py diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index e283db6827..9651c2ecdd 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -24,7 +24,7 @@ from .links import ( ) from .literals import DELETE_STALE_UPLOADS_INTERVAL from .menus import menu_facet, menu_main, menu_tools, menu_user -from .packages import * # NOQA +from .licenses import * # NOQA from .settings import setting_auto_logging from .tasks import task_delete_stale_uploads # NOQA - Force task registration diff --git a/mayan/apps/common/packages.py b/mayan/apps/common/licenses.py similarity index 100% rename from mayan/apps/common/packages.py rename to mayan/apps/common/licenses.py diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index 36f0dc92ec..40b54d6bc0 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -10,7 +10,7 @@ from .links import ( link_transformation_create, link_transformation_delete, link_transformation_edit ) -from .packages import * # NOQA +from .licenses import * # NOQA class ConverterApp(MayanAppConfig): diff --git a/mayan/apps/converter/packages.py b/mayan/apps/converter/licenses.py similarity index 100% rename from mayan/apps/converter/packages.py rename to mayan/apps/converter/licenses.py diff --git a/mayan/apps/django_gpg/apps.py b/mayan/apps/django_gpg/apps.py index 3f00d9b4a9..b9e5883a73 100644 --- a/mayan/apps/django_gpg/apps.py +++ b/mayan/apps/django_gpg/apps.py @@ -16,7 +16,7 @@ from .links import ( link_key_receive, link_key_setup, link_key_upload, link_private_keys, link_public_keys ) -from .packages import * # NOQA +from .licenses import * # NOQA from .permissions import ( permission_key_delete, permission_key_download, permission_key_sign, permission_key_view diff --git a/mayan/apps/django_gpg/packages.py b/mayan/apps/django_gpg/licenses.py similarity index 100% rename from mayan/apps/django_gpg/packages.py rename to mayan/apps/django_gpg/licenses.py diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 4411469de6..2e95e0c807 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -33,7 +33,7 @@ from .links import ( link_template_node_create, link_template_node_delete, link_template_node_edit ) -from .packages import * # NOQA +from .licenses import * # NOQA from .permissions import ( permission_document_indexing_create, permission_document_indexing_delete, permission_document_indexing_edit, permission_document_indexing_view diff --git a/mayan/apps/document_indexing/packages.py b/mayan/apps/document_indexing/licenses.py similarity index 100% rename from mayan/apps/document_indexing/packages.py rename to mayan/apps/document_indexing/licenses.py diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index 443f4cde3c..edd87731b0 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -8,7 +8,7 @@ from common import MayanAppConfig, menu_tools from navigation import SourceColumn from .links import link_events_list -from .packages import * # NOQA +from .licenses import * # NOQA from .widgets import event_type_link diff --git a/mayan/apps/events/packages.py b/mayan/apps/events/licenses.py similarity index 100% rename from mayan/apps/events/packages.py rename to mayan/apps/events/licenses.py diff --git a/mayan/apps/mimetype/apps.py b/mayan/apps/mimetype/apps.py index 35d57f3e55..9aedf1a23d 100644 --- a/mayan/apps/mimetype/apps.py +++ b/mayan/apps/mimetype/apps.py @@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig -from .packages import * # NOQA +from .licenses import * # NOQA class MIMETypesApp(MayanAppConfig): diff --git a/mayan/apps/mimetype/packages.py b/mayan/apps/mimetype/licenses.py similarity index 100% rename from mayan/apps/mimetype/packages.py rename to mayan/apps/mimetype/licenses.py diff --git a/mayan/apps/rest_api/apps.py b/mayan/apps/rest_api/apps.py index f506a57469..42a18e6ab2 100644 --- a/mayan/apps/rest_api/apps.py +++ b/mayan/apps/rest_api/apps.py @@ -7,7 +7,7 @@ from common import MayanAppConfig, menu_tools from .classes import APIEndPoint from .links import link_api, link_api_documentation -from .packages import * # NOQA +from .licenses import * # NOQA class RESTAPIApp(MayanAppConfig): diff --git a/mayan/apps/rest_api/packages.py b/mayan/apps/rest_api/licenses.py similarity index 100% rename from mayan/apps/rest_api/packages.py rename to mayan/apps/rest_api/licenses.py diff --git a/mayan/apps/statistics/apps.py b/mayan/apps/statistics/apps.py index 7560da6fb4..ba0f36b43f 100644 --- a/mayan/apps/statistics/apps.py +++ b/mayan/apps/statistics/apps.py @@ -14,7 +14,7 @@ from .links import ( link_execute, link_namespace_details, link_namespace_list, link_statistics, link_view ) -from .packages import * # NOQA +from .licenses import * # NOQA from .tasks import task_execute_statistic # NOQA - Force registration of task diff --git a/mayan/apps/statistics/packages.py b/mayan/apps/statistics/licenses.py similarity index 100% rename from mayan/apps/statistics/packages.py rename to mayan/apps/statistics/licenses.py From c5ab1a22a9b1343d8ed2ac9572c4ae99816aa4de Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 13 Nov 2016 00:07:08 -0400 Subject: [PATCH 052/119] Add checkedout documents dashboard widget --- mayan/apps/checkouts/apps.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index 733e3bacf5..e83886a46c 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -5,10 +5,12 @@ from datetime import timedelta from kombu import Exchange, Queue from django.apps import apps +from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext_lazy as _ from acls import ModelPermission from common import MayanAppConfig, menu_facet, menu_main, menu_sidebar +from common.classes import DashboardWidget from mayan.celery import app from rest_api.classes import APIEndPoint @@ -41,6 +43,13 @@ class CheckoutsApp(MayanAppConfig): DocumentCheckout = self.get_model('DocumentCheckout') + DashboardWidget( + icon='fa fa-shopping-cart', + queryset=DocumentCheckout.objects.all(), + label=_('Checkout documents'), + link=reverse_lazy('checkouts:checkout_list') + ) + Document.add_to_class( 'check_in', lambda document, user=None: DocumentCheckout.objects.check_in_document(document, user) From f5e3d5a8f23260e87e540159511fe586d4ef9d84 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 13 Nov 2016 00:14:09 -0400 Subject: [PATCH 053/119] Remove screenshot documentation section. --- docs/_static/api.png | Bin 79959 -> 0 bytes docs/_static/document_view.png | Bin 68268 -> 0 bytes docs/_static/main.png | Bin 33097 -> 0 bytes docs/_static/page_view.png | Bin 70353 -> 0 bytes docs/_static/setup.png | Bin 62629 -> 0 bytes docs/_static/statistics.png | Bin 28440 -> 0 bytes docs/_static/tools.png | Bin 68258 -> 0 bytes docs/index.rst | 1 - docs/topics/index.rst | 1 - docs/topics/screenshots.rst | 64 --------------------------------- 10 files changed, 66 deletions(-) delete mode 100644 docs/_static/api.png delete mode 100644 docs/_static/document_view.png delete mode 100644 docs/_static/main.png delete mode 100644 docs/_static/page_view.png delete mode 100644 docs/_static/setup.png delete mode 100644 docs/_static/statistics.png delete mode 100644 docs/_static/tools.png delete mode 100644 docs/topics/screenshots.rst diff --git a/docs/_static/api.png b/docs/_static/api.png deleted file mode 100644 index 058b1115ea77346f9e69ae01f5dbaa3ac78201bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79959 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�LNURw#Z2-YuM6C)qjmUt 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≻QYSp$nWZhej!gY7vqq>vyRKU-IJ#4*t*&Wb4Eg6 zMGUgn$2zx}Kg0mHG@V2;2qOcKTOX5?&;N6a=n5!#+0JS}lUeka@{a z|66$5nBaO~7mWl@AkO^ufW(#uS$mM6LZmbdL0)Y*?+*c5t2RitH3F|VD!`oi#<6)n zLOORq$fe)L6huBl+_I~T$NLEgjs)*D}v8*+YvJsVoAd` zLF2J}Af^}B!V8Yf2Ec@qY0JqHhBma-2{R`q<4&+l0Ko%G$Ynnm76BF8D4aF1&?FO> z6EFu}HPgGhlWN$Q9ndqET2_K*_pw6aRV)Z)00W;Hq>lksKQK;YFfvW0(?kv+ZiOzw zE!O*%;YEtT=~(Hwi5l<2m~LSC!4ccSGI188NbHTfxy|A_q~bW^<8xxYD#|&@4PO)P z7~?$jW0zdy^6S2EWEehX6VJF6?&m{Ar7GjaW@IKX0R3KpCEI`NuL=en^S+#Dk#)jA zBD>E*L@T5O#qP{AwBMmNaGWV}lgL&Fp#zER2|Po;sg38-mR~cv0R2^Q-{OC;_ZCo5 zhJBwf&CuN)BBFG+G%6^dG!mk8x4@7?NP`MUN=T zt08qeGPbK`kt{al7lp@(gbKyYJ#vC{f0^k1)_-A;}V#Cmstw zbtUX?0$+cqafbsk4zb*foNxmNrl%tza3fDk9VPF6tl%?@5ar}b5Z~a-&!16;UBpsE zI`|)h3m!pUqYvy8^Nil%jKE@`{atyV9S_&7Iclm1zw*dnZf);8JImyXQ^D~Azn;nE z=QXFr_!RqMM|jlchy~B4QW}DDc+!JE`9#8U~yB7mdQ5DOE%s1&;vs7xhfNYcc zrp9l6JD;cu$9aPK7FvN7-&5(Y@5*ry3%*S?WDUk`S!)Cm%8ujgi3r=$U_wjm^bwM09)4O%0FRuy4L$e zz|>O(38A}|ZZ7^+3y>A@y$JsaoXTqKgwn1X#o(=`lFctHbH0dIuQ0zh1wpb|$UHim z!GYXKcuP@O!ZbnJ#&X&7!ovcRPAUG2MMnN9>)vYU_}QRJKj5a32SWJ(4D}wZ&h7?` zdY7@1#^BqD$Zi6YEZv!I8FAd}k~=Dy`DeiB^zXLa5w9SvSLpF%LI*5MGZ5{x?hD@M zQSP%$4J;BKwyocDI7kwrK{Y?gx&JeOd}^yrF4Z8hQ2(LWfK$lx>H+@Tm`3-p={Q%W zi3}(p2--h8#o=SA@CkmEIcYEJ|0W7>0*GA9jpVnqH8+L)eES6MS(48Oi^a2yo*NOx z|Jl=Wv9EHzOM7%K%o9_?cOcO5c1-UIZmCe02o3IB?YLfN;dzC_zGA5tPiw;E+qIo8 zF=~#5xw%_2RuWnJ3S~#qtfa10$kAs*OztRYZX_)1aHLNOIPwgA{I8V&W){OpO(4@v zQ4hjOZB_E<1E$^=p9}I5ZAW zBAr6XdZ}l#($}L%rJ)*hzv++efJzg=H_@+^jgeh$@$> z9tr`pbpJ%hTwJ`b&IE7OF+_v zT_^hF=Tl7$tlH8Rm|*r%c@k*jDQSon&KKbEb(B)9IGi_?1tgY0Jq=#L~mBge9#=Z;)$qt3y_&ZCq!huV9uLxcKTyMu;(t>ZZ zm&u2DLPZ*TLM2u}#~hE3#**a6IIF5KEyNkpCR_o=w>AXtSSrQ>hUk>}K{KHW9 zE!ws9ll>casfxkSw5y8K*+Bbjl|Y}X^sUX0J9qThWm#cs)#!hz3;>4^%&H}AF9;Eg zEe1;{q zP84VLz?*uFzjH7rrQ;|8FSOhB`WTaAfp*Y!&vB1GKj+WM*Zb+%6(`S%K6x?Mm<{7m zGYvI&zrC#-wp+wFzK2n@d+wW;VJVV5L0wT7#R6_tz55MjsUDrQO^P%D#tjc2dbC@* zingAVD{h#1j7gRgn3vN$p*hh5&-`j~mo)Ah-=@mU;bFf5WhA|k@( zh|m&<(DP56QMTqr!;h}MUK0~xc(rl40H9?yr;q-ZEGbD&FGsR~5<5n8sb=f`Z!UX( z*#a=WouN14^6lu(xVfhrkT(@elF^L+Vf4;Aw?JaK;ZD-kIC7Srw$M%h88#df94VP{ z-i&tzNeA#WKfqWvWS1=$o+mqj5ViKAE=cS~`_ZK~nx^=L$r-2oDGy*Vw%1){VS5hj zcN2MU!htjA>i5}sd)F#+PRe8!v>-q8Y4g7 zdYmyuDq8`MGuZRwDs$=(YJ>DRqcx_t`-iJs%xzsM3PO@{ik(vNfmRb(ISf@x)HZJ) zsT{f7dYn&J&RdE*%XH%-Ad9thwnMgjoiOv_W6`Xg#u;o;9X{?!q{n%xp3I~5a#PsA zME#X0vjRCj-^}$?1Z2rw7)?d@tzd1sq}iD*lLDG90x(yt08;3nfeb(jjpteYGhaiD zpzZZbxso_)qn_YxyUi;bFQ5Gfve56Gex4qXl$p>@(@t-B8ldt5>~Qh#5Q_Q>(LZl- ztluv^hI3i_pj$`t1?(@5W{g`$^Iu8czY3xq0CM-)tzr3ZJndfu(Fdo1Ao`zQbWSI6 zSdLRp<$gss^Bv=lL>)Mtp#B}$cm7Q#{jZ{ZfN5ik2mP(8@HYpt=HDI2@_)Vz@SQpS zu3rA1{N(C*sFN@lQoTlD_i{B0zSZ%k)hNjl@H}SabZl};N=H7EGpB!p7_d|#f4oXr zn!KZ@W1s)^DxH+5F+=Xxr6ZyW3-2|>$7*tRRV-Z-9pvR5PWZ(LN8+la}b zcZ#h3fF&90PZj9hyU@eJGaZc8nt%tHe$+t;(2~jKrGC%eVhvc6c2Uv*VV* z5vMJgx7zs4@vDCv@7D@m$L9gO3j};Wl{G^`PZ~5@;oP}hAO}I~@29@!M*i0-{^S%W z-hNDZ-LAf;D?k)!@h|C;K|M2*C-NaNHazckr0>p8GM%+I$L@I1A3=rsX0xJ!!Q0gS zr}tS^IG=oLlsGe5k=QX)+ii6U;9|^KZ^o-`<;4sIqrwm;^Od(U>MLSUpXyptyu}sr zNu;`C#6(`5l^sY@xWf0520%?})S6fMS8Wmk)e6V_tkb$P7RE2=vK2@US-c0}kQrO0 zpOHhqe^--&q!Qr`Ll4T*I#2V4UYv9vO}xvbKrz5F)VcyAI)v!D$HA5gx8<|!Nfo7i zUjjiLAa(O0V5xnO$x?3C!O|2lm5q5?O8%lbJX|;E>ab#U# zgf~w0>4H>~828Pzs};>Cuu3ZbHnf-ju=Hu6Q+=!c+q-!HbI6)X80^*Q^3vDjC7(&o zPdRHYw5$ICgp=kiNI)p!aa-^6wm-SX@lBw(Po@9j16RZ}M%hY;fmfO-XtF;Elmdh$ z*?<-7R6tAx5u3Y!LznGl?`<0z;?0+yblUw`3+8tYCFytK%U@{zxa-ug4Y4wATgwE2 z(EG18q*lG_PpdRuP!tu(YYR(d)(InmEkjPoVGJ+G?FFe1Xyy(Gi_PwacmmuVGn~CXSg~E*#th<< z@H6Grq`CiE`Z36nw<@J`D}str6WQE5UzCJ5iI|`s5afXpXeh6U(kNyg12$6|{x+X6 zSd#%|<5TqACAFP?vQ)esY&wwl%Zh$Vv5nX`o5pVNj)FSt>$7EM?{M){l=hbBZ(1EN z9TY-W`x?mW)Gmi?w3i2(^G4Y#k*OJb0QMPqH=a(6#z?jMm8RyjX1v(1TU9pp_{+PP za zE)%@!;NCUh_2Q_!HZfN;loyliK8r&lp0l5YTQ@rf!I};hsVvv#%-y%kH*aP_TZ%fw zTs-J?VR36N0B=CVV4u3;&EaAkJMkHbWE)&VLN;HY>Zjkl{R5SzgF>uGwkpuO+n#+u zE%2mslE^cwEoUi2D==cQa$%mO9-Y{C-sErh*C}zo>>*fsjK)%ovEWA=QI_M|NRY(* zO+GS3dCD4Mc{ea3kJX1XVB~9%S2-`^rPnTT+3bV12j$Co+2{r|)35U=6~8_3pw}AG zROGHD0;prZvPP3)*5)_C?LI;BYy)~2)Ehh+!zfnb^y+j=)L&%A*yX>XT6lt}wn)j9 zf(Z#OrYI6HF&m7P?X*Luyh`_fd-#qFmxDh5B?0OZUN8Vt4^{udR$2*Cov;r2C!4*D z&PkK(`1T_t{ewhP4E8t@+RS7?E7YU>J^=||Zk!ju99NzaJqR^2A^7AB1ddE+5-knK z&GQMVd|U86WApWh_PVB}QZWP~#h0XtO4%k|e4LVvk{6`DD?JE&eT{#AG!-~ab#1?F zF8XDAK0(dm@7Sf~MP+D9SJ&(6;|834yzBo7bpGpvv7!Qi6s>Opi(TN>DLecGeBrF$ zFU^2;NE!(m1JrRBzh0bSrg?q0uo?k)zbAgzcC#k+@(&X#6Y0TUFU`Z8xU0~SYT#8u zh6OM_XvxNgOvjmaqg9Q6!r32?rcWu==!+_2r1lHDlRpE;rTO$)D{Lcg0up{#<88_3 zpJ`Krf3$>ro5^X~n|$-|ssLFTz-hNCw!fn=VeyCEo4Pb1Nnn>tU{ChFvWi;T3K7Kk zDIi5CXteagp4mZ_!E>hoiTz8YYXPV2+yUUUl{Y=Z>XIpk`rY(V1M15?8lc|t7;Pu7 z7CZ@|Bcf%I!dJ-bX{v^#IzBAGdEme2Hy~OPEi`!>BJuWDpJ(_3s98lBTjA&Fx5hSQ zIJ)shRUKdT3={LeQ<;hI=2X9KngG1AcYBk{iG>;~GJh<$nfDlcjrtCFWjh~y#db*c z7n;y1s)JUve|?czhBJoD)>^{&9fF1nVAn=T_NJ)&Ur24!M9V#tQaF5N5p! zp>Bttu`&z{w2zMzO3oh;|CE6Yeyw&Aea${A>@+4gN(=iSIaE$d@GxQ0DW9+~)}%}v zr8x@PNr557QzvcgwM&WtJ!}&$0F!@czb%$nUGLoKsDH1R^#a*iy|CmP<{;N{zXd3W zD8Bo501FZcb^DpX7LudwU%3(a5fxiQ7)Xs8Kk2}UBoKWCz@Bu}*+NKX6DZz?IK7Qg~+{Qd!oll0hks)<^Up2O?sm#PYFO9_$X zWxTwk!NvF6>6a!V7CXD-wp;d7(SZ}2G%s>R?D(+CHAe8l&j*sF#lJ_{lZa}6_Le3p zMu6_33g$iAc|P<}Oy~7|`8@>%^QS7h&w(^aOXu;;>1|+68nT7ic;k6ICmvbYypZt& zISy+?*>~I-&o3YZEt!`h_LAE_v-$4^>M_CS^_Zml^rE@jUZ*Ls>+VSE=Eza2fQ-G1Sm-=qh9$F8@Y$aaWfio=_{u66;?_0}5)Dg9>C zTDWhwco7Q(vSR?W&+S>uv+zvQsJn_&N4sELYS~AS&ma*x5k$C2UQDxFXS1W)-#{qr z8G{)~bFBMjb2x6!y;Ec_RM_jC07|o4V8CwB(0bWk5aDOi^ss5ogC>zEApM-O_$!HE zSheuCkBZd$`@%~+WKB?ha&m?gEqRf6dfVIFs=?3Mf6P1by0mY~vQwTcmTA!0kMBPt z;hV1fq?HQfR!M#`LDzM?YezJ}tHsI1Rn#S!HtyMRqi;j^r5eO1H1RuWWy&o)eaHW5 zTqU+m`(`W5%DBT_DXi?Z6RA**GQ6R`_!}Jl`INuHeha>{@u*xkc5Vbfr_#z^rve&} zlagzD^;#TCP4;z>7i{XvMh~z@CF`YH`C)CnO&d_<<5kq02unkR1Ego*pA#jf#(oXI z`NwTQfZIENhkmYlFGA||>&MNlZ8P8SHHn#%(~_Z$_6~`;913xmS;D__Hk@}Un0sOB z5htWPXdHE?E-zd2;Q@0aj-DjnfPM!!HEkTHNxM!p2QhvKGCDuQ(zGB9L(^KpbD|^8 zR!MNCRp_CM8->GrpjTj<={Iu`dIfIYEl%UIwtG0l1Ag=ip6*jHF0FXtYY+3iw*(e- zes=DFofWKmwb+fDw`PzI;CUqRtIO1^yi@#W7wdI+5UO%2lVLnxQuO(Je$ibzT0ZdTN-2X-^2d?*C}Iv1?(H)C0MqD zze4ICE)&>U{*PdT{{S(?f0uSHS7s-@_@(rj|Ik~rwlzy#jUBS{5#w}Y_x$FF`<5$) zF`7gfKRD=#)0JfMtXmAoI;sPNBT`lG`kN+B?X(raOxr`pvJcolT<&p^Mw+Ay9YpHv z)c$)w&)|kM6{sEEl(wE;4W08mV{`K$DlPTJKDOUD8lp<}wXLgjlzhiOn1qD&jFbOJ z*&-!o;=B3_BRFvP*q@&hB@}&61js$`rdq=Y$7p?2|2XmI3TWyXZhwDeECM|TPDbd-um`C+B zSFPR^P1VsbCE1dosJ$qxhYH>=3uM>-5i=qhV{fduhhyDtBhF$~{~)+xeE;3t!bcE0 zfy9;OJ{=_?=Ju9!zi%?5Ic|&Cw~o^dq~mm@cH`Zv)a2xM5GQlC4}K}#&NV$s+6NVv z)g*Cuc2~D^`X19CBZ?Ppx+7MyV-^UPOg5bLZBpmUW^0Vi`vQKdU5%YdaEDYoMvv_3 zf2ZXwL~^ef`{Lg}k_;iQxRo8?zOYTMj6k*;wFv;F*z@3~LNW^qDh&psS!7vA)!0eKeGz(Eo4Jqk&tSGPei=FyLoA~~F*0pQ z-Jx;~Jr2OU>3Zpnf1-&yGNdUA+b{0*d1v9s8o(DE7zA1@=ak4Zu57-dq-#6A%M0Tgmm{)8vk{4PH z1-3R-3%y-gCmpN%UlQ7ix=;=@Cy#CPcO?ia!URispV{%0FxfG0y0`NfE~d%K7wyrW zl@bB^g1N}xO_tlhCXvy{IFp8`VguF4z$VJZcK~aq^49fT46lQC4Nd&4 z>4Rz%#In(XFZ(0samG|NlUi=hSpi84r-I1Ep!AuJiK|)Y2$Bf#-Ov29%P7g&UmNiO?{hNtx{Aob`+N z`LFGZ(sEfO77x&(T&Xy%P=J0wdC^W$T1-HJX&R+U5)$c#6Ok+Ps70Sv(2gHCwx!vzpvN9^CWe3Qb|5B?C3U`Qx z`A=AY@Y3BoC>q3gzIF}?7LgyeW7SQ!`p3>$jMPn!p6pb2P7g**2r+29*Sjf4n0L$E z-Y(d~5&XNnZ_PwhfplmR`|H!fe?@`Z{apdTgZUTOWqq)G>#`o9Hs%Q8oiIRF0vJVY zY|usS1@x~k0H2&BHB0GGi;Y@N;vjX^S~(61!8w|0F!=_7m1Y6J$Zd7)Dd(g!}kd>T1%tHb#QZ zWxsRART7}h;PW!592g#s8oS30dmH6ZN7H9h8B!42dTB8=Ai|k(nKkjDfL|!Zmb&x@ z0KBK;KK!?&$z!KR!*K+3208sEO?uF|_M)@an!*Khh!bZxpjbBhFBQu)R>;D^H|cKR zL@2y`WNSokZ#Mr1a$Ha|;rs3O7V;J=^$qL&%7C>ak${_$zVQV*VJ!Yb`2K@PXHFDA zcs#KF=38Raq{L0a2FAs23Z!gBP@mpwSMNz;yk2#?YqHX58^LjG_snAoPdX93#BIQS z>W#FYraf%Yc$nq)npGxTTK>FzZF9Ew@jKoQb`am#pXOqCiQQAB7b8HXlfpf}aEeUK z?CG#!{Tj;sP$1I@E5=*dASc6R<3c+JRrNRR{um3;$xs;kbCR=9T~Gj!>C}UVY%WH} zScg>|8zfL?4=c?iiS}<+6!T2r{BYY8_~XZ#Hhm@EX?(dumQg)MzT6n>iRmf8w1&)d zib7^O2}f4|nNFg=iV$)eCN!|BgClijNSN7XRm^4So!RSk+{dH<*l(URL`s?wR#F>q znUVuP@T|&~YBfJc z^mp5(r@!KECTQdzrj-tk7z-unUZmjiMkUFlsk$4MT*#BSPsVh!G| zC+&%_Qz`&kSq*G$+SuTwt8)KU3jhQOJ}9G=Hf#`|XAp|ba;%|pJ<(Y}^G{D3>(k%A*FNCEz;sWixBf&=fzC}q6`ODy| ztFZNz61=;;t3!*vqCm?rlv1zgJ^lMFa42=PUu^lrOb49fPULa5wO)%~TWWW~c^Ja< zv~>AfWi>+V_Ro`2c$9kGagEe0s>#= zO-$_#LV+}AH6YD-P6SAEe$UbyG)#Ljax8X=OT2o?q2!H2g-T}RQ(w05%dc&Jv$he) zNCY7fG1=7<4>72xN-N?WL2IebQ@J4S3MkEWnAeAe^p&$sEI}jL8VP^0hL&QmlR4%um(r*7$6-h& zvpCi`2R6>`fi9rfj*{~;wp5kcSeMPo?W3qG6iI}h^0Pa^$}>l#1`iKRz0m@=`27t8OCek{tn>U0^UQ-}iO6L&k3yu{x zQwrJHp3>$NKZ3>eTEUw~X#lL{i?*T|Mlzt&NAMNsCHUZ|YqRUOAO2fd;ZO<^A>Tm$ zaqy(xf?7`zP{{|iAx_f%pdF}j?57UHe!{Oml~!q8u0*bX)ggY$dQHMbGlT02S1T;R zlUMGtSj43=Fnwg$-$>@+KPc(n-6dKYHzJ+%dD>JSwn(%OHtJakU&zyR2;BiHs~%#0 zc8iO$>dCc?+E0!B96@Z_uprZ^hxM?Dm#{BC`+GL}aBg0Mr;icDP_(InP5I=0nQycZ~+X+sVaq@7X;HHU2h!7ykk zGtW5<+{N@6x$h-u#7mlVM*Ybr#*^x|?6n1i7v-!qR)OIAnA*Io%O4kInhwrkseNCV z5~QO5C|}O(enIxb<%|?KEWt;J=ku?F`)9S((^pub`K#U(Tff`~B-HtU4pPB1`}Oul z^N4z{3C($up`$`z%ZC_TIWiijQ6hH5zu{X0LRhwoQW2IuAfb3E@5E?E(Q$|!Qrz1^ zSlL1xFm&6y>3YxJ6}R5kpiH{N7k4N1GQ}B6(}$wb9CQW-zErFx1`2mDcOjVe@{jCy zh!5E!koSFtY~Zu6uhv*2BeazGQ`_8|H1J}{@Rz(VNCAVFkAA6R_#S8pU7I8w9LnPR zy;Yh>Z?U!Hr0#hqd<36;B)Yna{r5*Mt_zH(y6MC}@#?P0P|Zx=BGST)cqjcRBLKQn zyPzm^gRB+{nMkaOOeD_oX6md_fjG-VY`E*BXUKud7cHg(M5QOAJ%J8v!Q2Y)Q-AuY zXS#8+sn#-QljDsR!IS$#e2%^gFe4-cZW-8OK@N%T^XI7*pVo3wM|Ea#h{hV_eGAm?F1i<}4~JHI z0po01IW_}B*Dspnrk>s%YHo-pkUyN0Fr_feBgaQ=b{tl*FX#cG6!r|&F2@9dkVcNs zectuyvFvEdd-;4Cr+=#3R1uB_q$No;zw@exSoIR*Fh7hNsF?C!EE(2$d?!#l5_LYO zY-9ZElsl~{k)^?H|0LO|hr>HTFKgPw{UI-)!uy6u$ka%MJ)$r$jR88f&;3YRR*UA8 zY+H4Q9s0n7jAGL}_V+p|gURfP9g}xX)YFoE2%vs5P5N0;U0Z4l6I8x@o5rgS>`LpV zH4m1HO3*dp=bhU(=j9rta${gJ?h{Qi=!0O$>FjqA{;vzRWD>ts9Ky@Mt3oHOEti`> z33@3u3|I$HTwQa7ah?DqxDY{o#knmATjL$K{3gW&0>-Mfc^N+OSG=1J2k`F2#xa-% zxfZB?z?iUOrSB(UfAVsr2KXwGC?mCDjS+;+DQ$^4rNM=H6>EGQwYocs#b;D{AGr0x zDdPzxP4TY*y_R<^YQ8zG#}#b?S3n;{5C?WgG>iQnV;CdZwPlwuh}f4b`Wl~i-h9`26CORe&EwcZMF5{sp#g@V{c;qWI}AN`%7(Kg` zJlOF4WaGAXS72A021Lqj@9fRBk$;4(KWjzG3G~@9QUW!UUTKHE*`mZn5pKpz$R25;Jy53@B=z7k?zQO1+19+MNRfFO{TGHhpc|rHO=~qXV(o;^y zD|eb<87^RU>C5xY*ckqZtDdg8oEQrKd+ThD1;68@4<~;|u0@IBp=19saOEKFs6L@> z5e_=_xu4k4IAs8BQ!?IZI;djm`GKFXQOwu6!_UBg>)_{GgcwUkkK9R}nwjaCI3+xN zmaRJ3`fB9gpsbI>siGxUb=)*&LPue7Ap@k+4o(6Ju%gSiNf?>6V37=tV&8>IM_Nbk4KiiY?r;>o~CJKR6;Y#hPWGhr(SrJ#Imt9n3jJCW2{4T1W3B3o;0 zz8QUDdH4wS6wXUmn*+^kGS?H(^OEhPB)`ViEI2$3*3MkOl^on}) z&vbNUlNN49uLWB71>o$RW3e+3 z0IU4WQ~>DyoiG!&a9-Gg3YGK~sTQfw(82~$%T5IShCbuFJd1nqB{j7|SfMVVdx^-^ z)yAiMrFr8n*I(i4Ud7G+d(@Z@fB{tFLN*yfN|vXAqB4cLiTmUZYmG1Oq`c>#qjG1E(@az2^vGGvL-T*(#zrP(jlda1K0Lf0-Yifk?8?U&sVzI zG_~ia%-7N@Y^!6j0*gK1LL258WIU`Md^kH(gc;wjTk;0M6^**inYfeXE8gxChpyvw z(z-zVp=_E11_l=CgI5Dm5kD)YOcAN)`&aA>cY&sccB!}uea-ECM;DKARZitWwfk)C zgAPc<#8mhN?;K%>oq2Gh4Zb|Oba20(>$}2f8Mmxc2VQ#rhs&^t+9Gp8AU>v+L_{&S zqjh+LwP2CB3gi~^fETvWG6Ex6nr1xjAKX3H$y^cvXA%=)7FOXkD2m_Fij%()JT$>ykU;m-Z`M0pU_N@ca(c@Q z?p)ze9U@2>d5ccTX1lkJz{+(T$Y%EPedS1=gziR78{W+)k2oYXRxb%(vTCW6uV#VOW0VZs*lA}OLk_fmshqDrsdIz zpaC=clEbe9^STw%6Ild@h#bM>>#l>)J!?J0gf1U15!Vyz4A35sV1PoM>F-9Ms!>dM z&mPvlkQ;CxF#sLV29=ta`vjX)k9#%uw}jPknRERxuXCSyGa){Hpl$zrQ!aA?p$7!V z+Rh0W6RKqK-ZVdn-QPxRW%dM5SunI##mvlDbV`sqi$aT=pZ@8c*!Qe10FiX)rCFUh z%+X>5(oG1fNa|R85aY`{V;2pBnu#54rp%e+2%)u(G1! zLOOYSL;t&vJ-lMmk0VUMV<8{obf#VEVERkb(ek6`wvsZdXe|z(5F{qAnGmIIu%o^D z93ZuD{Yj{kA-^8%=b}*A2x!&PjvPJDneeQumh%z)Oa$r;(eJ%{t`Y+7Wr?}R+eO!i z_AgFL3Lm>eRCK+;R(pjf-feT*Ud>E+?sSz==VkSW^E_TWk?`NuHTRayTFMW-MVoYC zmq)fGk_-XGQwsYy>*)6Tl)pmd;Zw2kTJyR+_LC!Fc2yn>@6KeX@eVf9fcS_@KlUag zhs9bb+WQ|E@4Mdp_=v~;#!U>e;ncbcvD~0Z_#M&qfr6~(T||D&>vBso*g462R8D;< z6BCw%!VJbFlSu?^hwX<}zfb)xLrI`++Yd%RSiD=_iI+22yvO0FLMQY0a85r*EbA-1 zO`Yu-nz%d?ScCdof9kl{K{OJ*Apk~ICS96f~weeU`0UUuUBcC(74 z#Rv97L;m*-b*eu&IpeTHay`(tj$Z5K#wRT32a-A3d(8{rPxj!sPp)-%?vujaf%qt^ z4t(0X(jIBcu$S)FF%p+?_7i1n$a#D@_+gbMuhgLgYo#|rys5jh4)4qFrOIFyqaQ}* z^ZYTvbw+~Ubs&cgE_LZwK`c!_5X~pz{63}Q_gLASf79voV~Fsus#>`Aa&(HB9Cs|A zNA4iln8&ye5c%mV!hY0YoR8wzaT3^Tz3dU6wvmMmi)sW-V*Ha?bI(yU=(0W8uNZ_Z z!W=|(R3~;Q0(8_Mqtg2Zdx2RYr^eL9f~uj_v&OPhoybEJtfVpvpDF#(k9H^2&7)S2W9qF}1r=4-DxiOc+&&+aT>-L-1{mDr8EDFYD- z-X;f&WNJFtX&IPCxi7wucj~#O@VjeO8;i$)%V`+> zORiUbY>J7**6_&+6UO%A94zBxX!q1vfK^FKeDa*!e4=D?IFh9r!y~L`_s;p&dt(zT zVg}7*(?YVXKAhb#I_iwJxYCGtbMngGk)h>>vzHNJR1q{$2mUS2Pi9?(470pl)=4bM z>Afb3YWRM1r$}X(Rh}Hfec|mAH{b1DAF{oAh<fh`$s!d&;2C&IYNKiI?`Uzv5e@WqroSm|=Krtav6ju9r8meTdk^S0+wIQirgb7nl0 z$&E2A&WWAoK%OArIp6t2l)0%5ahSEFtDi=g&RGY&xkP!UkNKDQvGEFxC?OEjYuTJKbClA$ z=_m||G%IN=O_qt0e?k75(Uadn;G;q$dB}oo=c+NazP|kR0CuV?MHVH`f{X+tlE{C_ zsdR~@7{vwaNc91e;;PtbcS%Zf`0sv}rbK7@mKP=iz(tMfkaADVywMeNsF9V+eU0)P z@2Q0ywQZhEE@ihz80%;Z}&1`wS={<+yh9(MGp)ngK8qO|( zL8?5NUS6@3Z;3NHKQFCE!=jBejGgNj1AMq41N}G_yDL*ZiL{f>%@Vd12L#Y6T&Uu4 zSUp@M>meXZ@f^h(I(;6za-VIY&vOBL=OKv7`QSbl4}&s#h@obr*#ja<^v}v5UM(%L zRL)SC@xc7MkD^p$C5Jsb+JlpzrR9}ZTkEfa?#D4<8S}HZ!inc+8c^?mgSCA`F|z2u za5y!6%_}r{97^G>6C5IXP~l7un%SMGs+0+v>lcmuAfSg4`=(>-3gWzvz2+H1>~AQ`m$d7Qib0VAuWoSEcCji2 zWeEM%Ldo^Rpw$t}50%Ahu*=O+MZ5YVMt#);2Pp9#gml>nwC9p^eA(cRG62`{!2NM8 z-zREW#pg60>RCE#U;CV5$rR(!#jj%*`@4aX%zdb9W6XpPArT8Q+Yl#Ut#Iha=UKq# z*NGF$2zX;Bi*Td97v!EqaQtP*6tjHeSA{pxA**Ns5%6R_W-IS6VHMofeMH;-wA_nP z&hpE;F>5A$JQq}eK}#YzOMQ~1N}blxeZx4B z=U3=$*3V+(C*GC}rjLa7fab$Ua9)~@8#KL}B%a7%U)_KwPEHF8;32vg#)DdC{3ofXUEPvVU+guh!V@Pk9gPfujMl^2rx`4t>f4*l>BB0;VmPFy!e0{`({-&n(;wyF zh*3tk-oGPdAKg)Zt>M=Yh1|L^js2;AyudB&AjMPb%qHnrNX+@Itn=oth?v&>7LN}4&VnZsE#h&&0rJ9>6by|Mb5Gs^nl{d1S5?)Hn1 zY&4i0W5iMJ1oy0HpL6u^^NWW(ilxXK=?*M5zEXV$gCg%Rt(~5Jv;$*|LO0qi;1N}T zn?Ri^!E9=Y!G>~QRJ3W@oVj1SxGyb=Zs>HI~TKDv(@NJLKJY#*VLs6%yVw) zJOOmb`{5M^LfxoMHO<&|I@dmuupSt_f!H|to&8cj6R%#> z`bMQX%V$pOuBPivd?!ZuX5(w!4Gp#hT}zvz$CS!IyYYJ&86U|9^ZKO2wA`>6ucRCn zoY$_7SejJ3cigG3x|pp7kFheq!7PeJM;YeFZ|4;IVbP z5bx{@n%fU z`mXP6OyQhQt|I2wWMwIOYim_oA5Ulu%l!yqC6a7TIg-dXgDhvH-Osrepj>wcm#Ta! z;152AGRE$8&102~rdQmpr19-8=43g$ghY0vSCo$y85`u|tS=kgsDYs7iG3HX)!Pbe zPH)OA%$y&r@Dx8JF&9g%{pbTP>c3xf(`tNG0Im5j13ND4d9t#|sW#sGUnF*UuAe%2V>m?OJy z?l%Ttf(Xq85yB+t!=i(jjJl4AU8|Nfj{C~stB>uifkbcj-B^uqmp(y-)uw*(eNy9t zN+lmJuw^EZHyM|A*b29=CU;q9Z!bUku_Rs*qaVxNYFvfBf+zWL2*NWv?&oJqAz0>{ z9>vY5JCD<-1Ga)qY_Lw9)tmBvGNViHdfFCSc=T$qfXi{W^7qrJ>KT>bHtj~glw&FjeHN8b`lPC_yy&rw&YYt%!s;Pa+yfUPEk&4&eIcou)2?}022`$Z)3 zEFv5kd|R$`VOu>rjpIjutNXxri8ExlWoMq)Rx&bQ@P=sK(I=b<#i3Ueh|7BTSjD+| zjhjGI)LvP5V;WhS0K5OcOGm(;;AvexTF2GZo#|KS{388f6{-~{ks6RSNJJ!Y<^5!6 z8QJUU^6|e>N}6W5Rv{(9D|t04qERQB4(3ogPI0 zZkw1VQRVs-09{2s3~n@6dAiRdm3c5X4oK>RGllne*T*_)ilWNQCxeR|(19Hr zTvBY{4P^Y5Z{OgPi~Hy^J386;pzm3Da~*u^Ps=O$M>!!>;jw!3w-y`kScEL3A7@v; zPhkQxiw<5xvm5$VW9;C4M#bfm0JBTlkCTP0*($CTXFIpQ|nk$RC zW0GVlJ@88{-|Uc7$Xw3@^4CsPd_g=gKafH)BU738&(O}-Snd4M-j+dLQYpdJq9#C~ ze5)9*N7y)5>(ef&-JIQqbF^8kY2l zG|F-R&^JlYIYz@HdKY)?d2OIK?YOI8Pci)R(aUo4*)c<_U@ZLl4QKLV;q5zN`8l#q zM6eGsX&lpQ=cqlV zTnY|xk>0*EOP}wkZulArr9Th$amRekySQKZN;XT#c^;Ly`{*z&gjLquJQ-<#D|p_b z3gX4qy$6q~sz(L2>JV$b%z2lkgb({PvLG6RH;x%Xf7Ur89e#04El`h7`pmPgffp3{Y@C=n3xkNiiPFD`sjAl5mbV)x5Z;+O4O!n)gbIeLx}$Ec+|> z*fR%@CTB6tUNbz?+WW1#^adXnoa|rF^v(OKA*ya6hNm6nY#XP{AxO-~MV=Q_gy)G_ zc>IVOLz@1H3dk6{Lf8TF+4U8#F$F0Gn_4T;A@MVoqs1P*Sd^@uaMU4=vYbckndo}w zcOLQ`kas|W#-=gw<%!asgn{ObR%Q=^AKf*z+RFNk4H0#p?XE!+bb89u=}-IJ{Sf7t z166(qBPax}MlUgZXUaKFV{**|AJm-O{8PA+(EY+~GjpoT{z1r#6VfN^ujqzn3psY` zKdp=#!+}l!QCpb!Y6r{9>sU#58})v3vz!-=4^pr{>ltBlGka}8rV@w}set%4^*e0E*s5R%;Gs|Se9rBi(DC&Q3_)sZnlC z5qR9i{!C}^{pHaK``rr5@vP!vyu4~var|Nhug>Eb@3YKGneWJjY3!Z}4+K5noG(nK zQ>^TXHCLGA0<)U!@|B5{3SNF-(vJS%O^*!LIa41O zj!@MmomdNgqp6BBttN>VaS}BO#1E#P^r9$A@ti7bY72H zt>ZfS8Zwe(b)kaLBfU!MzK(jm1WMCMDCrycU(`A8rPaBw;dzQjaK8`W+0eYm7GVg; zH*8yUq1IB;pA!RfpV7`;MG-?t?3Bh?M)9-yqmS_eb^PQu)4NJfdC?pvG`UQYinFh`1e1ygtgP}f zQpJt!Ct|Og0?pb3wsttWHK}3@la4D~#san-VX<32F=mZ>b?;opr^~xx&v#sP3oU#K zuf!c$A^z_qthD!z1J^xIMw#6PpXcs`Iz99@=!~0xx3awPEXJ&-By1dkRzF{#+x|9d zU%aS6t={ljWP4Fe^~L;mAV}J*6R^=g?w}Iz2|CvQ7BV%V!UH@y%E2qlsm{>1-0*SIum{2jV;Eu0GJ< zl`(C3*0!j{&pi1S4#S8M-QgOr1Z(xd=$4!HkMPH?u-Snln_9ozyCtcZAS~<~`dJozM~L%L z-JaFA_Pm%a$=iYW>ZJEUj3x1tVmq(z=AHC4dz#Kz*2Wj!}kR7J(PC-qdy{e;T` z|4#rw2*3A$^f|mn3wBf&DN-VcjVTKZT|F>Qspig=)~$nHuZLc*hjH}iZ7&?q-kflu z50kqONNZjIwxW2kyj9U-^{x;;Qn@ZYDu=*r5d|i(FVHN~9 zPSr=X@{Y>#Oa48A)?(hxA4|=ix`0 z`{8pAp;uRV?A62e(-&UoyX-hjD3GID7%2@!N0aN&?zJqp0jW@~^8XJmg^_Ebo|`#d z?bi>WWWzXGbYnmeAoN(_JB(=l_)zP()%#oJF>Sw$?`_BR%2jW_8r6^X=dOkJQulLS zSzns%=L^(9tLmN)s=lMU`^=bFy)1<81|b|Wp4W%b<37c!BICtxh2FM@mx}LxjdMw( z^8)IeqpHdzhW?;m=fvroIou*b3;obJ1LaXyRs%f2ER<9L6TL=EU#6ijgcA`FeG6YC zgsXePQ+U|*pw~Esi?pH|8Yw`h(?O@}f*=SOUVnbm<07Z-;h*S-&a_dO`<%d@r5on0 zM!qY9lFt&r+mn>ue;^QI)s^`vUf|%^l!EyM4nBM}ySRRVr z+&UV!0r~Y2H&<7N>srv% zF>SYu?{CNT%2jv2>ef%Ka<$N2>VD2E>r1Qs$p3pCw5ZYfpze2YqY$3&i5@X{5JIpX#&Q~&C4qWINT)8_X)zBwYGXYvxYZp_AUi`i*-!$v>bQHQbH?Yg%dZriMu3c<9 zbTF!hqBpmWX4-&;X6m__wuSZR(h|S;lv^r;n}Gj5fvlLt%grWS1_QsDnE<9Bb>c#oV8qn^4eswA5YNdPuN5!O1sLp$I1Jw5Hn53tqX1!K zEkEbHsyyk7ap(oho8FgNuLCloJ5~sS5#EgeZtrh!x;~DPL4Cy?m0vHWVHEVR&28iO z`~nweN7z}O$LeiyxOn?R#9uFFU=(`bTt33p-7PNn=V8_f7+ko`KeFgeowqskJ-!2r zAfRv3kE@4!TpurEbg=i$aC9I)w76eCfIgj3H5469uA|Km-c&s|bG+L8ks`DX-`^da z1n&@fxWVa~8wSCU@8x`R3}hsZJSMq?{CMA%2j*6 z5_RgQR=HYgFZDj>P2L^-|EzMh%yF)l+L^sVa3>eX)G1t7&-O;tq z3w6&?ns-OHqg!vs^7#{9b0RV?ckoa4Yup{(P%&~#d|bwGR~Nc;Rd+|PdEQZB2qz*U z>ZmUg!mH+l507Cbn1n1nVQtue(bLze3#uG$XZz4MbAwc91+f@ib6uOi}SOYjU8 zj=f<7-jxd^iWlxmb)C1ntsKJsDU1}K+iji2LFfvz{R3}8c=0A%>Y?a`1J}el+702& z)N?b(tG)V>qI;OO^yk~3AfS7|j^F+eGK$tQK>iuX`*Uy%bmz;e>w|Ooz7XUZ9Mg8n zm`Ht0JFZ)<+WYldtA6BqpRX3$OTEu|)6WV2pXxyK_sC0(>4frQAJv*TA7pEW@WL~> zdkfFxo;|HSBt4p+>t24^0qUPi8k`rzn&+q*Wl}N-?fKvw)R*efI<@ikIpI|y9LVB! zt{;M+dQN!V^NzZ18N!K(h&t*258?E|n!NC)k5{-Wy0Ok((TP6Bzxg@O-vwU%C^q_X z7{ZB&h~BL;A-vFYFtQbEJU5Nr>EFCK{|=<5RSXIJSg7tHC;D*z;^$mJ^3V>wX$#SR qW}p5gIowVgO6PNia3Uh2_WcKZ>0|?MI(SI{0000ej%@gfq`{|{$;+0 zgZ`xT67voQ#v=@6d6_p}nY&pCeR7?yur_IHGasW9P~WWJIkr40DXDy=u>AXOsu;=h zhj#B(qtkVB@y-{0b?m>fwsv)P?%&*0;6JOte=%q1y}#2`u3~DnKA2{DF5xlC9wPr4@F2;)a?3_r0Dp1^kcCe_sHaj7EPAD>x>WXk1@)b1l5X8XnBWL|xCDUEFvcM`^G)INFg=vqSL` zvPAVhps|18K@fqueWo0gD`4m~$^#2;_WEx18X*L+yI!=+iQC$2BN0}>RLWgI`{NYlf)5?#Xa4eJFG2ORRvm{*Yxi-_mhU@6kgpY3n7Crg}Uj|vx zD(Zw-TS=c94=z9RZIzhe%hpJ*F~Z_?@WpB|3Ap_!Oeq%NnT`}S-HuH8Q&#(#M}=km z8uyq|y`f_YLmWa%=j9h^`xD5g9R$yh3PQ`Ue$>xNB{s%kenwi!zKVeb3b{Sy4|}tK z;AYM)B6+bO9;#tj1_g4d?6scdGnl^;E;2ofDT98L&lbY^VSm5e$F*aWD@a3JV1guI z#@1m@GIg`zsT*PRsh3`UWP5~irdZ&YIRwD<3T0LX^KP$lpOZ8yn_Ai)5^r=l;nHzh zT-hG-HE8gOn#}M#_J*dz=zlNV&r{lZ1Csf4N5p@b<~CbI=~wcBgb_0k|7c=FYN;?! zNz@w>V*61rD7%=u+UbHJ8`B&m_d$o76(N3L_2lFM#xc^)?S|$(P~k>S?9gREM9SkN zjri&o%ygA>axJ-N(~73y`5n(f%vUZ>EIIynw%f`%mnJh1FJ1-=oPeQjv^=@aJ3Hix zo8xks>b-^2N362ya83`-tA}Q|WMO3!(<%6P#d!v?5!T6uxff6A6YFBC=1x;P zO8^_AmBAZv`VNatR?g!aF= zwwbzfLv18>k}!At3$LzpZnDZov|i3U6WYFNK6xS}!O3_s_&`kPz4`e*){!6xV8x}o zHs*6wN&>Ta7PV4OLg$+KEGT5i%@f79^I&M5R*8zf@*^(BNc~t|Ues9)02~Au`EYQ} z-jvJ@6AUvpddomHa7N)~f1m*YFif)~F@+jKaCC_9J!^@~qsf)v?gyhkci4!J*ltPqoyAO7*y$e# z{yeX@uYr>gf4DjKpRGZd?T??m-EJFx1arhNR2pVx_aV|8b4{%f#iVV#Zgw;39_j3Y zwbe%v&hNq%T=Je{PinvoE((ffbZ=(ANa(ekAbWyRmkp#5S=9gm5hhGsBDE(4HUG z&}6o7Bd)HGF+kWOjtv)D$kX#Ey;tG95`J%%O3hCKsgq67YH|`X`je1ac!!7TYRr2b zZydvAn19B(9;B8c;}$E`KNpQZNcZ54Qr`C#rJoVVO&JPdqS@2*u0rH1_;s(I3G3bL+l+ux4%plHtPCB8 zi$|Y43-0{5CZ+8Oe;cp?Vet>2D60m>A;4EhXPH;Y`QCv{&f_Ht^Pt<*w;7)AdD0I7 zVmXi9ep!M;(k7=0NMPhbA=N2mI))nF5uTn4WkcEwZ~(K!Mw_IZZoPv}j8B+z!GtK68vX z?qFHsAfcc(&eg*{=QARzNjbj^sVEVFmj z-9YWu8D~_SBvUm(``|!SGxeJB#XZ?cn7)_m4iAio2p+s013nLqMBZSBZdpa*)o{ZK ztq4wtq?sr0yn4BPLpB(9KPP5PKBN6iqJrYX2ZJ?*isMeIo(i*>N!w-K3AF&KS?uMu z)w{$lyMznZU_1MW80*Una)vR5hy$@0f4xTVh#`2^wY<;MnLzp&IB==r#CnHS6+WH) z`iZzC3XY<}9d%#k9GsG$3Kd_^wx$HP8ylM`U!_E32e<>7jJzahWMjmq-9wPG!wx!( zpk>JSYr5X$gCCWCfx8r;&-eR8W_?T-=In)p1r3z_gZ+j`4j>zhDl;Azg5E;y>0Nu$ zloPe^OThE1O~XuO_MeqQxGGFGE1_qTg{=VEz?qnCt^VHBMyhD$9`JB6tLH^b2hG5l z9(d-xR|EU!x`Zolm4|IHZnm$)%0|jPI9IOPfblli&ulVbLbPUAO(V-V#z0A3v>(6N zpE_&Rf*|ViVm!=`a6F{@yTZQwQklDV9A}B*RcdbDq`2h*wo~q@3eMr4S+BgU4~D%e z(YA{@Xk1Meh?^=vOJ>?`^9jqxEHx@nT2Gm3kU*WnIb@VG%wp#~GHxs+$L^VL)yGUT zf*-v03voo%#MK`1_X-`HSOY4u%ihvNW1i|>P;qQs^Z7`)!f)Syh#572h|MZJ@LZ>I zwkt~@UIiMfZxAs{Z8j$}9l7pWlnkkpO(St0#rd!7R!`J#(R8$XD=81RzQ~WtMvmm7 zo(9i`PXvzINwExKIO!eCPmDh~+itm)aU(G94VydX0g_1%aAg0ub{dKI5%kKjjJWmN z#dBd>Jp_NOb%Kz>d8Mro<9f(&Rg>M=qU7WBNx3_`ZZt!QxDSuZ99dcdd5llf+E0-J zgK_n9PSI{O-MLp5(?$Rm$3a#xTs6ziur@t1$q=DoMvx&7mN3h!WZ#&ErDKSYV&!H4 z+Z5QVFpfd3KK_U5T*`~IHPR@Yv*Nr2s*sN9IH`=J$^xCetqTD^;&S`6-3`|t9TmHei|UbJ+u^u7n||X{n;v>pB~)8uUG*AHdAgKLvx*X3py#tIG_P1p}Sx$~VorOPFB1~|*3 zG{mrvce2|!w%HuVXefb*qLbWk-O{*-oekq7d%wlXhW?DE*d6|L9XeeGrRTkO!^&G< z5_M-r;uoLLIc}cmy=3$67X#^RU!%C3@(O?!meY@<_V}}gxK;Wzlvl>XbZ6c1dTLIY zL+j)N2%N{Hz8A-A6wY%5&T6iSPrhe6L#}#&DB#VIBgCE|(v#1W2WQlMi>c)Ka+(6c zyOxZ;HAxV?Qspjo`)l}5#GQI#tIIXtK>*3~xy>l@qp;dZ;&(;PCCYb78t3PB-&-3P z?re&D?$%K!8Iw%?s87b4m#V_ibF6m&K-%eWb}bC-Js29Xd46{0K{FKR$;DTwG-M$~ zbP>9N;rVrJcql8sZj6%cE^Ev4 zm4lg+>C+faQg;G=cLTa?CpVu-I*eO>zOtk`IXqe^Ox|&wOVxPwZJYRkzsXi{xaBuMA|r zwJ~8jk{(N8t7ATt`_MLvXvKDzvVso)B6W982kj7|nXF|JVS4%13tOB-!)Hi6ddRei zz>(&tSlPpr4-RXH66K0R511;*?RsIVwndmBE^J8%41E-nHK0D_;~1#Dr*c`{!;p7O z5@?D?pIPRxsEaUrzwtJ0v`lFG{&86tTBYf9MQw}y?^Xk3`n<2qJ%Nh!%%!J{uYJT( z9<$-RH=xjz49Ib1%2Y}<{SA}Xd6f%aCay;Ik%BN~m!Np8c^`j;f$=((GUfA;v&dI| zS;}irLde<0URmFlyyaOXz70lQC$5~G&Gkkp6}EzMy*b27Ll{gDpueXC8|pIw^+xQ+ zx_bZzsH0-+s^u=))gnBhJ;kVo6ExQKPCoop+IG{uIumtafshHfv>;w7ynTM%cQW5{ z6>myr<(tpo&khcpzC}l}z|u_eGW}=b6ZC|g1I3#Li?oYU(Kd)2#d|{OJg1qEz7l~l zU|TyX5D*{duZZ|55zTij(&#O$ zgcvGmW&w45SZBd7KY_g1;MvfaYrl7OH8Y1hCd!%*H|GFO$8P8wYOF&Yc~*u~Fb*ws z1b~93t#x?1-H~Q*X`6BK@Z^fdN?zPu++}QEJG}ae7#*9a6>`D9ALVuVIMVP6Ra!Mq zxuTw=#2DTKJ(7qmwt_bgExp2&c*oE!tOCRoa^dG!R`X0vP%+hfpwAS%S%YLtHemkQ z9Oa&ZI2G~IUTZlk+KC&{)CK9Jtz&Emwfcus^+2P}oB zYWj^uP)lWW9?xvKo}`<4T#Ch-A}mI}t-kzX_C_zR!|lfz6{39F5wS*GiDAxQp*wPH zT8VP!`ooGf5FR-Z@tL|2bZ8QVYdkUEi+VS*$CZ`YmVdJ~J8iaV>4@)C;u|~$KE2@B zreF00M0hr5HvuDwEq|@?*$Y!17NC&=2wzn1Rd4qi8B)VHa5l_o{iP`vF3T*-$Fr$R zb_9BVKl{uyB1nK9&PP6P^CC4m5r^sT)z!-FiTy-Om=KjNu46n`h>8I#I4+3`4`re! zzpeX;0k9x>yxtvU^ke60?rj9|x2tXWUP&42i{33KOHyO=mHkg2W*hL2xaPdNilfPC z>97319E`x>5B4QrK3evE|K(u*adlcOij>pHQ;GsEO$bw|TEna6@cD?fSviFY$ov^o zO2WK&hlfnM&l_1SO}}9X-_?T1*aG_ImD-E5PD>x~VQn^Y;k~f(H9zZ7m7E%LexkC! zU>eqzXS!%}*EwbHKzCz{xoJ|+=CwjxeVSKFSN)B(xTSFTSDi(LOE;v97N&~^Pl?jm z#_Bb1&$SBQ^D)6fTy1}B1GAm8iNn?>N!KV7Hvczv^P%aT76ZRz1Sh@6Z!= zVmU0=iO`s3P;2`_%*v%^qSrl?j5ZaK%WoO#KL|Vk3RERb^Ckz`WK0LFKMj2j2f(JJ zgrD=zxgA6XLP?|(vpI}|F79+?ZZ}pj;Eq>LneA2>l5~i}OgK3^-(4mb1akmo%Am(a z9uhR4=17cJ(vVFfdp{Yaf}Ci4qir+3jSp;t<}dGhXAJeARea&ru+fh>Kx*LJc-iAU z^Ne@sxsIKfY)c2#b7*&cUp;xE@f%ecpF4r&shugqG7Bm@1118bfyWZmdNaSn2jbaA zUywvZ$5pX(+&;M4;rznPAPo6PmUu&E{6N0cvFA71zl^T+FaLFRvrxr|It{fubDVev zL#jkU3r0ea#J+0G``>RA*1Mro<3nR}*L|Z4Esx{;%{bbSQk%R<3u)&sIYG@SsbfsY z+}229P+DhC%8dGmATFto2*7Jd!wg59zTqQ*Xew5+v$v7_mmG?-cS_-`4<&tuM%3kG zW>2%b_Q@aJkYFwNVFpfH-B0@JXnFzoQr)tVjjHT7C&tN>zNNk3*Kv8x9-dx<-x;`2 z{h5qy=bHJG?+n%ju3;Fz-;KiJoqV9_RQ$J}WEX-mtpPONLF7TJX5g6E)syo8Kbli| z6?IFwed->>S#0DUfg%~cj??mD-d!I8x~-|(bAlg@_RTW#s0{p;_X7>_wp|X_*0eNH z#u~R`+(fsL^BVVU>|F&77ImebfVO#Z?`P3Q(mzfMsJyo`uyEJCT3AXN;Gg_V3&}RW z)$@8o***Y24cF`<_rS$*=Cde+p=i>2xJ-ukr`Jr*uMK0s0jC#Rf_1-cP7zB?4>~k? zcg6iO(OD&`=yU2KJMqG`DT12=8hH50+d+!Y-W}JNUxd4MnM`-jkT!ohI`35@qpuc+ zkk!b+Mm^cS1t7cP=r1d8CvgVC926sH-?jPj!)0BJq~e*+K#1qB*6N8s-7TTsIr};> z;~Z^Ca3Fb0q<%NH!E9Afd%KC001p4LmW4*kZ{1zpjdiOs?DUnf1 zvid7+!=y;Sx)xfLG(wPZpM*Y?=G$6Ov_-J|OaX)uF-3@1!K5w>u3jnLB+2Rxtv?P_ zPw)JE7ZT`N#_Rk1(VkUi9l{99Jj*Jvk67;NRZrGnu|dr#gKIx9V^^SV*j<$?ihX7R z!=ehwF@?OLbcN2YjdSWf%oi3=@XzW^Vdd6Xyv|V@k)(jO{+s$(>dy{Ob%Sa++DNw! z3`b;9?ntUo1{4^a)9J-b^L=Ec+n)5-3IGbeI_V$cj_4Y-c{V_1uS>R)_E7LsELLvX z^@%r1Pw=b8Pr(OssSiJhP$nXVE2K3RYzPJzzG$9b^SoAy{x%V0{r>er!>nPt4oqshB*m%2-MB5{4YEES^Mg2Mw-p939YuZ*hh! z7HTv5eM)wyJhQ-;DHi#F&ntm@YJLx@VsNJ(aB;f$dH<^X4Y*1&=Y61oq9bI+=oE!R z^#s)2QRgbrabnYKl^yJBwV>nKLtJe8hm9)%&59-)dnqwRg zjaRpbI1u^Nz_H%Hr^~ro)V72yr1o1_yxQ40zky)n7g{x3L<9EVj#^s&e7fO))6}jU zzusxUz{XmfctMsK3OVMsFP(tbCY2LXZ%@teOBHH00?kR*0!96n(TkgfPmGI`(WmJu(Xbs4L&F)0@Q|s|;iX{+d1)FX<|F==V7z^xT(}cXq}@JCa{W zLnx|?jrAEEjawX3ZokdxGT-`TH~&~8)WQD|$6XQ7!z$%u^%L5iqZVhqesdDy2GPHJ zLgrL;bLD)lV~S2fS*H)BpOo*FUsh8bUc-%g5T270E09}elw6fyhW~51y=nyn>Z^j% z1G*h9rj;?9hjB#ir->J19!PEVC;AwyFPeJ7LRp(lyI20ms>YF^NT^AqH7Hmj!xPr|F!d2|J^%n2g3sfxU|6K$r%zR zay4ZX=RLw*@ywF+Rs@BSG68@IL30^T{Kj)+I3>7`Hj!q@5>#7wWZqtXeZ5OP3RY8~UswO3B6oZTabqpnVn(=_=2=y5svt zCncm5k|%0`{^!|E$y)tBdOL{Ekz#Fa`aIyGe2ZVrhGc=qe(0@_3-Myh=z*ccRGlM3 zgAVZo1E3D=_wGjx(n)ztt*j;2&Y^F$Q8mFbOhrB|&$N8N}MpHkbKHc>n=5eBCe0(B1*k#Os00o`0+ z4JCV?=ph4yOBri%mE`l57N@MBZJHNz?Yir9%6Us;Ba_TgU(h4`M~G+9X*VNAzXkDM z1rE))z9shekNzwrh!a_W3r{2lT?SLN5{HMnq)EqBx?0fXnf~=R|8Lgn{wh8F9~UEU zi5WvkWbggHAn)Ek`tvXJZQM5!?ti|x_kZ^bnvh8Y`JVh2i|4$@bx@sBh?F89Gcm-L z%l1f2CxY^?HI6;v%T@A{dgVJBy@`h48~?76M!tCGqvseCY@8L0{}*}IBn-r3MkXqG z|B#g{<0baoH<&X$9@0N#jR9IRLktg~h zv*cP*{+sLr1|RXnN(AAQN@e~f;gbUe%%{?qqBn~#w(Dux0^VZiRu;f=KXkmRf&)#l zDkw~cG&&^OD4niix-&DBHC3&yTqo4oSM16i*TmJ7RA>uuWj&5>URYy7{@@UT)kBKWJ z^(={hwSwTCuY->N?gem|_Ivr+h1H1uWDA z1-(=q0_Fk@aV?heynNQATZE8)#l`a- zjrCuc=S$`P$PwIsB`bVfBMy=dii-}21%?h6apZPRg|a8u7Z59XBC!AphQZ4+0g2ctlVx1><()-+FWuaIDTKWiHem+D9I}vw3<_ zuAJq|pg#*RN75?mpWK_y3 zoLeO*8zzwcg@-lq4sI8d4E_sOrsrk*Vm@XhLVYAQJcUw_(r-FZ=Ac9+SswS9N%xQ2X6!tp?Vq$0k<&sqST^yL4r zga4Vf2~^-l)l{~QwEno z1&|SJU|-CKiR$|nYv&U!rzmMjOcTzfsdHVaQl!3Lc>H{-g?_HzkeVShbG_le-h{M{ zh_i$a&{b8r_Vo`la;^y?xBym@(FrwdP6C9;$Q^8>@g>*br$-uh1_o$REF=0dJ7udg z>OM4TRMD6O^M2tqh0|7{UL$78?+q)^iLb^?&OLil39~_Ksh>_S z90#j7H9=oWU3b-fX$Y4_yzPjvH!-S{0nMrGQJS9|gy_y^28iyv#o6f&I?iS?r>8QXPg} zU4Jno(pKB6B$q4vI7^>Ug^HpDqEqGQ4}nZa@PIQKFI)34C%vUM(9s^J{|zNGI?*^P z#E={$c!en*5Rvm*$5(E*_~^=e`E)*a=sGM(9Ln?fS@Z~9m)IOm_k-%Q$0Jdh^@iX{ zz-}uSAmmo&)0`Dxz^m1X20*JubuH`yAxM@mQ~u_EC0XCEI$%1m_QLHEPF`eP z<;Dw7-a9#`lL0t&!lpd27H6+1^{dxhePaEMXNMcrK+T3fSm*SIuR+cSP^e>In~BN7rsEiRgn+vuEo z&c9JObG9+|dyd>iOBNnFa2dH_;q|$YHW*>&;HGv$s8yx>fZi`_W)I3x4D9w6HK9ce zJ$;gm`hvGCx4WTS^g;F^fT_bC%bxtHq4~}H54SDH@&S!&W?q{CibR$9l-7Wail{2` zIaV*{*tf3lH)j_B=mchXD}>i}&n8>@ncdTyUva6bG8AzYzj*kv$(7b-?=w^f7_d5s zDewir?B>bm+`ZFl9PP=A=HEk(F9_}tco0nPYe1G&bOWVA;l~STt_X2Wg8*3d)3=s} zT8hW8>Wfb6&Qaf|I`?7D;)G?lVJ3`QrvU-2nVLrk?c2Z9Q}D<4iI37J6?gkx7>*#v zqNjUiZQ23Tb^=`~fMuiX9gg;9L)Y~6KNJW_^QQuxphCU$xsJ$oV~pg0g7a0Dd$XGNo{ z-8qBJ2kV$GR37Z$%%mKEwhAQMf04prrF25$af1~acPDL#lw5y8HK-$-dvr>6GJr-? z1e(~wsiQ+79aLasRIO*x*TPIQ#aEMJC1QA!CW`ysA0?fV6a4J)S0HMIb{oeq;vB>% z-rW$5M~@`JQUkTviYM^HWmG*w- zJyYb2iz2a&_$-GxW8fmpl}%}Zancqwzq194M8Hi)`|oP~b1{PKkigq-pIxp!FKx7b zzFln2?s_}GmnPWu>|0)*qfdy^1UGBLdqZHf=u*S71=GeXbC{xPJNXhagCA$q;>Cq? zR{OWmls-3m=G$=tUku@N9^~ztjq1)JEny*kJluy9-43JoAG^RZKDQ~H+{DECQ1yaO zE*e_4brW>~?~Oq_O;+bR5v?m8G}^ana%QqFDyNCU$`MY|!C1n?Jh>?uE2K3aT_?-Z z4g!X3uHDtq=*7Zm+kGt^tZ9?`d?P)=IjaJ1AW zmd`KV{a`30he#_COOkh_4vNVY_MDdD@2t$?u{0QV-Cpycv7`w|UA?TcjAE#6kcjsH zcKk$_^Xu>E_W628Qmn9JsmGAOMynpSnKjFDF^G14I?m`m>S$6d$lgeaNkSq%? zlTN|tWz5EzE%w#NGQ6Wzz`MG)XHM)=2x2C{nsSlocK$m3**n0bY(;PRRUzzy*dn25 zcyUU%NYIiXrI)6&RbH}ik+#Sui$|I)Eii@3c}wEq20VbRh(b7Jeo z*0D{MYX;`3I#*K2+Yj-s+$R;&_NlKADxdnqn*l6OJj2Y|vhG|ek!d8Y=MH`eoLiaB zd^1(CCs2i=l`Fn?q(}y&QM>k>7b05JDEc-S_Eb2MEW=7{n2c=i;R0iu-&suKy1?n5 zI?3vEMJ36QD`^Wbi-KNUQNRbPL@U2ZBxCcgzp;?3x5e^ioftN6w!W*cEGn_Es6Vsk zOJvo6ls|vU>`@OR&^0_#Z{SPx5SKMTC}a+m8wv3Xf1PHryEIu%=X!=(cc_DgG^3*jpxOYf5e2Q2BjKP#=LwvZEY)ZLrQ zJFaJ0b(YQ_GFu@xE1N1Ju#F!Y5x5*Paooon(onB=aZqU?{{@WX1fP|=;rr&3R2T1u zB-G?t$Z+xirVtl8NK5ppKW{7qJ9p-y@KV`sy~*rBwNPH%TM4nl{W%+h8{x322k^FZ z_jKV&W1aULOXHsy&riOe(8Ze1SXqDZ^2TRMj8;X2?Ir@t zZQ=#*t@8zMsB-qus&hl_Emm)vSHAR+S8~tv$#Lq$5SAw+sAG+FWzA`2*PUmHlHqO1 zsG`rc8@eIO%^)CS!gWvbV@IIXo3Gu8;Pj8@CZsMRUH;ra!K{U@0VT0aw;6uC_&^6X zkuR(c%fJd zG_SY~8;i}}Orskr1!?i8z;R{+rH=*DglOD}phgcd@Z*HVjBW%E>)B7Fe{qA`Xw{5_ z-8Ika;G!E`c642EOuH#>MUTqc7HC~Qd(Qk<&n)GIJ;@ET;ngYU>Z0>KfkLz@?A$xr z-zNVIaB!9&5{&PIex~sp!u*ThCF_rUT6IJr>}O>V5)X=zbu}{<5~w zWRH=BnIjMX{Lrhnt6tFBF);MCP?i172-kdn{qlLXex9pSy38_#U7 zlrV54hM55NY^mmC;Wv9p*D6}36*M5Di>2lCrAlb0mvm*y6UMtyme!(zf6=LX<{VtL ziWRGu!*b$#hFg-w*3vBxss85g(NgFG(e5^~0$RKfzuNdjY$fV=U*MawzOEjnWHI*l z`}2a|Y2Rs|NP_lkZUf^umEG0br!pC(c63YpTMYx2{7lcjq&I3V($YJpnsda6d2SO) zShQTbNBjF?W;mlFSY)rop=yTHRiYx}Zx8$#Q`QOV$_E0;JlQ|LXF6G>lM+n-sb&pD zo0Q*tv?D%RHMI1?y*j!#o%B-AtV}fM&*(Tk1HlZg-(pZU859!&`YU`aPMg`8NF9(= zvX*pwkUZyLXu(Z0-P@+Mm`B?MSX&UDvL{ljX*=HE0qno^H(E4|a8eb0#*M6O`|(nv znG?a6*PP08`mV3`anY@3_P~+B)#2DLxz~F;_;VV$%{BPC{2C(J&BCNUk4OAR%*G50 z&p+H<9*T^8biE&=uRqoId5=(Py|8FPEx4(}VyLy91mY45uihDJ-o|DGwMfxA@3*{; zIEAf>GcGPPT5>WAE)yvc-wv&pwpEx<(mbXk1NygCY_o>-Z!F3o>-;uBg2B@COhQd1 z?x2SP_Tn)=ZhJp) zA0KE#ddr)RJQj!8t=Kn$HMYaiSS4R2H1>AR*V6aK;EE&uC$3pN`2tfNo@|TYiU=0{ z9IZ?LkjlX}HGIc#YW{>mW_m-`k7+myZFowtxkVZrr3&}=ogCi~A0>lKqgIgq4}BA! z(Izt=6amLVPC`6}TXsCi;TZw6XHEN*3r~BTqkSCJavMmYbmD);xYkDG@GM^GCuMQ1 zrVlHM7|ZWe9eyy(Z;cN2IQpffI9`T#ev5l+bV99-mimM>)~0Hlys?nw424V%*46QO z5`vyb%tq`QI$uV5Z=Dtm?;n@*=M>`wJKyCnXq8?}>(r0-B+xu)=5L&0+%}Dc@?ryq z?U5fYuLtDC!kW%u!2L_Tn|EOo!rx0KY0liGeeBovP<@M}aP*GWgpnA3_4rB^s1&hJ zHgL*$MAvrn391)Lu3yC--l#)-q^ryc_PafSTMLXHnNmJ^DJ$8 znC+E^VXuM?{Sqg|Z;D%P89~=!U-7!)v*tNVJP0e-4(sPgi0kG#D9XzT=AC0NZd4nx zN6Sp-G$WiY9e!;z0RtVrZsOM@Hedmj+|@!t^F-T2Vk_) z(aO$Udog3Si`5w{?rLrnGk4TB>dN7`iOs)jiZM2Ux~+*S z%~Z__%7b8J7&I`p4}6=SqaWfg+ib+qXmC@gfK{JI0y}h=9&~DSI~9QdHX22Xia{SW4<~K0A2kym#c+nlWV*uU$oDAZaVr^xG0iP zK=eyDP(w`YHjt#tQ!;P+1sq4n(LrH;hHnNXQMD2#2aVTs+p;N-Ds#PEE7$9A{4J#% zdWoH8NGOR8a<>gIyny?X?$@YrnDq1LGwE3rZ(6(da>v7hv2}p zeNw&P(!9-^2mxt$ct9chPJN&wQ$4+SM&OY+WD|!Br!7Xk+}2giHCn5;wJDt_md}j_ z!E^$3uv-4qh;$b=-4q65yFRuhJW4J&v@^dz#hAI~7AG~B&e{ARaRRl4wg)V`oz~AS zvc(6C)gNz2S{XhWm~|Tv(!Y4dtw-?&MJ?T##hh1M@>*I98~1g<>yzp-O!W;LjE}Sj z2`dJRiiWO#;G%nDEv(??1%roB)O93p*JETS@74@NGK`G8ITol6ay#vB%8MUZJNUBS z9Ja$Xf#Dv8RQ%GF-i_it$Jr<%(`eW~t9eq{!Mls7b}Em*ilw&^a^+(QFqHc>n&Y>h zO0}J2lt*>EKtv?b@5wvZMjE4^kyZq$D*3xvr|!l zte?e*2YsxF;#pA;O||{Wm-1wAF#hIzhy2{~Tto8Cde5&R^0NJRG9TJ7V>2>3{P-=g zX}R;YB_6&G#WDVeU8)AT+KC_?v-k5UsRd5 zQy9YA3xVeRt_8sTJ8f$db#&z|9T})a8^?n!*VhwtbYG;^ev~7ojr?t=e&O2DG%L*k zG`FhOZL;F91jN^^?9knx;XWkz3A`#P`sV?%X!tW2kSF-5EYiIZ@wGtLj zDq1=kMLFsGlh|%ajm|XCpp9#6(66b{PG@GF zWqm0&5UcQ->LJ|=6O%_dX7FjM+YmpF=_(CghtVfQEu40r9562^(5Pi(pMZvK$E zKWcNDp^CWOiB{JV?C}v_puNr$3wu9EZp)^R%PP#T`N}8-o^{Ic5zwvy6^=Z2yYtHG97aOnYjpQC0Ug=yA#F;%(AXvaU@4)r-*z-6;lt4xphbjDcC5ynZ6sW3e^629YF4;q&M1>R=+UYzerGM$6prIspFlUG> z2%Ki$r-UB=*nO>vPhdW{o%H14SItbfR6R!05|C5jvl|iToG#>%0nI~wYCY%_ug@Se z1BIMk4;~1g&}w;1{yQejJYfr$o-OpeNMM5Niw zw$whRnkM$;$Lk_KcUys#+}xS-{GgP!*vDQ|*vCK1d2Sz9U*hudJc)1bJ)7rn z;kRy`A~7}!6X<7M-l|g`L<)c5dnR$~{iMTLhxNOzCR;fonnmQC%87yFpDOzyNet2F z^>F)W0&`@T_!}Vcuw~^dMF&Qy&{MLBdpGAIX@V{dUrw1`<1w_QKplPHfht}d%MCn= zB~5T2t=7vhWUg-s{jH=`mHqRyR+fNq%%W`MdxnyjM{XU2RY1q5>~5IC{}x4S1Y(Fk zYrB+{K4s^Lh%6@ha51KmXe6~h+eRBn2m}L^xr}%>$iH#wZ6F!_$nAz(JM4q2T2c%| zJw86Ej;X3)8YGA`+3JIm&)JhRXRoyXc=Gv#9T-`^Ze+FaoyU^ig*P8$#3=P8vsi_y zewE!jmKM*#1`>f!Km3{BiM3LX&C4TxCZ|i+zZk=A%EmHWzVbqbQRrEIrv6ZG`zxgg zZg|f%NoR^N3&)P2)BWu$4EmJI?^-XVD2EcX1w2iNu?}et2^Ah5V&` z?HRa8Gc4vh{7RRvkC*Iv6z{s?gng^v{LIp5uEUcl7;hIaIC^w)aic9{F=@oBbL|4) z4~sP$X#MmvX>O7Q4DcE3JAhQLJ0?tgI;TFN)VRm=JuvVS6Ngn1L|YZUtPqWd$LO~z z51R7}0_KH_%eKU{puImi-HWAoYoP@f-kC-5e_KFu?`PlpY!tdiNEy3;KG=|n_(o!k zuU-5F?Oym?PkMX%emCNvEpQzlKl+yAS^nT`1LG)2QBj?P_{b=lB{l|q61sTu=ONdh z{V7kFAPnoJrL4VHtE^yOj%*PjDN^{!{V0imoZo#x=s`Yl-k}QaxRHpEXu41@r|v&3 zy3g{T&nFLCu1|UKU-+sh#>%$T!z0aB$QTzVDDVAwNWTCv^N!&I#>L;g0M=?(+jd^? zX;v`$M8WS<>Hg#YI102Y`_p-BCDlEAHvzh&L9gb|{vq^8U`_34`uQaE5L~Gl@z=rX z%ly*NshV<77@92EmfzE%`^Z@wIBN?1&jcl$?aBZCj{s6Ob~%E3#pTP9X6Uw)KUaRL ztdC!6W9(0;K}Q?v_1AJWX5aPp4|Un1i zIU2D;(f9g(bN{hUK{VKq*LKW?>=?`r^$#(%RrE4#eEQER-kgKyBn-)y+ihzTin6^B zUYGDke=SN%AK!<0QGAU5sCH>9D)=v&uI&H6)3hd@k$zm*2_ZgkMhz;f(}@lqA-giA zoI`eWxDKzklGuTE+k7?u3&Z<8g#_0Kosx{5mv`A>y8-a6B&Ahz3(YsWFVsDRxPj7Z z;}`t%t?t3e!hQFTV!r*)?DeyH{d(~OY7lQYOG-v2Kx#cVm*(N>hU-R;;6AJoeK_>q z|GdThp6AOq;$Xn6hKy160LB5`YPlikIXucr%_!`D6_ShLY>`W14F<{Yg6%0+>_^z1 zPB81^|01Lo8F-5b{7WC$cjmOEkWhfRmF3jE-3umzI z@_P|eoy{Rgf8T(-?-dmcCqRjf@fcRO27=NDg24TaD#UCPqn&7qN^DHy)Lfz&`xJiTg*6 ze%U%(4j8ip0*oEVC8j&_F>k0Fmps)MykBaKzjkC; zcsc)F_Z(Cupe(8%%Qp_UdT`?VAe*aEwuSa@uw@;9MwUs62X=k@0Spu`!2NcsEtIYM z-4X`0-FN>3MnU{kE5daSv+ae1b~AN0Sb=*p-FdhO3V23P&%WJJ-kJPe zbrV=d)jKJRrwA1ASsIn%ZTs_2Vck{dn<}5}O$Ma8PY?BWQD)S-wK(&KZ0EOvqJcafR zFBJ7K>!&oBpYg=Eqk{49Y5Q_j8mFH*iPQ>(MJ$=%gvLI0yn0(@JGa0r%eYARcOQ#@ zG`iIt|M+C)cEi!b9yYj_0qq+e&Y!ktW|EAt)8RTgnNp*ZssMhv_6tQSjyCw$CU{Hy zh93>ayQtR|TaYv|vFHMpMAoXW3Ag3|emN#R|7HxkbGE`Wfc!j+o2^do1xoyDe7t5! zOR_>*X*{mJ5-Hyfxn69$F$|4^04!W?RMOchUGF)Vc4oyC<7U8l@Z+<)q}3}zGZrR8 zVvtW2rf3j`bH72tm&ABT{dz4u-q(e(v9X97*>#O;7-18`w>1 zv-iWb^lPWI=Zv==-MzXHfPdaCxz1LcMoyUXiU!lV*A>(UL2A2z% zBC1B!^wguvzG}RnM!b2uD;zjdb|xdRE}Z39aOh)Uk-_JmmU8Hw?Pepkkvt>5!*!jQ zR&qlo{&VQ|=GF9@X&&iuyWHncS}%&3BfcdKzgd+sJ$No(=l_}{Wcr>m`o+MA8s$E9 zKLztCc`10$52gB&;qCAYNqfQq8k+U$No)B!d@?_pJO^z}?H6-*Zk>s|hsb<)kvW%S zL%?~PCv>+*^Puv|yNS4GGKs3R8|Z~y7POculk8K*d}~vMeKmi#uOvZT`cZe+o_UE< zf6BU2a2eZ5*(O1K+%mfoJ&W6w?9}{|hUoAb23mcATQ4!byyn)uZak#ouHoJ2$ zi}AJyuNu!cDc9Cc`kF+YwdBE~x|s1~NIzl}Z7I}hoWnh+EqjIB|M7CxerA3f9x_`< z&?qIUZ9H;D9k*2Da2_%E<-NJ`+uvV{RGA|w$ltx|HVnNMmTpMd*nv#0wvoIY&?tPa z_*11dS!j-~$+8SX`Hto%Ul%TR^5uwMwzf+HUcx_|uC{6ErlzyV(Ed+!exoSnjAV%L z5@&Rg$TKO|Q`gfD6>4kayux$cw3$nDw15;-p_Vj8XG@C;HVNmz#x!xg3K=F)w$AO+ z)S0lB=qs=8^4jTWCdYib&!KK<8D9MCMlP|IWR;N zC;a=whN|ISL{Y7L$2JWUwJb!R}Z76>*DT6D44U|#Axjo75a;mPS>b72IfcS-}9qi zsET%Td$>>WUk5s(sn9MX>Xzl1nX9B|svv@d2aamg3;Jlnq1T+m-Hw&{#~&%@FWWMr&XsW(5}TNOFGDF^i+7O`9EQ` z8nR}fD#k!IlJ8KW$E_atgY-5Msiqqn^W;8X7 zM)B?}tQtQne9iw{KksaYt&GYqNRXX2i_RZ3rj(6o%^&vFS>jPtH=Vob@A5zM z`<`VAy-6@()`y#$MXaUG4YAgjIEZ-7e?sk$0AtiFj+u>cNAW%SM{etXDMF>4uhkdf zRg>x>mZy_j%*icp>nadQLgFHELJg7kcSgYua8a8d6(v`~KaT$+H}3p;Pl@U;QUziy zbonwTFVA&Xb(X-94e3PxKU3nrA_AKeoTB;Y^-W1!tms_T+;APlh1qdhl{3G#Z1X%(^@?NyVI@z$Y*dv9HG1GZU2uS<#IEk zh9aFYxA%2<3=^NJ2OnH4RG~BSbtdWC#chfyTiX=K@#28r@tb@a_ZAmfa|qWl>D7z8 z7W$U0!cW48_E=P#;o*%C@(^xgxvGZpSaTiRcO}1)LlH*1*F49*kw}p}s-l>-vd*-= zP5klgcFPEPRn~-Y&krNTe`E_Ld4F$W#c<})QYt~jFU1gMweD-C8v2Ae%r4Ew8zM$) zDbd%4GoJLIm6p>9Xup<9=B#=(8-FA-zc0jZdH+mZ9`k~v)$5Z-qn+;f>p#r*dM5c@ zj!nfJ{bDB<2@d^o&t7qP-0{A|G40VeT$0#DwKpG;v0f#oohr6FR_*>7xwNR3`!{d+ zC%w@P++U5Y(ugb;ti8CIZ$@3%r_ha5i9<^ssOhPquXpJTHF8t1ElkDhN?BZ#5&QZ6 zxc`1n>`(y3ly@Qd{+)5$d}5q#0;a`K$8m+XInO$BYmqaNuh)71SxHDSvs}Ob2kh*L z2{w{zv^xbGNEE1O&2W}5NbYU>a{hUM>8T;M8%V6l$^lv zXc7Q0&%jNUBzEMq|w{peKosh7yW()q6jIqP}(U+xxA~*4@-0dI3oLYS{ za1D;`;TVOVJu7OSQ?Z4gTwO%>v+p$pS)G-$`(Z7%P&EQP;DDs1u&Abj zYNYi)RymB-;1CJsvJ2ybN5@<(>s{&`nnS^ZuX3_tF4NrKu6_N&`BUrfKyR=6ECyF* zs-Qns@yhjU_Kk;3pTdHDO%6Yv+fDP?eI0bIuB?ngX68wZJHnwOQJ!X9E@X542I-w3 ze91LZ4C35BGTI-PB*g>{MYpIJ%V)e$y}2e$O@%0IMtw%~6{!|yUh%px#gGyjeV#;O z%bSu4;i&w+{~0sltla)cvHHC7*7RCeJIQHY(Ov?M0UyhX8P&V`Tk~nR`WoG zQVuyN)JoLycd>^ldjIc|`2WYxChUSUIfs3(y(3gqS92;i+!}rs{-XOIqtrF))?($w z-x)@!sBTgrIpb1Oyl=0paNF`PKqd{@$kJU*-KoN`+@bYuEfn>4ZeqnfNF8ZMuRx97Dr74#>j5T8R)H%L!e`wSX zeBm!b_Y!&U6aDkW#>#)-?LWqLywW$iPd=mQBy4S)`-6N^>$8bf8SgljXJVf7Bwv+2w|^H3yk246|Jn3rIWUZo zv$nPYn09UM3FRL%A-|kWVm4Q0syF$|b;$3GqMztvt{QbEhdW>EZRr#y;W_#-`%d|> zh&9&~?epkwzm~mCcgJ;Et`OCQ?21ZKN#ED_a=C)JJ+PW_;aH!sNafRi*4AA8Dy@pS z8D+Luv(l!o_Lrvg>Ts1Et>c}phkG%nMjHi`m5%4&*wJh^3=`Gotc4g7e2a7zC^P4< z;GIAcpN!W0w!M%X*hJv1YPLmm(j00o>OD!IEBQw9YwnuzL#3*@FabmUizb(*Hc40l zEtE+Fl|FwOu61)2o+kEMmWaCB+w|h@<@LP47wF{2$M{xk{e_<@AL3~c@mx=r5BbS^ zW2%|8T3(26rtV*}=3zOO_et*q^UC>qEu9`DJoP!I53)1QVA9##zZCa-tQKhEv_%?@ z27C$nrS9z_+Uj*7av`@rG$@;s{ zV`Z`>O{2pyImLW7E}=xYGeU zjMtq0e5`Sr(eFiuNauzsiZ7YmRJxZvH||!ZR6WzRg6hIrNMwf2!$Gkzw4F*Xj0tz39CbKccgkN0E6Gmfr3* zbQ1bJOW)=c?-+bw%$A|43|0~Fxp~jyo{D@-LzaM-Jy+3>D%?MKeB7-Um3v2lBMzdw z{xY1ApPteG`DC7oqOOi0uK;tPfEwiSaO~%eKFJG9lJ>)+4?b{}FdIhe7}JJ5%s%ud z_(PQNw>WoVzIAZ4zUP0K!3}iUP#`k1X~C@-z0)#>XSm`zuQS2?yp~ zYD~)|Y3EzQGdWAf7+tC-bdD<6{sScMmchHss>X`+L{T}D-G!o>;;F;)2I1i^d<&=k z(xdWJuo$$T4fC^Nibg_3U2{b295ch;G9Z?A^+jM&N)YbfyuSmc39I$=R(L!A3zPqw z_hNDS|5ra#uU6Nh$;-1leihF7_1}CqgiT8eB*gwRzZDeXBL9M9e~V0<6MOy*_VpwR z3Ki`z7Is70L6q90=C~)JR0DV9Cv|Vg+0EFC3~Mv1 zUcGQirJaYt4VeMd?+Bs6bN=m}3Bp&0)5#=6Ik{Pboe#yb3{X7={H^&VYrcp84dWZz zx%s7@TV{7|t~}ML8sn={Hx2$vcq3N!tYz$oW^9R|0(oe(XzLdR9+BuJ%OTae$i$|8H)n`ij;>*`>Y6Jj2%G({Sb|OQbtjr z5&D+DU4=#L zCP$G6?c(cKIbDshFDZ0i?1SvG?k%OJMI)0z9wW2Q$>h7lvS(CjJ4gtZjgRqJE$#U7 zMxKcDg5W9UphJPc{bdfwYw!o#BrxFht~aWlbb`N1og8kuP2*MFif6}t$Loby1Q{O0 z__nTi4(w&^jC34)e0(>vCQidn%e1yu%%D$9YswDSX(LPg3zQexcAt7x4oz$?_ zvu$IcXLieXc5`pWL*fl5F#}nLV#371QQ(9hy54)~P1u(rL&*=egGx+0+iT-laD?~n zY#1gc=n%i&Z>RkU0g21+CH0Xt&)uWIKYAHX+C&PRuF;Y1m)GlPWNS6hg}Z^&#c+uQ zalXLCorAdabY9t9?Blz+yTfIL4-`%$v30a?{AXW_-v!1XvVmm z51k*rspktiLnteI`b2sG|8T0Z^l1^6$VX`^Qn zu46jBDMPrmkNAE*k!5FvT%f3yARvdgJvYO-sVgsqMW)k!4_SIeh=#3!r)bK#f>?5D zHQMQ9j5uHas9MNgnPn}ZLTrw=wQBU`(#z*hc;6rKZ?~**HqNJqt3b}dwkFOD=G>Ln z)TI9HEA1h{NJ@x*hn)(3ZaCafsp-@;i6|djR&a3OF*7qW5q)JU`f9-(zLToTf!|LM zetpTa7Cw42xNIU!M@dD6UvCtXoJ>ng8cO1{GvQ92s+#+w22KX2goC1#vixQ38mb~9 zBKT=ZZN9yuWWSS)6Vt)gf^Exm%stNJtX@p_>pK{O*pke3SC+Cm+TYsPvX^m!=v?>B zSEhpN_N9skfBt+2A_78VY0I~!*lc=kZqAgSR;}1bdcuFRSIiZ4ih(T5e=;vG&sb_I zFOOA1LjTu&504L0UeA=Wq>io1FAxUfs;jHRZO~qGVp#Q*^p{~?-R@)_eV5;Qu(-Kb z;yf+GAmvR_Q&S`6GV^HlPOU~-v{My5#Hg6Z5(OEPRCq8EIT$NHEx6(C?rnaBh#OV6 z6sB{XX~M-u{E^P=&*UNrESo&2lqhw!^YZYul}_r9%=^=OVm}BDvsd_eMev;qWzXcIl!s<5Y176?26x8ZX!;}L7_WBH3XmA1yW0l* zx&3k3Fb$a%-dD{pTA|D3v?e*nj>OrwN?!MW=r8eI^Q0cDV3FCi*UB^*rSM?fI@_&< z10gDz#jW96_jpa~%4==2xe;ND0KKTlLaJB^6Wk4kE1F)E8)WC3188{Bf1!feG_R>R z7Vaxoh?TM^OG`_?EPK$3yS-(&i-%J@OroeB`|1^UaAUJc?Ckwhkh+!+TPK`rC&_}F zane*dg7b}vhfj@}j8A$^UsdjFJ6+*@uhl)=gpP(L1foPiS-EG10)gN#cHdo}g+%kN zpx_jaIGy*-q*u?5u#3v=+fO>?;XmqZgB|O}ni^0k3??8(89|ktAdPGJ>KJT{_d^vBAbQc#8Q1>i= z;PLqRErNSNSuCTU2%h9sZ)kP3*k0hYYX{>7!$*zT(Uq;tfP?LgavCbCV6A-ZuIbvz zp?GVELz1ikPRTeoH#gy|t>29y*gDowcqOm$-i=}2V$=NIh}7l!0d#QII!*~XkP2Ry zr%+UmN8j=GqPZ2*gqm8J1Qi!B54FIBY8MmVdv6;WNVc&Y&)xX*$-w5OO6pk*(#?H+ zV4XBdFOFPK7v0m58+@OCqqh5};&0)F--y7%?s#T%wVmOTp`1@O&UA!PhN0P6`)1ut z9N+TRl3&O$WFYoU#ziUL+s;vb?-6nTw8tp6gdI z#(!*lwBr>JbL+ir^2h!&O-S?216Ipb(L;mr1^MIW%{MQUp3kT z)@k_7_;9HdA#qJj3T_dsens zg@o>hrlweaVUNE>C@1$KB647?iDam0Koe8mbS@CHV-{E5q;8DaP04?We8drm*!9ck z=h#vFa95qWH$2t54nXkunjq)*iF=fu_>0X(q@`%GF!|_Y`e#a)E?-U?+-^E5-jf_) zD!unOs~hsEZka{IkLq`Mu;Pe6XUHYpH4wezwm-NaMx6~@Vk2-RsK-qK$dck9XZsN`FRW2 zZ*_bAhNf1+=BlFg(9<(iGdl+h0$Y3j@U}AD3OgEL!wbTc<)cxdXX(2aHx7=x8#(Fw)m_;wh2l z)*a#5rC2IS>s-hCy?PxowN z!l=|Nq#*fBYT&tDpYvKGX2z{j`lJ|LVmrE&+GZtpZGnO6g&$Ozy9(p zcwRd8XOXeQId-4tD4=^4ia4%6n}EvSd%|-3sd(WLQJD3PVn$GLQ*E&F?1~1#aV8C| z04F_n&Q8l~#f~?7jrsr3BAy=m{bdk2m!q0?MLu!Y+Rd$u)P8So4=1o8_V=E@+gmPJ z)&K-z7<>w$BjO>kaI;~^u8kwZ|A~%q01aQ=I-a1QU~ED{$V(w>v;K5x!6m1Mj;Ahe(2v?}ZP-d^UfWwntq^7O_9yaJ2nET-o61$wE)k zTw&GJjmE&E*!1-1$M{5M8}nVdA3eCbySryx#Do#Os<~8~i~St{4Eg=G9sJjuiLgKc z5QTQ3eu#RO(i`jk^v=(pTZ4`_nN!8xl?d~ZEKi;RT*j4QXD96H>e|3-unI>Ydm{$i zC@(&ShZ`G6yn^ub1p|)!}fj80Dkv`)Ju3QUF`W~Zf-8%{^QQxF*24V+E!gX zj&vHe6~ic*Bc9mkQKy*uL`()ud?y^n$_%olx>IoC@V9R->EQx46R`by=|Y+PFKa!$ z3o<8%?ok(n2=NI?uTM7wV1LE)ppvw$t!*QKitz^Phlr9@&)Qkf+EUA&^LJi}p2dDq zNr})XU`va~@FO*R@m*ft6L@%ZW6SJyPfyXZ@^S(5cG9|&;{#4UzTwnhcw|dU%Vcr) zoI{4*mqJ8ZT3Q?Bt8O*x@YJU8k5nZKm=j`e13)%|Y#@V>)#vLlIs7I~IG@ub5kzDR zk0zaxGTN|0&Rj=~a)wL*zyGew=VSr=+R#ADAcSY2BDr$K!*LvWh6S*I#70>XUcQW& zs`oSh_D)^5-0GQB2VTr*kzp+~u4OOs@~V2KRyd5F6BidBsd8pE;6+d?KJK-OC!qt( zc@|x_Nft`Z9F0AEeWn?U6|s->A~CW1%Zi5tuvu4B>lrLi#MX>?&GV3>;1*c<_{ibr zHVk%G%lrB5zw^}4AP_w`yfXJuQaxQ=%>{bp{BH9%fBzgJ;cM7swfda=7~OE7njU7x z_`K{M=BlZ4S0ve?O%tJ zQRgvYRU=ERu(!}+QmPv(dUZV=bLEO?lp+U`Ag$f$Nwsucqs7(sob7f=dg57invtMG zJaY{p{(ye4Uo_u1Ji|x5qWXC$DO5)%{p$NhlkmoM`}a5oMCAkdDiU9n3T~7(?(Zd% ztwjHJI>I!oljG3*da^d+_6|?xoePsu_~T_~liW0x;}lcq=FIxD92eF8dcGN#d-qk& z1uh;gu7QG!>Cd0Dw)mNZBe;Eaw6sh|%Peo+y!nNPm;KY5>XEg{+H2V92Kz=&k2*m4 zJukrNxvFW;afMw@l|h9sYXQ7r+7fzp!%UcigQ!ry;yGK%CUxas)lz@7%xhH`{xl~ew$IBp-^fQw*8 z1;{W1SpdrJ0$O92;+eCA`00WBwm6HS-le@MA}UPrubdk$tR_6Ya7Ag)$q^y!TLFd*(8t0U^3bZ|yt$1zPN1aKnB7uZzCemCVJ7uPK&dW-}x z7SIaYJD7t=aW?8{kVKJj(^<+fC`<=)(wloPek%i3 zffClOVtjn}(#-(`+;4lGcLg4Feub8l@PqR-({#{@Gz!R*;7ba6dJ?FbOG`GF*x6A% ze2of_Mvjkn8rj&{mC|crDgawlAMdX$9Pn(*Y1UIyQ(wG%nE;BuTce`nU3My`kIU=@ zx}|uLnXjv>bqT*gM((M&23Zb*vBbQCOxSsf!PV8(?JPMa05czd513O|UmX>PYG-A* z>P1&oj?0&^AdiTg3H(h@d#zev#bdA_m5hBr2}36!AYk*o0IVX$Mejc?f6XSz%*tBu zVcS-g>VTW&iD_etk;>d-I_HjR>ul(?3huR%hm;bVn#!{y=|cGxp6d`4fYws;j`>pJ z0tUz2tuMp(mA>}^pFB>~ ztg9G*vsa^0$&@9bzrHahv|CfFhwTNiHztRwGD@;$CwV^HCkgS!abY$NRhK3-b&6*E z$@g@Zr2afkQw{n3K?zhgUtduXIiG5v)ak^io!CV}oc|V!m$RqY(Sm=eR-g86`0MMZ zkmmQx928i2SV1(Vl!#e$#=74qJFQI?hEH;y=Q_y!A|#0sC9J$Zva+%$5r{CTXJZ?vY`bseg+kCk$V+@DjYQ|homw0%acZr=huuai^Cd9?fO)yGn zPMj_L+LSjN3WcHo_5+Z7Zn*JS#6u#@;Hu#VV-FjH?!&PZ7Nb+2TU%RSBYMpqI;wx? zQF7%IX+;u4@3+Kv%dUp-iBWM!{mxWAR~Q*7Mk0-jTc=2&+^Top^>k`HInK%9qU^#G zA7=k`T&LPK(Ys&ZHGs9Gbj!=j;gOLyvXq|1zIgHUNAIh-{Ne_%YkqsN1u#;#Pw=E%&t;Xy3@ z`-^;8`TV!{_cze^F^(pSt?AN!^9`cd*>axQ(VxkT%`Csn!J(W^#VFwsJ9PE&AhOk~ zZx=JSPy-zi$-4x7fO_V=3Wn@LKv>%vHjdfd_5PNxLk_EMBY^siLGB<63kxocNoQ|w zLjTpNgNA^E?tpM4QXWbt1v4{W?pN^X%jXVu1@OPT1Mn)b;LE$cy_}xE)#<;Sh?i3N zT7$NRbT*#sM@#;~S>Ie*#il#uSp71|PU9bG%aY^9ojasP{uo8^+YaTUU+R3^dpixWAd~@y zf9Qjr2gRKXnWM~TpI!=P-S6puGXszI-#AY{+<`qcCoU%-3ar1$F7BNgsk zglR=tnMSCR>l@}>BP0c1x>s8yjW=kV7P|T$Y~o0RjfxRaMjjazE8n<*=ZT(rCW)@Q zKecr|cX0Lq-I(N_*@g;7)lqPFT(kXpid^=P|3`mDOlBsl-Vlp6g1j!xuy?N(Au)xZ zLMgudcv=7(pO0SNVV_@I?4hW47!`yHaA675GRVmTHSX3RQrvQ1QKaPYS{u8}jNbA! ztr{PAr_SahrP$>E&x&37e?+=g)=ZZW%AS^=M|7|PmFrsE;Ku1alP*E+h zC@(LvFHN$CQX*?09IGwGWsN&G8p=3BOks5;VDa;}@jS5Q~@g7%OMd-tgc?xqOG zS(ejg3UqjO)T>SZl!!_ricytFK;(6i?NNr*P`@*o0 z-;ZWoeNc(>?$;$4x)$f4g9mpxluW{@9~apU=GaVr6anH^V%kC|t|Q}O_!KFQjcNOj z%Q>&+WiC8Zf@Er-Ehn|!gfDory`y8UKj>J9n1sZV=$4!uE|bqZW$y>%`K$V`VYT%k zr|NvlCz#{Ao<4A{r>XTqe?PU#k?ws%=*Xh`1y>oh@lyrYXzU5gz0>pZ#Qb+ltSrPt zMYRW&s>ZL%a-e+nx7UyWmYbG6GT*&BjjfXgwuVm^bc}om0OkSz=j7yU!Y7w{%@xlq zWEC~h57KQn`Wy^CTu>|V7`bBtQM#eK>>(j_uv)%R{?TseO7HQjUMr7Z6Bh^w2sSpW zJ=gR>@vv3e9WFNJ>nB%lX2WY7uxZ88ds%r@0F~u0l%I+}bA)OVJ`ve#SVS8_f25;N zet?G{f>WLcxFTzs6nC)=lwRsb6B7n{X{7-No_c34N>oh+>==&f!TKz<>ZOA&#~oEk zL0ZyenShUn(l{0t7B;{9O@-+&?exx_dpqz<$x=RoP@U&@Y;N3mVz4t~<~)0|G3q~C zYB$An={0TgNb5{h()SIxWTd~5$YZ2Ly+T_ z0K0$mT#F=Qlz46280e;X%OJMcuvS}$Xb-wBSqvi7?kL3?M@ZJ5t0TDiLsxp6~_S&Z2mA+16qu0|m8g8l@an&BM;gteeFOKp#s1G~#G z@Lx64&TX8a2>L@-guasa$2!+JrQSeAW#u`*%FmJH05inWROc5Kx`5?BCub15sQk`v zd-eTGd|9Xyci-1TZM`<_&!!wWheEAG>#BPW5ee^~FqPNT(&}=D20WJ6q_`c>J5}St zR0;BYG~l(cvg&rfCMtS9VE=cVV`pDq;*c=N0?zeYi9b9;0mK1r+4?yYzp&_AZ^Zi) zL5u3O5~35fd6W^jf2*MZS|gyE$R14W^^EM$Z?W(dDg3qXctJ!h5D9xbYCw5LQX9D$sTK&9P(ZB=wdeN;0 z%hTpNDM3^wgG}560g%n575MXgu5i`cbC*j|Hw<|`a-{1NR9+n`8eSR5x%&z!@nexb z0|oNmQr@l@46NWdM$09)OJ*`K^hJE>i=}mI>ImabjT~`+@OZ zuWCHH8_EM=538(eTEuBWSLpIwExI8d{Y)1#vAAgp3lX>;(~rJ1Bmv3!PR}sb)@k>C z>68aQY9^h4hTYK4226XnRUDL1%u)#}zK4u2O*IS`pRjXUkLP^v*lB3)wm}t&i;oY6 zWQ3I$Km*xOMVOt^zax8^6ax*PpraMz{u)I(98zW(gTVA>N^IwO4LE}dev01$3Qepx}IOIo(-j+X9$FJj#Xeq=v!+%VN-*RaCe9RB%2fwd-hye z032Oy$97Htw%yhU1}LxOTm+fOWBIFMx-ncAaKc6{>pB_9LJM0W2TJbw8&Q*#lMMA~b}Io~HC#rAql|L?1>jQf%(xqYs=a^Z{#O7Ltrn%efif zKNpi5i0B)9k;Sx9rGyOPsVo%N{*tJf(Vrp4fFdq*?mJ*+(|Q7s-+9KWYIzd?iforV7p2Ii@pbT`s7oYAn zah=T^V|5XzX&O%tfG)_=XgP;d&BA$c>j$g$8XD)I^v-PVnN*GU+s^Gp?<_ps_1*eu zd)||qmp3$%lUCR!R*D(0;5tNO&(O~{luf44Jn(@ebZN6m6TNdCOFku@auqPexQq;P z(AQxYI_KD&;@G3(#GG%?pwNvcfqO>bb}(Z!DFvLX2HdbRDh8;M$NozP|O06=F{)eSZ zWl&!{GJ`FFf0k{^@knqrxSG z^+q+$TPwp!xCSpi<-UE}iPbFlL697M&+?tDRKKuH{&pS5!S>pqN2U7OzpN)`7D+G* z3kv`PVsWuvIQV&KAS5hs@JOa(y`kg0NhZ@!qPb>m$HuccNCF4q?@&muKGUJJ!!ssnD`_O^ij zw!mw4-)=I+z(8eCr7B)4gREe~lN482OdeiISS+#`#1fE|NONDv(xa3t5=D51oUO=V!+PI} z!^59jzHi^YwUMB~F+sIPq&!%Ga`AwPyp+OX#+uJX;>Jur9@?PPZK2!!MxAP|JTUye z+7eSMtDGNbU{icS#_pG6R3jQn1HTrS(aSti5aE1dJXHb&*Z~l+wZy6 zuz@^dax-BNJyt=&n?wR~bxQPw_^wO+Jxu{L8EJ`EAJ{eAuL3NMHegXgDf(d%d(RQ+ zp+k5h<$?cvXPotMMH7GQnW8@yQS71m{tbao}DZ8wRJu zc90#0t{Vr6!1_{Fj2VcyBh{{KU`Gjq@8~5yrF*9IIbE8*slVABRzmo*XNoZXK>Q$e zJ$~{8Py9A`2{1qNi@W_g@Q0e;K3w@;X5M5Yj0&Z9YEt2=e+tQV27==cbAl8FpsS|e z2S<&xC|n!tpw+HY@O`?Wq4At2>@4XNVyyLM*7(}@7q3CH=FuygPgTW9>LGwX;Qs;K z-~F0`h9>*H(mU~U&Z4hMfrjEV)%k2%)H*}X0sp03IzFgQ@ut}jUjWq^6enuE_%=2+ zO8j=50KJ{%O;Rb(c>G3Jo!VjYqZXkQj4=9sP-(}3KZ{XaH0M2p`=~S%c_`_HOg-uX zU=L-%@*X@9ueYG@ypwvJD<|eoGQS+5Bb2AADPIyW8o~N>ORpZOY8pbf`Tc~hQRn;Q zc9y{N)feGC&YlhR6h@?hJ|*eVCILybu|`5_P9b#3kM0G41ZiidTI zvnX{5`J4hc`y2;w#mrhy`(xS=BjwiQAXf|kde9T6phdN9o+80KW+WF;MtPy9u1XrW z_A4%0y1EMBbdoWu6Qf6IGakpsZIG*+?VBk$kauhdHs^m}Q*J^Jbp*?(I4 z;#?XioU6v6E`0Pt^YS&w9j(jSgcjEIhvDR&8M_E$e@Y;0ZXpYpxsD!6K1xlV z^GK_=C05~8`i1X|8yiS#v5e8(L-8hbY|sm4ra0J^w)hh|5IO-6p|IeLbadIn4BpOQ z^X2v9I^9521V@oxI3gMouX!Ge%eMqP6l!2yFvMh4&FH{`}oAd{)?{hl+6 zaof-w-rE5|`KtbhSQd;~^bpW&T|T)FdZ|0mcfxASBFHn_=xJk5{yV8+>i4^yN_8!` zJWWELPNS8X zVe4lsm6h~djm=&~mD6)-vIKs4Ew_QWC%yIJhfst2qN-1H_#EGlYNF#inv4cr6nsi3 z`%rK7ii>!qkbFRhbXlK~tHEoiZZic8I&ZyZcH^)+fm>wJqnDz1c%?MxByjYxJ3tIp z5U(W+w=yFDv%fbuP4Vb($GjuD%bd6Su#K~Bc*QcDob6xw!i|zRZx|wgy+MK4zQY&) z#Wb((*dti?goY!(0C*(g$`udKfl?s{ZEGG=&)P|wp}d4tqWr<-zB3qTIl{KDjj3KJ zRM54|SO^qxo-!~pK&tKhc;(!kPy&bzXxSC~SKgB#Myd66iO@as2Ao{9e6w!UK?#&H zDbdHs&@^X~RH3VQ86)JB{B1YuPVcjx0vpw}-CpNFHs$@+qtUj*4U>i6K)i6&7+G5} z0^r^nDS6|Ml>)jR;@iPn90Padif&G2Dw2S!hmDKt4BQd46k`_|*Ec5u24>4aBI@;@ z_govZor*V>m=cjce0wY2LYKOD4tkJaw!$_efcp@>2PD&MRo?Y_4@^V0x0^tDnV0TT zqnYS#A@^zkq66WFJX|oD&Avd2biqO|W-l z2{@_LTzT{j+mi<1rdUZ-HUsoea_Qf(4B0x=U=@n`H-f#NtD1m##Y!4ZGK}p27M-P zAVNO4XH#Wck?KoGO4=s;TviYvvFQ?2lH)coc=HTX5VQMkXh@Rs#M(lN9VB3*S8U?r$BP?hUdektXv+4 z33#uuaga3l9_J6JnVE~lV+?tdaWts<8%zn+9#kvv1zHPQDtR@@k&Hs@&_ zXsnAz4&fb0Q6vTP2#Z1m>?-)fgZ{V5kNrjpiCmg0QT`AyXarxsYKZIS4K7>Iz7)27 zURMnp7gBj{Ay^)Kc4m_C7lWl$M`HkO4JWJxZ-FmJ4u)jj--pr+FlC9$?2Ws(3iI+n zFWN|SHgn~2HNCQL`;)jK4^}Wb0l6w4<RvY$XX)(EJ`ExPLCaL-M)Rpz#x^h!mQ2f z^~ZCw@%Ll~UI-vVzNGta+?ohFIf99B`ydLf7r5R?z27zPrjllWG_+BV$Xb9ziR}|$ zE!R84;FN*}1(+;5`}>o$@Y$52VuRSC4QH%HN`kXN#V)&>IoGnd`6e%q7~9rMv%&Vj zy~rsRn;}%6LF(*M6S*ERQm?v3vL|X(5|(^b77nkVC=JW$bw~ za=c@x*qHgunKNbgXMrHMgPjKtSR{O{6P?%e042RU6Z}V)pyo;+3uqW1^ft}9G_85| z#2!KCh7o{6Zh;%rjlW8^!*y>;GKN zy^Nv@5dtsoxV`v{-pK+;oiZ>9J>S)dn)`{l(O8j6>@qt$>y<0Fqa&SR+YwBc;8JAV zT~~n&nEfy&-vfwQiZ&E!WM-Ooo~DhA=uWux zTm?u!6!kn3`5j(LfK_xu0|d?)mp|2sYDFe2fP567-eI7XuLJLFFmQYETLZri6d_2B z+$vw%p6E7yAed_Ju@U|R+XTUgNid1i$wdxx{Z*42YvX}U29PQM)O?YONq&A2FB3FL zFzRw4gn_rVLDzKQ7+MU#oM!h|ij!tU<}lwaBw3$P)~ zcF#j0g8v;SalV;nc zk6gNRsgsO+AP1rohB8YfiMOo$x<_C5cvVF79|~1TMr`aOFxWs1s+sBl&lv~eGxeey zIO3-Q4;;lUvjNVg44@&WcIBM{Z*%Qr^ed;2w>(S218An(K=rR{2PJPFP|oN#=q~LY z(Nj^mPf?&T-e9TV-nk55=wJt(bV3e>8bR!)fq%RR~!CZ<$O2^T|57? zuDDFqO=+|>8KRD3KI8KkZ!GGUf(2RT$Vvg7MpAlFQmi$}%;-ZsfDbo;LafCEk}r%U zNH+;=jbL0eI%PeezMd<4v<&%miHGy*)r47$#x+>V#f``M5mRA+~SV9>W|1 z{RGK$+S0mnC0x$UD56m7>}bZ;Tn(27LS# z!vQ=4y2HA>j@QFvI~T!w6q|+*&kZ6u;*Vf#YnsD!_T}G`J)(y63cDT(q{tPwy5Md~ z?T2|UY(uQOwwyi5sF#e1$&@*iZP;;ArNHCloKlv4r*mLGWY;)m7r^<%5g}l5dY1Sa zE@^n=BO=Y~l#~ORsjP~;l*M_}Gz2yCgp_eYPboyZ(#vawHjj^RH(jX&X)l{wP3~-B zI$KiAy=2QD@2B+p%M9K=9M#aG0XmF2dRSwy3oTI2qRKDdjT)ge4<#Zz*2c6B>(2X9 zvEO;;`BiRwMD;-^>#cKusUqPE_Y|_XQ}tVofwOu8KT#mHKj5eXoqI@i)nn<4+-kz> zH1EicIg|`0;+2Kn-06@Tr%&PO)_IqTy?i5`Gq_Am833CZuo5y&Bh^?LBZvji<7S4t zF^dS^-s!eXGGzbdKtUGf3Mvn_3(epa)`APQ6Zm!b&QZ=Qr*lCu(2Z~y`*16DV&IsR z5j19y_7p(M(G7F1&~KYo0ZVr^@KY=UaJ5uGwI@Tg3^~nRgEo==iGvL~e|u*gR&@SV z>rA1J@M|2#2^lI%cW$av?;ai-ANs^+YFxl5yd4nr9sG2~)iL*c(b(dL-q~~LO-AAn zh21|kIq`kZu&ZrmhHC@oqxRkT^$hFg1A`)L+DIE*)x0_Xi#dZCnn&a@EeQ~|^ zVTTuZA^l}Ck_8IH+1CW1fL;0?3?>P>@ha!y%4S0|UE4YGQ+TM&F|iNc_<`ZxS3^G( z4_oT^;INWb%*Bgk=?#-#<*b-99v=T{%c1xIW7GULByXGPl2cJq^=Rt$p0^b5CvCrz ziuh|0{n_n53ok>?x`fqniej#r5oK(qD~o zw`-s8E;@j=MJr-Q4ag(}gr-RI?4x6w{+GMf3Vy4t(?V-rcMp6oQiv^}^IJ29rpf^! zn}JIcD|dffXR2;W1-TDO2&kqeatceaBfGv4i`K`CktkHg#QXP}E)Kd~; zXa_>c4;%r!6y`Hck9UDY=N&e^a=;moQKpX8aG ze$yF)_PRg){Eq;%P>MKFPO0vx+GbADF>nn@wyi})a_99%!)vZyQnF3e9lqiB*E%M& zXA9IkS=ZX5JU!%i<88xb#ca`U^ey2WnauHGLhnNAMDw!?w<`1tz4sQ9@*Ojk6cj9! z;L`i1?CE~8$sw8V*4^2SnAy_9Ki{r>Ds(QwWGGJy+luF{o_S(dt8@)uhQYqUaBnZX zw2cmrZ7Q{z9sB>WFf9ho6tSX$3;jx&cb<|QYa06~lvyd0)`MKtzpipSyOjM^sJHW9 zkE9(@73B-g>(;d;c(Lo)2isumvOe2^v(6&{Peli3*RU<<3Z*O#ro5+MmEe6K3LFRP z<^`H1uc#O@GV}`Gy{E^I>g7skPjR5dNc?#hRjPwd@u#j&JkYCs3h(Fp?{Db8=9tQt zU?9_}MF_)d^8`&>U){g*Ok|WF^^hMG(OCd{dXk^Tw3!Ww7SBn~Muc<1Z~l1=?2FRc z&Hv*d>|5-jAb;d)(%F}pwyv1``OcdQF_g}#?}fixw1f{g|M?CQL8kwFFa?Ds@+!}7 zqS4=u4Qn4L@SM-z_F1zpgO>+bVz!w5$ks|fWDLoGVRPj-ZP#_Jq5JLGjKd$J)zzsL zveYr&12)u=nc>Cu9rZb_XRlwrl{dI1Mm24{c0};VM)=CFb2qG`|9uNr--+mdyBuhv z{+^(Yrzcz~i&X=A+~(68EO5%3&rd0;U%YjWH7daH`w3U0j0(M5d@jiHs%5kZDz>B17hxj3FeMS&A}85sDB(#+78A z!a@-;t|AtTj2V`B_P>7hKF^!pZ~u>P?{Dv8f8Rd7nI9&)>WBC?GyVC1x>>b@4%D}iliZnnC_?vr{h-6{o%coM zOxbACg~<7?(p*kF$aXbjE~Mfsyi%H#8vc-QnCOdDbbkyhkqqT+guuc2DZjo$OzAD} zNt(cbCCnKCVhlEO?>qcMZ05evPk-*vtEMEI6KDu8h_}nLY^nS4HILu2ndwukFckvQ zhr#|E&y_pKgtyB0;J|H0cwa_}&C$7=VVDf=0(*QY0wB~bx_tsVu`;fkPe;#ZYV-PC zJbv%CNC>nVjiCfb*dW~8+}QmQC2dOX2uK_9FpP6?Y2WvGXz463_SjD_;RAC4FAiPH+db}LXXqtol)vo{aXl7-C}y@<)a5t!0Qh+i6wkr6P#=-SHtm5wY3=)C zn@&~0ywHPRO&|B%RYQY1P#SSuzZkPfL!AVDr$2tmgBIs{G<(=lU0uB&!Q%p_mx*#O zXqbGn69$;j43u77V-Ms^)LG!spxJu~oNcC8#W25?20c8V$V67&ZNO{c-0D!o1vyq~ z=%rEv&H%WTgWu;D0>JJTgfxrk8iU1>*IwpuK6^u5W$k_X^}eZR!BtduFHSqm<=$yz zW)gX`*U0<)uH;pU`Xpa|SqLK?x+tb|wh4ow0llZi68u^IsON+5;s!m;@R3HnQ!BDub; zbJ1|hdUwiFwzXRRI`Av2M{L&n^%y(MDKu}z`|ns$Hg(ddPADIBdDdGWY!`t`R-N|bIJrsp zmwCwRuQ8K7{0!(VNKQdtFbi-kV4d{^wJ+nJ*2)0<>DZ8u36^0Of zH>U1{i&nVvcjqXp+rry<9WEGP>*e3vvF0!NKAfax$PyBhPgz0tCBx@e^pTeCzGfrN zTo2>58@bxpA0E7iX!H8Ic^9yOv;#oX_z4NPNgYW~Pwxu*+FD?%w?07S{T_J;sNDzv ztdN3VanRS*<+ezJ9FMQ7v)+Us8TO2}r%~BetXSwfb!s5wYJfbIkoFv&|m_Eoc}sQ?#5kV;^#-M^qYdpCop)XA7tq&DXKrZuaj|+HfQty z4A=nyS4y9XGKZN0WCaWg)C3TwW-UeOp>&9jNbPk_K)|6($8rFgyaCdzU-E4ja*BtK zxQa6aMW1>MW?taXu^?Y?knAA|2{Ob3b{#CoDWw+yu)^>M8s$L=06B((X`+aRJYCwX z@oflz@T$JwIdS^*0RUKmQ#yS3@P`i{E&`(!YXdZJMt+kA`)-0eF6=oFTN9h*F_-VgtpTT=z4;YBb7G11$Z?00LHV%7qjcnIHYX=KLg6%fs%?#SMXVP~4SJD56#x#5Aw^&Aoknx` zK;LhHu+aHRLKzIX?CbN3e_;W@KxZISA?&v5Z^e$FML-G7HiT@uZg`e3u@}PmxM|kF z>4?_y8I2#JhsQFe)k4P44Gn!NCBttqU-Dn)`a*O(iJsIR`W{x5gi)ZrdfyfIE1815 zAs4+GJ_B5+V4dD*L-+lFpg?e0h^)P3IJwpOH^$*+bcU3SRL;z-VFth?|154oK z;<}%a0j$yeK*NJct;6?7Erh@23XZK6d=l`tz%9X4nI1aqP{@)(DvFFWU;<7D!TJ>N z4ugF>h!FlVp zS>x|sngUG0p($||uG z)Z88S;+=X?*DgEUXXwkR;kT{5)QmmK#>E{8DYUe7;L-M8=N?;#EnsH=67+*rtRKAO z>|C(C1Plg9c($mIzIntfp}U(1$W`{8T2bbRBnDtOv<#f+@6isp!TMEO2c|wsz7hJgS*3;@FOU_qM2%Phk=I-CUe70`}}KQ6iE-ugkCDeYv?hckQAoZ z4vsAZGgVJXhdD_NjVIC3d!c6r=S$G0OFgz0X-e19lR*!`$=!(c$vz;1Bi1Z7RW$e% zgL}b_0uKc48lin}yy{)a&xKwF+&e)J2}Lji-ywzLt_jPlRS<9mj%Dhukj6Jm_!r|j z>`2n9E1j8UJzCz!bKd))RMuS+9FMt`o@*oVvd-l3{Sw<-X|gJ_wRH2JyqFR+)>nDr z{|X#|rSGBXudUw_z z-J}Nmx;Q+o{+*BPCZ{&D@|t}bzgOco7lpBd4xUg-v%Z@Hj06lmcn!-K$r;XIAD@uI zW>3n7Fy1#l%jtZLkB_e&5D=)4V`7J3Ji&rwEOBv<0GO?iu4*`i+zvv)PYc7N5!=`M&zwIP(D5IIqMFYPy*kClD zq^kl04S(>yU{$im558{qAb^%PM3BNBoARedV)qXQ*TPA~E-j9CDm-vAxM^AhFn1se z4BRPJxqiJ$khl;6`J$zeCh2z`W~mWL$2Wy_icIQTTCS%sVupRxJ6^uLv!PDsE|xS} zYrbralVtj`bfC+7hTD&UqRwYm_vv9#=#aaGiu8dX?uevKn+O0AT0_Q1YY@eY7)B3v|z{3 zERbHdiY~X|x61p9{XQ?;dpAPccarD|Kv5NS_1zj8#Cp^w0xRqkvdDuNn13^R8rJS8 z(Uqw&ny=nybC!XBVv6XBol8wi3y#>8kzoR9GJ>>+O~Jamo_^=(=;#2gO4!=OD^MJa7m&9TC!vj&4j^R@KZ06{72aiiIe*>WHm~k++6^C`R%PDc`({BFrFU9# z&w(QkAmAqg+PT}IouC!Yb|w75ix*6gUL(9ex}|6U_yJp51PL^4Z9x8JdGR(?l2|eQ zp30^JVu^(V>3gUKl-=;}BKR^g2=J+gIF1$E`nvPws=;0w4CCvoYcT~|7a>4q8koOt z9Qzr0e`|q2ry%e)!YW73Ro+*Kdb8Gv`$>?f1vQ&EGZjL6cu;fW+VgXyP=HUCMp8L4QIO)WsVGxOm>wX6LSU~x4@>+7$IA3=LDSH1uacYKREu$Wo1nF zFOop91@9ECe`h~bEC&OnZ$r-<>D9pxVaK3(!<^L0iLjJF0tt!U1T!q8$hF;0pm)&K z4}OmkavGCE2INC9|9Bc5J^10tNfGz?o7weBJzu5}j|LeeqKW~%ins)l`W%`MQ%#45-30@V?f1*Ayh`wdz)yBFh>5J zV1^I{0L&l<2@hmhF@LIFR1@S>F!7a(IFM@9MB!+>qAC<!ia7m@BZln5|k0*v!ASkBOaf&US$!0BZ8vAK9ai z!+01B3E><=ibefMHrKL+`BhpPQY(WqfJ_UDhXl{rz@kqQK&FGfCn?Z|_WuMHK7^!| z6|yX_CxWW0ZC)8Xz&8pOT!kHASaPj|fe+TTa%# zBCwy32&cQ+gX)6jq^5h>i=Ua@Z%s^SeZXn}cPIBkFMJBOvnGyJ={j95@j0+GAbfLL zj1}7U_#ufYfOwU1!|vd_UROcU6jo)%9tfU!M; zdv%pIgau{z;|jE;0IWz3jia#oT`*OFAw++qmLa5rLg2$-VP=|y@yDUA0!^Z20Iu>m zf5lm3!e{l=I9;!hQeW44Gw6j^P*+>@hHUcS06zmAH>$8ou&CB@`O2-c#Tq?vAb0s)iN&al4rL<{B95`vX7rNE~0ppFJT!%~) z)*-&s0seOUE?2>!5OB9ZfU8Att)LHg14slQF@ZVsxLb4qnZnR`p09bQ3fE>n%LW{##KNNgY5c_UHFv|m=W>y1}fH!x?R1waY{!XJFS8KZ~41v;b zZnm<992KTShNe@!r4x5XIZ6LKDC$P%(!qKvG-tzpGB^KNhfV25%%PUPy8`Yiz*_o(ePw|`OfxxQJa6dBJZ!C_1H;Jg^> zgyofXFK=7CS~O18QO>0=>CwOVZ0aXOXc#<|H&qn+D}`fa9pwM__T`beUg7=oCuFYo z&#ieAM-+qP&3|jrCkE{HK8t-U46@-W^b{xPo}h^%O50vyxT(Te!R_svPmRj(Ud~wG z_n`W~Z0TdV$Zi#Til3$zpt>I_W%RSak;&stm#?cYU!cW={Vcnr&BUSM>!67IZ`}$; z4BMs!Rsl<={wmOZy>gpH2Yhh-Gk*OC*W!O=M)4o~Vo25cbTIjbp=)`!oZMX&(H-PM ztH*II3fFYD?`Arhwc@0EdBrY`Cue;syq3owQIF2QSK+-the=>~p7d8|_#g8ZFB#8) zALRj73BglUA%;}OqopY?9-($^f6I@L1HvY2e^l>1Yv#sfCK$58v-#*rxg&@#K0$ek zc0EnF=JD14fTLWpJ(`)>ea2s5*56xu4=Gtj!Rfj@8PX3Es`m_~5^828ZoDQr$Wzsj zUOO5U8?5B!b=JB|bQ%57lKhWvRW4ViA8626cYON(32jeKN@=Qo-^2EVymB=5Rn78p z`Wen=W%M^l+CsTTuZz$dtJ)y@@Zc$;>=I}HY4cs7}obH5#&)u3f-8v?EL(xC& z?@AsfHW2Au%j(;;oyvxNoarm*Pd;Ayz#)Pz5z#uyxne@*J}ep9!j1N#Z`nSR3xO_U zWP*fWvoBtff9}lMo2l>dqc6c>IuGPa8s2q%Sre!@$;|t{e*|BTzWR`$_b`{#Yo;xO zMq2&i;&e@SSS9v;0NKBmosX%FSbmK>|C$>{z-^Nm-sHoQngP{SVK?U6BhK1?q@!S3 z6p|leq~v7`t;%ybkp)81>GR~`_;R>rG(Y%;T%0=D|?#~NIsnDK`md~#9-nFa@HeaHUUF?1;P zR`MTqzahQ8i*wWd!qbFV$B<=~+U@TG&Vf{;hr#snbxBdz^3g9|BB|(iR5$1aSq7I3&?iFmb^fhT3_5!9HM);%WTdg}Me&XA4@&R^ig)B2HJ%+?N+D-Ek{&=BBf z#gp47JpV$=`)5E=^0<1>?XSVcFHix;$&-eXi~D6qoa(Xkdk<=w?RMs?9dwg8Ywmc^ z`ZBiBe5>|DGwHK8gyXDlADG4tzkDslAYLiBbL9&MVs`@P}M8r&ky7#{?)<%2eM%`aQR4V zx5O6~fyzfOfB2dVAL_ab4jFQn zq*w3gQc_YlC3Gphd4tOHJWjfF=CFIF|uSPMI!b+%_$!5G? zCMQ`%)V*BR6#xT)mqWo^qtDkwBr~rx2U%{%fz-)}ACLA5x$Y)GthQti$RP8tNPNN9R5_v);9j4$mEOdek>sGxB)S&bQtyUFdao zO6d+=R>OyPU5{yctKAn-f8f$0v*lx%d*VX?CUg6vn3-X1#2Uj`o`!`U6Fpw&-#j&M zeXx`P^{Dz==!c05jHV-A4_0c+m8O(1tZy8-PEkk}*LdMBF^btA3$3+@4b&RI|JmMi zUR~>qW&Eq+`hOxn{qKPBM{4(9sRR+7%gxy5wIq3pf#Ibuj@&*PvEI`SCJVE(=!y?Q zWh$SKskz9jcxIl>c}X&;x$^SGl;zG${&R&aec$k(`8IcNcRhDgO*N$S&Zc;9(6t!) zmZzkASz5Sr?bzCpip9)@d9sBMoNF@2$ zjNK=wTFNRJs*d0?GU<5$)On>WzyAUqgL9Qsc|z@859b?Sm#a8`bnlN_lMHrQy2@cu z-+6Wsvn(vT*bJInGMh7F+G=OEW<+}HO}=M5XM8gKu&_lzTik8mY`LMUnD~SB^*&c; zMU4fWMQnibi%1LvBy!ms#I|(TTgE45#l8;?XlW+v%RUN#b3boSF-oM6Jo9K*E=|@8 z-4GB{7=4P{n{1Kot1Ou;we&{>Z9g2QaloYhXw8#}h3X#D-G-D&Uk&=%kv^j3gc=ia3nc#zC0;@0QK19x>lO*k(sR|J$elaS-oe+IQZ7)Imm9(h4PlYXErd)aK$EQE6gzVx{+O>PdKVkA=BVI4Qc zH%Z?}Yt{CcZCjg3^-fe6nD{~~u|VY34853kqVYO+Ldf!757R}LK)mZ7>V%n?mrOPO zwQ(xz1N@vEC((V)wyvf(UBq+OKYy&(9550)d0wn`XNM&6v*3(3qI< zM9YaU>W~h_P;YJM&yRuO_$ztZyUw`|EyaZP(vWpO%|H1+w9TlWl=T@OH6)K>bTXm|VHB!H{vY(ozS77fha#@ps;d56q z$hI=-KNp{1m4q|2zUWaV%*|2`tk8y-rB`ad6p%GKGOr8Cn~}VwnlPLSq)dCXd{#)Z{V-{S(EAaw z2jMZL<8fE9(_xp=yYEG>4Vey=`XBWDH!Cmv@m~q|Pq=3L^H7ZgleHY}a*24UKHAa- zDmO~|>3ONDbfQ4E}Ef?!F=%b`MfvOaaH&7$hIAFRJ6SPib_i!_k$EZ%Z0GvGJ|NJ>IWsdo4K5Lr9x?{XS>x;plmS*V6`) zq2%TM*5*+GM`6#{y5NB5FfX6$ZoS0yjB{A^!xamB$@Z0FU)XnCJZL1*x_^Vl@Zy1Yx4-LK%`glz2-ipiyzo{}^ew~vb_ut_QUek{? zJr-nxk(s`;icP3d_KX)06Sw>u^!Ur$bXsC}@&AZL9gOoU^E+Hib>p+oM!*h;2sIUM zUISil_?Vf6C=kj7NR;uvyv=Db6{X^#-}rAustbPQdE`&TtWWz8^4Vm|`dS7!BwL;z zix>EFiG>L}IxCr5zIzNbB|JE=NxSr7?F2z%Su^Bf-^ql2SKGqmO!k~)k6~lusw=$T z^!HrV7%*C36lH*tlsDPTiuz9QRNUm}VU&h^qRz)2s zXs=^&>#>G4{rV88{Y+L*q3E^_ee%jW_|TW7W;BiCMqfA=qsR}lTbY-B7_Ofua};C6 zj2MT+Em03MELG3xom5d?`e`ovwwueg0r>x6uXc`4Lj$x$*sl8UCKR=VC2^A613Ho< z1H~QyqrS`-hck7BZ6^spIucc0GaI_~S`D_wFO7sIp1K;29lRR;0A3xhaGeh3&hT%c zxfvOqb!Qsiid0xcE_dIjt)w+G{9`2Y#LWu;eF%JZ2DyX@xfuxH6_OzCEP=4U96o{4eA;)!1>8* zkqib=iGhl>DJhtP*5(3y{`3^cS0OiFAs03+PW8fXQ3uz)8k7s5pdz8a}59q;I<#T!r&G$Cdx8^vBB&QHQ{FH zz2O8fRlqd!YQK4DXu4VtSUJ!fO9mxM5Hnd2ip_fH3UG7KF^5|S0CE7JDnM=nK&1ap zG2B!@3Bz3g2sNH5rGQm927`EDcU?o#0_&oB;0>dil9G~CC7b90C_;WO`aYC_@*6qK ztO33^G&Iy7W0Ug}VvL9mB3M9BtA$G~?gIb@0SE%90lq2>N|8?kOe<&}04Aer?#evy zIRG9Hz(x_KQ1{pkP$q?;FUZZ0cBIn+00U4f2=fQv`_u>|17Y@qjPV`-8MBU;I!yqY z18@Pg->ILY99-v-f;!EPH&t)g&m$G^R-2*k)~Mxpdd1$K)3l=APvq$4(K&s0`o=# z@w9=`fPDc38_A2J4vB;N0;cn{c@eI7mZnX1JqV}3j({R!_4JaK-WG;oBb+UehfLIE ziUMdEuz~%18a)nA%?|@X1zoxI)byE1)DNw;11?}>a(Iu>zT#Is?I>O~QE72L=; zy@Xrq+okUEFDC;;aP|Sf5pbm5pevSXYkUe}@|;B|ssR^4Fv}_5)eCUtw?T?G8DK03 zf*BE|0n)-C;8j527kCkX#ds#_#0{`$fHs}A?LPm_Z6prCe*#V9Gk_Vd#ffTsl4lWf zzLv$na{lH)fD;AfHH#v5h9iL9nJzv169@MJ)Cd*}0lgza>&UN`y4e4~SF*rMC=oLN zhQvTp@EIRKL&7bo@M$?^v+@Xh1%Q&k$p+jEgc&ISN&>1g6d=KfVZtGk0bGumj;u!H zruQgUkPir^04NI>83Q1epX0pqC5RcoZ^MJZg%EO}@T;y-3z|kdUhL}!%KbhV?aKmm z<1t*~07wx;yP2SUlS2+R3+@>DT;gPdC^*6*B6n1P9?3%xF5mT*7uI{1NG`*B;1S&h zNe@=QvH;);QSEM)T)PEKnA~nzKY&+B1E$bnEF~H+YXbnyN0#;{*c!l6H^07RM;;{j zOvygLtHQM3#IypT95d+O-hr&3?4u(m;2MI;jY)e45OPvWN(ia_gJSj^2bXZbK}R6d zfK|zDEa7d0WrFhvm}G#9g0eXl_!iW_qzS7>6xYC&AaoT#*#P$Qr)I)Qz{~(lP8NK~ z`6CEKf-Qc;hy2VvfX#u#y{_&NK;Qx`2)V5QY&Msu2W}7$w6&s+woRaeUjv*?R*Pmt zwYF;t59ngTT29G0HzMQ=a3g{P7z}*5>+0%k7U^5F(Uk!Upq^lWEduls=;+J<_^XSH zkgu=^{DjjMi}|^pAc=$6AaIQwz$FAW&HyvzOy&9=@FB3LfeyOang}Qsp!5h~C+GnX zMvenK2v(nfNVuDsn^z4I`$5{skL@a~DFP<}L^oR~rhw!Aq9iPrY}qEjCCQQPf*k-{ zA3!33L=}X{`2vS!T_5n!MXLz9Xxe*A44^PTAE=$a2mo)eNMyqhWr%M2y=J`s;xjE; z;sNTv6C5MrClTH!P%-!cj)E95!e&R@Ciq8SI$n%22LNGbrq)R?9ROH^g}n#XMJ`C& zgIHnUGh4tuBch+iX9EDT5-2zTub~p3Avwfn7y?WqL|X&UY5?j&*aSdRf;%I2fN}u1 zYf!l)1sqp3fL4+FUxEeKLGl>kA^}<+OhtNG2lFVp3ThqT#G59cLuzV zobp9o{&*1JkjwI~M6lTV9{~1xmqHY86}TTGgcXBa0|Pb%q~Y4hF+}SSZjsr{ zn=s^RE>OBF`ti0AVwnR16FU@qf;nsu*tW88b`f|Pf<}hRIO>plbU^qv34}h103upT zPX%O;XxC#v#c=uNuvgUiM*t$Yhukv*U?>0#f>QxVIK*~v8WIlG!`0+`STKk;pou&` zfullL1Esx)V9Q}*<#E{Dm5lXN{1z)c(7f>c$7lz zy_lwhVW1-pVBc`I6NiEm!In+5)_{`E=MJOcppzWm`3|liLO_R{bUwU|K=%;?(*ukkY{9SFYIrSTVg+sd zK!F23?*tGc51WE4OVn;4Z~}L7_s$(=mX;?aB#r@V57BQxf@tUuu zfVTv4oEf2Xdhea8v-tKl-g$U=ze%OyH6T$ZFsx zfTBHEzX)#Tpw`KC_?tr<0wA)@v&aRJ2L76rke8QNdoCDA2=suw^9MHrs)k%>6uf&5 z1W(v?NSOvVmhf9C=r}cmQhS+t|E6)k342zM!{%nZ%sJcG%Ow**7ukUHW6xngzNWm} zd=kzJf>1|Jcv%l7rKmnls4N4y3Auo`~HU3Mk^;0NbWZz(vteFrK~msSl%@FTcci zsu`=7tqBU<$9Z_jA$3JU6#y1n0mTPF4n)liZ&fb=P7i@XL-Ypn5DA?O_0a*V=psw_ zB`^VyvU$rpSkPlf%OU=*oMLuv4$%My3VyEV2|6-3TFJ1paJdW?;DZQ?kh%*nxClW7 z)*6B!IA}_MjKhVP2r2iV%`lRERDAvVl~C?ntWS8LOi1+sDP{l;QWtV|D1Ca2;IzI| zJsilK71lmVOkVZJG=yE`{C2#O98S-Hg}R^kC-gVC5=G_~NU(XCw3l3A^8xKAID*Rh z=OmneXoD344&DLf1{-iS{2;=_3@@@T`FU##lIR``tCzu+_S*dvxC}hjlHb^opGksb z5J1iaxe-_lcya^%c+5kHGxvW%g<+3#K{YdXNL$skdv2}u9dqH z;KsEG8quQNvMDCTgM!wQaEx+qpZAtmu7DTt9IXkoMwrIyj&RArtbR zP{u-M6Ltu}u%bY+Csztw1~(n#U{(4B7Xs8>ME;K`sqfe%XtGgRFfaf&aA4OA)Yb2% zR;H@UL9&N%_hZFle&g;3d?>SMe!(U5&<61H`FhVjz6}BBy!@vkBsxQK0B#D%%e2u( zK$_@oWn*01~ZN1)n8!eEVMd$*fa6?+wmwf$jHYN#ob?Ie6oc=Bi4F|ZQ5psrp zP1s!zw-F$SRZzu)o3erwdIpIiP;fnjNY%fzRast2m6IVkgEFM1j~dr4jB_p+ z6ltIQv`E!uS18uIxD@M@*)z3?&M%ehIC{M5V70G!z|Oh{NjXn|C_S&`y`WVB!FxUu<0%7w z(S>>^mH4;<;_w7$f#AT9l0!o&d+;@m(@K?aY17rWQv~P+%mZAvuS9jLLrt0M$(7f+ zxvi^v8i4p`EaNH8ti?vt3b1!f<#KT4XRXRrjR|fe;2DXko8%>v9%SQiR)SGy>_cjDMO6qAPv}h*o6~SgOP@bKzgXA^_BoXl?KAw=8 z>L_z5*YyI>H#@V|XloVMiNkTUpU;QO)p%}$jFG!-UzrZ%^<8=&AA$52P=KPHW{0jq zL0rB}2tES$L@XRxLo~lYeY^_@!kNG+kcIM~4aAc(3krlL>fAo!o?$>~-PYFD+TLCZ zgq8uXoyn6^bQ#jACsr|z3xo?NO}l8B6s&IFx%xDG3~q7QCj^>q@cMo6X**o&RmCEaqsl4Mw^ zk+p&bLnM+&9`;L&k7q82yJ5Q2<}2sorf&j|A|pM$708vg61H2&(ORJM_<1H!ah)~+ zu18@qLo&4hWUN;AN+KBbWLW}GEOPr|5zSLgOUty&iI3gg-RD`hh%8-trR#}|cMKa6A6{vkuD!?!638xECNCiq?9=QF*eS95P zu_y?8;^g9zSzc}cFnN}llJ%i!``Kai)*NcfbVIVrO}b2MWh~233fpu1=K+CxH#OjN z#36)MDCl7WrY9%in;N9>d5tL`Uw;9#W4UPpU&C9%CxKvEKEdh7m)x$2w;*q9+siKD z7EuI53nd69?T9rZzNZ9K`?4~tKc+q7NEq*f<%Sc2a9NK?xW999@`hU-yLw*d7Zk{c zlaY~~haAEHI)X9KhjO!ofW*zmSJ>y`1-W(Cf&Os&OD;f%)U&_t^3^ zR(TViUQ0g_IlZ7RovEv!Nw;h)U>ps;Vz97 zXbz0>ZO!rtLRj+xg=ico#^(d)L-F~!T6duuP)syu^rI<##u%y1GtX?V4BtPl_B1 z1IW6MK!9F&x-}%siQEzfiJ{$lVb;x6%$6=FbL>JV^oz6h#jW4f#GD}59wd^G6lsYt z6~r@3e0da26ZincU7Q9>T*d9m6Wq@Eh>3|g0rjx6qvLf>juMz(*IKxXi;JFeno`}( zS+6f}PqwG|nH%k3WZoUxa1nW)9QCTvzTpP`M>c(i~ZK zSl`R5e0+Rd-M}CloG%zD{*mgUDJ7N6H6yn1eMT= z5%{7j72geK9Th7WJZEtnD2ua<>WYd@_b_U+dpw?8G5fMvMyL*Ob(w9~DfbH~yoB9F z(y#P!^xB@{Uiy(u>UhsBqS<@)T>>k3j%W&;8RMy4XAfgPKEAd&J!JYk)vC8x(k*S# z>?H?E_S}Qgl9H^{zXnnf3GB7|h=iW?HS>>+b!r zCC&TkQe}vfm6?AO`6S;Dt$XMgzJ;G|Z~fICPOLUIX`_a5IG1^&VU{Bg2LNJglMQ$uNa?gyyteFOHw%U{T0OCu7R#|5R! z4zM!A4{kI6`G)_#H))@F(W#y_KwDn^73aZyoO6Bb?rv%+B_TIlT@zS;88OMd zIoOUPt2&A@^7yXm{Z=s>L#5mzy4iky*2lVMOQJsMywc!s_n-N)KmV4ybn&#%P0p}$ z>tTZD{t+2SejW=y&#w3*<$@e9t@xN!M&1}Xg=OBV*QucZm z>e&VcP*%?0d%JT7Y1;#h3F}@=vnP4*~a80Gv-co*2< zwH6>s6Hd+B5uwwbU-n8*Roa84>2vu;PCSQhq1DylyBj5MWXdfrSM93o{N`bF-EI9E z*65RI@v+}`vR&n*WYNZme4}oTYEOW0$6J1_G4ig__TYtHZXHR*=gRb4ZP#Dc9wuKH zNY6uAy|Y%c^SdLQ-yp(Qb|C*&gU0H5r}Z^SO?%%ygR{yQt)&-%%Pkw)Q*zrLtRt_k zQIk__=3bXzk3?LBR=$0c=4!ZCkT$9-En*svnU~S)>_*$U7FsD7`rQ$F$LV0`x|FdQ zS4?&-CUfuHERaakfScMY%p+&7Ubi=JnOq`jjruS1MXc?>N>;DAyPNDq0dE)eCys_@ zc8iPLiP+~nL~_&*7k0^N$K^^Zb_A5>vF2enq)RPz| z_w$Y=Q7n>cF|Iu`q3NU15s@3;E|L0jbkgyg?IvH4USulQ{_@IBP5!||zWu}*!Mm{u z)Wi`~RL}M&Xwjh^=haF3PSw&ibn)W-_iT#ZGgjrL7#)e!S9vZ^z1`7Kr&3e6yz1VU zw)glKrq2v$<)4*!`Ti+W`5h5nwbYV^uF>ZYEvN6IoPY;zS*g2r=6mk9N55Pc2}$!w zLhnaq%Y`GXeS4^>;Mo3|K>a!?;gA}uBmDbu`nAo=J&m-A{Z zu8uZR9sJPW4Q4^}x>yav?yRB<;t5H(zauH)K;TVxJsaoL&I;Mv zm3iUBf_izzg}kT<Gc4XNl)OpbS?vo=NsS{L+ z&KXUY%@i>=G^#cK*iXi*ot*lBEm_SYJ}&Xob4RD?^11xw6{n1V7pE7c{X@|+FYe^+ zBD-erDtcD=HamLvHlKEZo+#1D@K;&&%L-lux~j#AF?S6;v}w_IQ{J7wRVWY{RYrq1$k7_v z{Z#10hE%`b2-+|^2`^i>1P@6 zlh?*e_o=t$`hWFQemMqp4e!gs_~&u6x6OCCG{$|+$gpQ5qNw6utN$~zw2e!Ax|ipu zXZo_^=pjowx28h!t$%z=xlq`bNZerE>?sH%3iPh3`kK@mem;#VGZ^%Ks~+p)u<&5f zx=(rf^D>JCS0QIo_=rWxrq0f7mR3Vc3^(I$jeg8_IJKAqb1`~6=G`5On7S>z+(KHYl9vd|V9-A1^(QA=(Tz0!d1c|= zK0ZP_-!kLY+3#T)VRTlT@cBy&o>{d1eQk4cdh@Nj##T!cHdRUEoZN*rEV;t&vTo8) z|DD$y$>AYpPoNX^rejiLy+P9_ZqUAL!|hlg3r-*+yp`#5i>8o5c@sAeM)Rs$zI?-k zx_60^eRIr9qOhWRU5tvU#f=9RG1Js9Jy{sLBXo29sHOq*8WXh$mU-LUKPs6A61cx6w;T8@J8^hc*N zj4l{$_4{1mAn;NDou8#W30v-Q8jNchA8c;do%_P%HSJ$GG3_mCG#7QceR2z3|J=y2 zk!d3%LoY7zb*Kb>nsRBwkakNaj9Bib*Lj4BOMMZ)3Nu*TvUgnOh)oh%T}*zPyLDyh zHqY@iD1gPg{n#qr5#KS~9YAr_D=}i#^*i5!=>*plsy!?r{qYmdE-9D3l`(JO{;Bx{ zBIDN5b=%Q%8U>yOo13XUf}5%L?7Wk&lG(Klc`JCmq$NsS{5$`%`T%^9J+DBmW6MJ-InjMH?BD!AJ4aB2Xs?y!u#R7j>jkHxBzf8CTvla+X4>>b5Hum9s4yLE0JV z%iR#m{#gkA*5CX;*#-IE(n|Svya`muvatn2q;&h(gs-4%6+W>Sel(hs+?yE13GY64{kd zo@5ulMKzUGgrdp ztsDqCyx&P9r}gA>fp_ayq-EvqA4*HH8aV3T@#OKRnHw8Z@e~qe#WLmDJ@42YOV9>i zk_-hB`|sner^+#}#d9v9loD9G*KYbvO?tCe7-2bXv9zeWwhT6uxui5Cr+#wHYfy-# zXBim5Z!2*QC}a21?R#YfcVd$5-YFkjENwq&dp)7KZsFBe_smp|6_(fLra5g4S=S?+ z%uDsy8`HSv(phCh;W11TCB-AxKQe1n@+(9{PpM9(>Zi0AW!DWUF9?nHlFrS$JGC5V zk!vG8DVchxr#_gcYmdjovaTvFLT z8$p#B${hGgqp{$EjQovnMhPnIF{JV>JuiLjTQrQ@^d+7l4IptCtc_OaTyRf5C;6fN z$r&c1L56qzCh_U$=T@qCH9O~v_tS&tRX6wNU`t8=88ZfgmUmzRr$^R{lwK6mRL<0( zwFraU2K><6qI71j&`aS{QX5v=>vYaL_ndcy;-oKjzE;ljS{1o?UmDf7?9{kML4ghG z$x+6yK^)s!k}CnxG^h3Q*&I{j@vX0z+f`m!#4$I$$ocLcfeB2=GP?Cz>(hC-)HTaB-1+78e4mIP)Rv!PFk#BK*Q^acz6|{h} z*nXa!M?uXJm4sV-7rNZ@ecMqkp3L&CFGBtKGwJoTZ87Y>8%h7&Ncz2n@GtgoWL9S| z(%oDZTAdeSi9y_hHFFnM>3{Eow9iO;#xQH^rG=_oNz5a6sf}ceS9Un~chJG*hCOlL z?v81Rv`@3qTkXBAy<+tom} zo9;@fo{mml{w?Jz7WNTjnnTvQ?j`5WjokbgyGDO^DxKt{&+oAf0;=T8i^e`M`E|AU zs%-5o9e(ZMl6X3ofRSeHS6uy4M_KxXuPvj-SoI{Q*eEk49EM!4!{!v7_>5jt`4W9( zeT($^|4;Y7E7DbMKq8E1t}l{1Eau!`6E~l&<~OG9R@H5tVB~8kl51&Yq+}~1NCO-4 zbdJNHTTi;9yYFrcYhP2HK7Qv`uS z<27oQ-fcHKQ@>Gsx3iAq*TznJTz;;jkUy@HS0ceYef7`1VQ^RU)TiH)Q25%yq^>m- z5Fab4Wv{+;Wn5!J%#r@tc`d5p?_7L*%5H8KO6)a5`(B4o(GYFB!=n>l95^lif`J%L zb4+x#%CVt|lJl(76T=2nRphe5wvNJ(Csv_+VS2PLt3KatBBH@?rb21{YIwTwriuBc zXKeT0z{%iH*9p{b%`Vr{?aeMIw^4(qhiMdbBLsBR(k!f7{VXQx9~mdce~3?JAdl^^ zl@GjKzG&N<;%7G}z$%%VWTd3I=(v}jB3@mME%D!Ke(^>9Zh?qh|84ajjh?DZ4A;uX zE*o|C^=-MAr{}yCbho$>)wXko;tNqD<+41ZY_9|-_CEFHnM~bh%qqt6p@tW}rK^lt zOOzYOq?(yqjsK9F?~d2pi%&zFZRgJSEYiS0e{=55FEICV&?v4OM$RS5CGjcHS>7x#@4+K;Nlm-$;^&!O=ACp7$hRVc11`X(pb)3nF>Pnz$}f z2SD>fW%Mw|a!|ps|GDk)aoL|^|1a^7Z-Wu$C1=JRH?kya3@f z>D6Q8OM0eZh=Pm^g4q7!hBpX1JWX`@LWIk0hI$vBQudQZ_3e{w1hY#&c67N1zy=jG z%sul)DF;6lZAtX+c6PRC{F=fGy;Kp{b6exr%CP}%AC1A>CY%IQ{U(cW-@D6Y^UKg1 zWkb15{jaZgMhLSzIm_$nxBABKtw-<}k^##R%v(FZI@@&%=4RU_IAZ{VdKpqNN;3PV zA9Ycn3^yAj)hzlI|9y<_!MY5NqY!M+k{KmITyZ!#&m z++=XBWd1Zg8$%vpw7kDKk4w*8}OD6V1p78hgNPUBnF9d8A&5%q;f0 zB5%F$g?c+uso>6Z^`Z2|qxnPprOYqnm9f!Sbb~(>BPawYX0sx&*#OWu<4RLFaj~ z?3xpSeRsW8{OZ80YCXu!tiT9F5`}v^m!BLq^xSO3A&u&x*V-(xKUq&>jb7N);_UC}!^JV!|qvMB1oAe`E8I2~p#%qZQCz1EwTs2tV!G)7wwyh7^*>_?4L| z9Puu;B@s`feApKlKwg_~t+jW6UjZDSGLlcDQ%_1g=R4JU5`668`sD`J7JIShIM)PU ztYrm0TdNiMH*m~9m8xK6XrpSsvEzD?_~lVXrs0nptx#~%rYl5`fbQrseol>@mZrS+ zcjX?>o&a`Zw76bHnM3+t_*`?p;T=+998+k4N&JRB* z6&SP=cfTRt^4ByBk999blCKI#`9<-&EXC|Tw7uN~EA&h%XzXpm*J7M^shJ9ltpI-Q zK%Cm*87r7n7tXxRfVy}&rc4CTWicr!M}UuDl^jK3}#n1S4Il_)H!$OQU*bDUn7kZM&z4KU<4;DRDD)Q!(@Qc=&$Nz97}nb~e8` zRNcAJI~J(Pj=(I=E@J)n6eiA?NFxH#qE_4a)|)p<(y$@f~Vm>5NKrSj$o#Rmjy%zQuym6^!X@{PANDP1ojn&wK+! zuFj-hSmoiHFmRl;AqFXzegIuq?Dt2Q)!7o^xV%UEhFUj^rx6ZsSRH0}F(wdbbPT`fzS+|B z{q%Fo67<;q+XV$bPc%lHxb>fz94S`3RK5F9tb)ekfa%Dob;@b?><(3J>VBGYc@_CCcMo)Hi$+CA0S0}>LQsE!Q2+y5a09?S zSE*t0J@i{=W)r$PP+$}tXlgmei-j2*XKfK)XX?M|t~$W#NRe&?%yOM{tLJN!_+$A{ zD+;^7szCe5q3=~5`xHGUVO%BOlvY+m`HQDhGozXZIAePl9*Vgr~!5cUBE}m$l2268^0IEBy-)b z&IykAAshKimFM#4_O@SYJT29>;lRMgSWylf#=%B^e)_W~xT@Z;eyldw3(NRpbu~J{ z87^9$#SzCssN`R_Z69*{YmtCpDl`^-x-8Mk)rovcfHKl#a6XJBV9ui9jcpIjNK=`@^tVg$+Ww~%FYq+4LOGz;0 z5zr6hIF5gh%Y!#oI>fHceZ zRI;zhZ0p3Vo11P2ID*7)IMCl_z3@mRPg=Ma24cXvMVb%>TkP)R$NM(oWH!n=>EoabR7o z0e#-sKRwJK&>mtfI!J3a(v| zAgp2&r3v|9iGomj72D4utyi&skoaK|-T&bv77)=Z^0}tvFQa8KHJS~uq_!x3vjcoH zh%y>k)~%LB%|Baf+7L8DdAs#6Yh2BqyJ{=ZS}SQjA)BNZv*0GDrWoVW{HJTrJUR$ M8z*b#PsgKw2TWJRl>h($ diff --git a/docs/_static/main.png b/docs/_static/main.png deleted file mode 100644 index 0b2eb38ba6feb42b90e283c8c05727fd45a99a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33097 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 diff --git a/docs/_static/page_view.png b/docs/_static/page_view.png deleted file mode 100644 index 7c9c91e028f775e2792b9e6acad3c8f3d7a57073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70353 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 z z8Inhp8dF?gXhQH`UZew(+O_|t5mRygmpp|Xu%lyt`Egb_{7W4LT!2cAuG5|Dth<^9 z`CG!jT-33gJa6Euq44*qUveP>2m^u)jp)dhn`vHF!o=l0!=o154hCos;AwIGx5o=VEyp=|kivNyLcg*SkI3g{ zm#Kxg%|iF(IU9cYD#Pp+U8W_pbNFFHRTYV}B4S(-OKRjR+n$Jla5^pMN4NhchJrA7 zsIj4oZ`Di(GRF^M%po9Xi6Ba*1`8&Q)zz?vg~F?c`q&3M89imfzhOC&p>}o?wnPRD zT69GL?3;>_0efQqL2u!wWyTIprnV>#>s)8$xnt;qID~+gG7VifA1J0U5hyQDvQJAV z2!TocZtkJtMk2?Y_(=F%e(XN21#O1+$tV57zzDSb#B4m_Rn=K{{&jLBMWiw@dP;Z{RX!Y;J>9ln zm0`mcMZpi2fHc$vJ26O;J5RC&pR-`#a0hTZY-yy|ri?#(ky&kn+D&rNIj5xYe>=tx z805^d=Uu+-7(G3S7cM>W$()*;3rZGf0ngHgzOdC~B|sC}3-s{-#EPp0MC3tgd%bR^ z7hDl)=n$s7Od|<9TF7G*RLgwwRnlp_Eq#WEw%y{!`m-r1Y31i;X6KZS-A2e(V9hr% zssE9*#S`5o6anPUE@__M2xwB5;ggkl+mTUcO6ReGVX^N~QPRr%ST8dmJQN|H38!bJ zly9EapgbdAYcpDE_8GZVH%nd|0b+ReG_d3RcemHLr%HZp||gpxA;s5WM1s`y8D3Pp8Pa@PkEfwXj?mA-pVP_cD4$XF*y zDzm&-nnU?3IU_l{GqGO|x^fHM3$htjQ#dU>ym>|nsLZ!wc4w-yj6etvPg)iMCzGj; zzTpvtm5=I0^4!!l>2=;SVq)CBuJG9@>teo?71pWZ?7B{G4I*T~f7qNtC$BhAzahcF z_8zQn=Afb+;f1#9DCxKTcok;J9dGCdWnNfIHe@3D6ZEIwAB#T)KFvW&vkPnF4aVX+ zC+vCm%BbUNkGS#8pyAlni5S{$PL&jF z;C2tX!*Y|D;i4W>t0KM$7Fwr|#Oi8imSsJFr<4{91dC9E;2Shz#x`G z1do~>vkgX=3xaLOtkh`sBEi0y34wnyKCF8EGBBkRHtw9kt7}xoWjEZl#uTOaJGKA)|&r)T4T)H+{$GGQ{d%~9$VNmNQvGQ)YrBow10BPShM7JcB5vCXBFySLK zO2*|eWIjPTcx%%2Y{^-nlv9R_pZX7~1CC39KpcbNrjCUl*+ng}V%hL=J(mkS9+Bul z7q|^h!~W!^8J>!M-Ez9xC~?qK#9I*Ep}NfX?ewfl>HlWbZjmL3ms|-Je#FB2NK58d z_(VKm?CPptIl6^@MqD*?g6E3)h84}Y`l~w_uy^;*Pzvuj;IIi?oLP*Z`PQS*O>|0U z2BPLCLb7rPd#+W?xMTqjf=0Ab!-*?OXr5K}7j49>sRjP#jfEBdKeyvPe@rrfhUH7N zU~m@ZAn%<&UwDo(qL4M%N@nve_G?jdq9rOIY`MZ^iWse>^oAqwrdUh#eaL+o2M%z@ zP*^5W6&j6;)qmoZE-uiMG(U}t;ZSpUB9tN!A%w|%18&P&pg&;avqbC72mu!w+yeH0 z+q`}-LGUGk9k73}j=eF2zFfV|?v{`_#HI3Gufm&yyTUcI0tScG3#Ta3*`aR-yma?+ z4dK5*0D~U&FB5dZt$;^p1;y0Z64YMGk{C~uL%piiy^Z?@aguLkLRD;k(as&i_D!A2Be()mni#chVw!F${xB1VGaxR4O-UHM<|Mo1 zVeBcl9#&BFO#M4%*;*^78;-u4uRqz!zp(>6XU2I(fo)ak&WjIgR}ibkCgB{E1r1!l z*b@J~d)jUCG8Xk38ofz-gHw@8sCG&i)}ONgJ3y#NxQC{Tew6!s?w?2`=?Jhz&oXpU zqI2Q@O-}YjrzE41O7p(;{`mf;<~S2Dr+J`X>Ni8-g!;pkXJ~pYirNO0Ewn1O_IG`x zHTw(sYaOT)Cyd31rUQAd$nW^dSnIs)00TKr+O<^w%6aNC8l&yDyoM4H^FK+Z2~@?g zr*c%jf3#p|eec-I?1xR1P-YAPZres%mC*s;Hr~#-?J~b75J!tT=+S>pb3(AKxNo>w zb3n(W{hH))Y)|*1`5XTWxiFm}e|Agu*fMzNKO6YR+SLnAF_es!q&8`{cIe{;a>fgT znsQoINdyB4*wv1xmJHM?PBHA`7W_KzFuh+bB=j-wx4La2jMxgCd$C;Xz zhQkV*8CijW#RR7~#rtWa*=B3p@qES2Xad&c7RThJn3d0aSGGZija?z%LabFljiejX z?#47-q#Fj%GcV726Im>;k#$(PG=tzj=Rxas&@>4Tz_9kjP1_$1tO zs9x~`Uc7^1YdE>{b7ZQv{;jbn6tvV2XZmC5wUTR{Nh)0g+mQ5SHujcjxE%NKLln|i zC%VB4o>;xN6LMp*OD9(k^26!8ogcA#xn1vYdKm;dZ*WOQqGqv^nLN-~6X?wz8qPtB zgvGU#bzgWMw6Yt~${`a3H3#z}JtVxdbw)Hq93_V9_dFf`>xG&v4(M9WN2cq;>6@9> zb@Q6lRt%MIij2#*cVS=#I7oXOT4O8u^;1J>nrw?D{XGAbP;=o<1GMixsl zQNf^NpIc6=Daj%{k;!D$(9~+KGiB3(K+uvSZfnSFuR|Pq^HV)yMl7PzO~iR+K8t0y z%uw1P0(2458KReZn%FIq>pkIF6HE1{!m6#@v~P`&$f7~Udw1}gnHCWaZ;DM%@`pgn zHH*8}qbb(b2EyJ3m_1FN@Cfu6m9ugRx&qfh^8A{RMDd^8TDxu0sxe)&*tU|4)bQa< zT1+nWjV|1vc8kA>R^f&6a@Cpek=qVi-eP~64 zwRfk=A=8SK)gfYIi*sOKRu3l#Ud{1Bx+L+^GQ>+IF4XgvpOY+h@--F z+%&-^vgE=!;9Rown6`1RED$tYoY7O&ElV5>7^`-g`mi`VfB!h^F@E`F3OsmACbO`+ z>b2~6i93JbxbU84@gO_eVJ%mYn8tbTKw*ulSHKPpDN-%=+iM8u>(&?wQXqa8h?+!# zc_c0=FbNaMFL?P@7#1#6#Sf#p@WM-P`snGWcecAApMV znP(v-Mvc50D>l9J>LM#O4}3pTE()^UvnIRJ2*{7|qtwZn2N|n~z?aVZrp(;-5%JRN6fMN=_^E z8k9t&XUeUkZWg(Z=YFw6(OGGg&ceYmcx-;Ln?@oPntdOz+N2L%yAWUmdQy=D~CN1n-&HI!1+YQt=Q}j85yD46PoGpf$ z*7|n_!984~+TDq2YBSHzQ&cp3zi2RVLZ7)j=K!d5dLBK4`?e=GWv=#25c68%gmFvO z{F;ZS*2?5Ofxc*oFCY>u#b)u<4|)twQwgaxhfNUo#tc*`)GzX2G5?UFX_q+kU=I>_ z+*bu?O_jTF4T!(5CbHaB`JTq0J;zv2u3S#OuxoPz?1*S>eQI|7x>D4O(n1dB(NF*` z;b=o7!8)maQL?C9w-OCCY!LSA%EJb zyZC}xxb3rWdg!6u&=!7LrPm-Ny@vR~ll}Sp=4jFjcnuX@;o=k$LST1m5_Rv#!POg`v=U;w04p%0T#d9w!wSKEwFA7n^B5LOSndwbPtP zI%)B0XzW5JafZIoKFCWAysgRP8yFog;I`jmlT=7|7gQiNJ`Xn1Y*B*gQH%{OFuO>jqN^aYFlF@v!E3mp(u2XcR*?XEn|9{wf>#(T1?`;%8 zKqVFFQb9txYZydSL`p^JZs~3qX=wrJQV|g8?v_DXL^_7<8ajrVvw8CSJn#2+u5+&I z{o_5?b^ZYb-JiYJ-g~Wkt@~b|v4S{7wur#YRU`B!q`&g*kM{(aewye*{de=(PHJ)FC$)F~KuoyGErG76q@2drs}zIY4(hN81c&Fs*-S% zb5Z%x;PCTzz{Bj=82 zwH#Vy!XK;Zt>BKm5Av)|-V}`;Sq*Wwdu$Zy?f>yu-Q@( z%ocSN$BiFn6BW<8K%Ip9q9pf+lu;7yQwl;~p0t*M`Zy+yya17djWwI(8+l@=_@fBD zl-E>(Wa^HIEh0<8Q4Thi*j0o$Z66F<5@|6ACsBUc&T;G0CGA!aAuFe2Mj*$z1e4 z@$Weep2r3L{4O5Zm_<4MD<*)wtvT(^t{SeZkfMVpq$kqteqvYiC%b1- z2c+O3;pAabZ&;H)aSybo8_Yaq&AKbk?ksBen2edkRHp)xmDBO0wmk6Dz%x_|nd==n zYf-;;#ze}Bg0s%ry4|wOfV}wUvxm><2^-w>oOuJ7Xky(H|2fs0TMuto-g@BdK{Vyv zA?A3%B6GCmXtsiv(3kPSR*SOa34Pepr^la4L-})J$L%i58oggzSjrEQF69fCi2jzO z+g7R3)Zo>c6v5Za%Zqi7qUVV~goI7s_^%!3sj1nHIfr>AW@M$!>;{#cD}LnHYZeb~ zd#$?E7BHB1GD5#k`(03*10n%32Yn5>NrH8KDPmWb__t?6&C^u0E>Ke%wiGx#G zR7~hoi?(RB>1FvWXGUHueuB@2Dj#8ReuDR$RK&{sfxuthD~iezmH@uON9%bfW!x*y zN=^2XiQIj+9NO!Oo2E1JW_BH9FLO$%@ftqA;20GX)lw^8_GoU2yIo+^CvY)yTKeVm zC71c8$;e)t4(f>O+Mb5Bwk=p(eYx1pBlVFuVq3Lt-f0ARBRRHYL;-VpJ@|U!GCD@@ zUj+N}+~YV=bjNLC=gG+Sd-RH;OUEXaPl#Xe&Oc^)Lr>hFHK~<4!l1~unIgAC7ja)l zhN(~8%fd5LBlM((&|mG~U7OZf_3k+3yC~xJ5_j)vvd;P_e~srQ`VW#-%NF}KqECYu zwpk6!^owknYnKoAVUfjBs)0hJ->SSwMjRo(Vwob;>4=^0i;#xG`1I;?_c>1dx#*G% z#S`q>=f^CuIjGykVIdG@~NHPz&FP@N%r_lEPYfYx8e!X?%t7FKcH$3Ha{ z71_eo5aJ6&nWlw0V84Gn50=3wlbaH@I!B?fJpQ!*XTO! zt`r_N48%0kkGZjmBBh+Sy&RGc-5v^HhhZh*GCm{AoNV$=kToiE!toHkKY@U?vS#%3 zNjYiXU6$QdkQ56#GlR*`8280{59E;+wpqn!d@%lKo>Ugx636w>UsoG>xlo-hPwIZ) zgp9T5r-N?y$L)SsUr+R9Y1h&!t=kkaT6&YHnW2|68v?A9;z<^MPVSueR?Zd{exu0k z$535CQ3JyS#uGXAKx#W{pK(<_X)vX_Daua(4M?|d5c#$Y6VpLqjvY0*>vij+1RS=7 zt85WVhcnM(nojvJtnTkyCR8x4FlH@S5oe6XPSCYk@g9~7e;Asqoy-75+%>SUZ2xR} zlL`yiY=OQPo4ab>N)kEl;7{v>o4HTa)MmeB-DVx9q0f91!}8gLYeG4FabIF&whelSCM4OV+Z|{uF zT}kPaWX=nOy2LGFj#tn6SrXZkaBaW*WxJKmA>JQW*z>>v2b3S$u`Q?LHqZOSZ~HVb z&57oW)C*7ObL(hCX1y@=jRyYfU8QcJ@zuczy`tsjOe_T znK9=|T%T?PYJnBiZiWf|`3<_&xEv7pK=rnE@E9{dHh%2y44$b2l*F`IzFg~k2dj;+ z=LL26bbVXh!X1&}k&4iE z6PcdU>CqazdXlqW_R3zD&6ri6*$4=W!KaLL0v=3IC2w953)A5Bu@o@LIOlTK!lO!} zGCNjam6tjbYix@uZ4^Ff<#cOpYkUelYhqWDOgDCLdZ)sQN9~I52E8fnwu_)O_l96ePg)LX*v&&kyM7#NxS_9inKX$DT_OZD?Hf=!(ih21q=)|FlsC%!$ zkn4Io^UBcK1f*k+MQ4)%g#vFmx(c8~j^Dt5<| zyES~w-?6d?UQPe&4z;{A79zAMY}+iJ4~OrfJ(KA#W*w_AuUV7es0?jwo9~nU=`64D zQX^|hnJ{P$ky=eAXVG?@6WvVvQday}e7(odGT-j~izTP$^jG>k!fU<|2iZL|N;bF% zW%W%gjA^&_PI6FVML2@)m=I+%Dm*C;z0R8Gs+SwKiMajM?@)K8*r&SXqin+S=rP}w zDGE&VP}W7(bBFWP-K6ksd*iGy1bTxEdb0i~pi+CF#}E7c1t`rna%t1|leb(`wJYaV^Y5QwD;2CVQ{`9#YXkAsIGw^Ohb`XU)p-q)q z0#u=}y*YWao$Q}wKNRL89kpRQZ-d*~igtI1DP3~Dj|v_1 z72jlKbpt;yNI!-J&OgsZ<^hqmW>ZKSY>!FSq|nOetW;NjDI`Uq#p(6Bz*Mdv!XbfH z%gsX1h5QQq0dTZ!C@RCc{r^0me<`JaBxejA{A1)&7KZCWRmX;~dT zq^wJWn}H%aEbxbPA7GUoa8ivwTs3QIp7Kn~i6w)GBic**(G+@^%>1I>4GmroYer8c zgi*NM`5D6(zt?}JKs|f zP!CUoNFIRik>(04zP`^6e?U=ek%VxpmX7hxrjA$kHL=mhjM+(g+b#h`^ce{SGg3`3*3W;)l^Pw`VP49d^ z2X(-caAULXK#AyW*rPx@deh%036E81V0)}xQXP)%|G`lD%HF4A%GP@DD161~oPM+l z^dyX5JlUt4H3KCilv3D~^86N8^{f{@m7E0kh9aZUwkMM-dq4g8PudlA&#?;val`m^YR}_0(PEFGoij1QG?( zrAJ7f0QYE(TjVL%&IRH@kdwaB_VGWa_;=Ryuc7}0xHr{HNwpor&#**c5M{uZmG(opz)xH@$JTh21Y& zAsi@?{(~X}H)yWO?rPDR$@ZcIBzcZp`-}uJ8l%NyMETJq49HyID6Wv*WbjvuuubULjm{K-9~SgSouzHxzVjbB6kD?1$#+&KQQxZ0q{s3aD@v^vqf%T!G*k5lSK?MdK$t}oUPXTsa}FcQ7Kp@DPD?F}1-1YrrBi}IF2cZDV7tuFoS zkj1KQncOIjImeUn3{H1uK>X%Y0w_v10o!|~PnV?wtcw6KWY`?#_%U9AbK zwDAfgk~#+W=!xkf1}3ADHpk)?g_PGlRIRt*Mpe(Y9Ogq=33;J+)c#>>-V_bemC*+n zoHw2uJ)*!{Kg#L|(;|5i{kj!Vn-r^Tu%W;~E>yuo$ikFq`0+T&okvUcxt#N@w*oY6 z161w9_5t|Kqe+BAN+S|1XZ!@$=-XkJe%8kqF=9uZA~n0zRn=szMK5k`#q5<=P^sbj zq-rSoo;9ofLe3)h81{>R0F|nI;w{~iO~&*0@qMP>*}87(E7=&MBSY4FMHcj5X+M_> zobczM$S6U5Ncx^UMOW_;6@B%M+~Y0nPqs$1jSsQ)vi-Mw`DUQr9PbrN#@i0$F3B(IifKnu3b1iom(Gu|Tv?ov7U+cT~=Zj1+BSXXm-(!&reFwx(Xr z?{_PcuQ*v5E(cB!DkE;BL#z8{b@Hy>Ek8Ul0!QP1a^0v4<&1cq_bYWAX|F-PRS>6` zRRq!p9NP^m&D1y)Ww(so3-7+&PSXr>D&+_gpy)`j@vK7K?x=4@3}+p#_M{1|^gNB(yinN{}9BpbG zDwCOGn{g%;nB$kT?~_J}HYv;M3&$D_qRPZZ0|SbV{RUfDv1%UXZ`)s+KP9_XlS>qc z*wjkLR-y>Kiw+B^O2I7D8@>cCTbxSOeh%MpHntC`F zsgwTWD(~EBN&nc{qDvR=5I>|?fbX?gY|*a%Xj(hE+)^Aaq`+;c(!y%=j=8 z`S3Uo5DQP?v2g#~s(LQcP{=##98lNX&?qYZmGjqS8J< zgL3ZW3805SImSs--Jw$Qjp zIMq>?)@U-f2Ox#Kv4Msm7{fW>U7xZF=McbZLyV71h3Od=uJZacPzGoD0o3DK8as95 zi?npYv$!aRWK{^qk2M6GZCx@-UA^{94e^F&YCl`!oovgT! zU#3^IVOk`#X=aW6==?b>`7U|fOOJXG4z)`zH*$&i-maAqwrD#z7SS^x1mWYp;;lC# zL*Q-J*Y)2HK{@WaoN?6gC?F>}sf=qf!(Rl)*23BPUXqx>eQBp&#>G8fJeUn{N9H$t zSD6|2;E7+gMb+mDM#9;^)&l62izwO?ZEKET!0h)|)Qc(yXNH>`iUaIbJ%4p_9ghm1 z+gUt!_jG5;O~G}~v`@J?)`CMM84%=NE+67j-rtQvv8DHFnHdI_GNsLHyiAU0%$ zX~Sj4YW&-n+0F*a;@;P<#mA_!e0$hyihMgYLnJ;(GmbT@>`cL?;>nxbt$cF+YrDzd z>;1-o`JC2OkAVQbdJBSyNFDu|Lm37sS~G{!s=As^<-j(v`H6jL)oPAxpM=*V(CXD| z^UZPGBIJYZ4{SQDOorOccgnD!sTh^5NU_=U+;}IW}Y(y)= zvW!c{!aW#uyQ;o9*6KF$z7UkdUKsUhv@ozkf!+RR)Mh z&pd0Hvj#g|CnvaL220|IpI!I9;z(NzPKfOh>c6G$MXPyGT=wMVzeZ>iVrXAej4va4 z=Q>^V73bM2LQu*qAt6xLa*I(E+^Qo9|B2XOE?yKT3*T{eu($`)k(uXII>|Hj6(Vgu zdg?nFF=Xf-J&B(~uuUuJ(?w6Ljl7xL$N|AipMrMuaZNEN$6QuRo8jXfo&Q+h=gSeF zbN~Tp;3GB3nL`eNDoxVPW&#nJ}{`5qDdhBE5og z$vJ(jOTD6|kbBD(CjybQ429Mhu#^#NRThR0HoE&=j`! zx>;R^lT&d`>oYRKmco18A)qv3vB0weOno!oNdAUKI zv}tuF4mZqtvvnKK{hO9t8&ABSKlD1ohxH~aHdsxRNg)!(>Y2+fkXn^9scXB+WzQl$ z;&2ix<{Qc51I-ucmW3C3Uv2czu;0M;UPRSvu~l*|72M5ooGrzQ0f(g%r=+WWuHx#3 z1#sc1@SR@7YadhJIwKyLX8&{hcvU4XXS?CGvcN%K^dy_TGG$Vm4zv%_z!zOa*D<9#7}1uwsIvaKBRu$a~*oV<9w z#;+yHcTGXtKxWb(V9%7*Peh?6?pa|MV?UiwO*Xp^xp2im{;G+RT0Ga`k{N|)tflDA6*n)x$i$5MgHLPEitJ!c z7O&<#dpW@iRTW%Kxx8hR-Q8RWTAnaPXS2+0a%eOzk|tzelO?QLrCK~roS+i!w~cRy z^b1U=gLv!3CAlAkH95Oes7tI}`xq0%0txwSFrxYugv)6co;~Kl>N;gULf&8UM&E-a zqMIAOW=Ow@=Ac`f=*!me9CJlZ?+=I2<`yJRi`_<>`pYQaNm8*o8KGOgq+H`;!Lu%G zqwl;ett5%{xc{Alf;YjMTV`k8@ecrTqJAXfsPrq&j7@Q*ihGC7Q`*|WuxHqFM)1`6 zr+9xLI9R*xygWFzL*Hg18s`X7Z6 z+<4AQBcr`O!NU9efr*aN=2@y!j(IAzdS>2dl`4O9o7hptE<6wwiVlLqs#7aH6;_X^? zE4`afXHX>$e|2Z<_-k#DLqgcos04=u%Cqd-Gu&EhmS2bh9qHQk>wB?5wP1QV$(nO= z5b@@+2%VAs5Nk%ZbaqXOgH-k@`9Emjs4vG#bTVTJDWLG4;hJ?;cs6%YLfAwwg% zgS~0)A`y3TMjGI1XXUd>?y8m=Zc`UR+{CAz9kaU@F&OE<+Y-p*K>b5y$y2GnMt#^U zfi=me+mcA5QYm#kX*H?QwI_}8WpHfy1~lvUEbb=l@1-k0Y?pMGA0aJ?dpAM+&yx%Nr$>psp z#is1dIF&#Z@kPpcy8|w`8GxR}`Xl#gVG0l*3*G#{*0rm0gni}Y%*)GEHI;4w zt~z>CcS+vti)HwWH9O$`DFDd|PCt2=5%NSs({dgp5*KUyTKKVNHZ{2ql9pOWCim6L z=jnzsfT=u{*U~sDCqpg+$V+ZRB5z@F0uD*hS4*~%u@by&AABJ$Ew`JPz+gaAr#%7W zYe|o8hhbP8&%L~h+@a`ePI^h?>QZ+NbQzUYB~@2H=-z8pBxZyZnUktAGky2X7a!n! z3fLP^BD#o?Nw}Xz*#g#iQ;aD<&5QTozS4`4A8#}H#McEKZ21E-`9d2SFR4M$bF&*s zXqeXLbimVUeP%EdJnV9L>l>-tC+TlSS^K5D-n#DFNMFL!`M2;dmgZhrS3j{Pd7OAE zF}5Z2%|x;SYs`fiv2JiS-~ISWghKRr%D<~us^cODopJ?cMHj=gV z9QPk2t-1%-H>W6obP1HzN!uU)Sqg0>)O@nlL_k<35e;lI*9-wd@-+K^^eO-P6b?X$dJ-sy!&H~q8px*M|Vhq_aC|IZr-c!r{#%GJ8|u6&i- zZ9wjmsWO!qhT0an_eTXdTKPTY1@rdT8DP^OZMFMjHi5i6`~(k6p8pTU;QyH9zlyy7 zVGO^2)rCVN{^FW$69$Lkf)ezc-j%(7&iMfqF*(75M9TIiP*4WU(J`D6LxeaB)7zbr zIuAey-T%mGOtGNzlp=r)3Pd{wx;HW4Unk*iw~?H{8jr3bj+b&!L$wB2EN7djmMWj- z?Q>+tUQv_KgeUkj2J&DeDOdp;QrmU-K5iRrfDT*#+ur|Likq5G56qQrre#6WMX;h| zwr}4zgN~IN0Y5S87rmkPtqF6Ow|zFX9rwfih@Dl_;&@@OX+AhZq}0$=1aqbg*b5S`6%+#ZD1hwf@k<=nB!gUZS{?Pd&({U0vejLykzMD9k0 zrV>{3jCWwry4C4#u)CQ zR~e6aV274I8cs~2f z61KxLmFkTLseQ7yoB~zr6Q9x$2vg`~?5iWB#A) z_kG!f{|C+z`?=N4R_8>;|8k%H-!BNH0@~Dcb6S}B9Cse`_ST)vZOnULT9G~Pq+WS` z0$rxbpUFqGS)`^cljHGKhSEr$hd#g2p%iz}5rt`IrzLJQySl$Z16$@^>n}IToHX_< z-A%$R8u-~Dye%SsyGKF(XuO`B0MMV z0a_F08g-G9=fQiY5ufJt-bO`T482=2rx)}21ZYZre+|Q@m3PdqePT5Jc;OM7II~=G zhVh>-ED0r+i&LHp$y7}0dR4r4cMoA@9x>0&cfIl<&!j$=;&(*5R#RBzb z;4yl?Kj!Tp6EBM126y2TyKVb}MvTpEpi{gez*KfWCLA33e@9hpIsSNKpjiDEqGaw= zzfiyZ3uwJ#Hu_D0^iN;>{|`(ySRYfldA1_q5`!j_9jovpQ{-X?!b^N{Spg!;%F@Ld zKH@a-PPB}-Q_<_T424;Fvt7&)0oYlV$ELo_)WC)P0Xh<+P1i=~XHfHFTl*xUV-t~5 z6d8Kbh}xitWd>fpZfXXdX&L!@p(08A&FYD?zhm!z4gkt7J~ln7?M*+ZD68Q1LXQ#s zyym*?*?Ik?P-T{2mss;Fv(X0c)c%0uF~*!1Sn%0SfP_d{E{1a%-`4SLmWg4qsqG+d zc@$BVq~N%VqohZ{NB~5IneIXpwu^Rcj7{Ia;!*agqv-nw6v~h8jTQK@PfhA7>xh0j zd(7~M5amfs$%VY`!R*ia&r%} zg&ZhQZocXt}EP+Zi<`R1v51IE=z^=eX2 zm$F5|!sDGc==+eD=X2hUeJy^pwg=@leT1|X*6iGX_HQDSe2)_e^os7VWg?sa)Aswx z4{XiMjU~dVQDF0VCFA{iGTMV05BE(duH$u0SY$Na{4sh9Yf)ID&ph>ea@t0NUF=!W zNzi5P5J9@u$&FEAipJ>OJroWxH;dA4|T9Gp;#bl zZwfKrGF)!pM2h}YZr%Py9!9ny-ZM4%=@@6_h9ZLmMUxc9$e156$bamp!9aOvK@|ey z;XcXOv9y;rQPTqC$=pEJJ+5T73FXhi_uSFkD9`9|R=m_~q;&Yr-i2X=a33O|Wefu6RW_e4jg{9DE(o=BDh0(8eK{lmAjZ! zO>0caxUu{MyMh0)Y`=A-J#Mmhh+ihjn2vp^#-PF~4~$c**cXQQJ_m0RPz zaO(-mch>nj*RxvtyW6% zICU={(BcK82C{;WvpVEM8X|9`c+VD(0QUMd!4L#USN@2I*RI*_J&tTZs9sU2ZKScR zseB|L4jjmRg3j}?@ej(p=t){CF(vWwZ`tl*fxP8oGR_{1M>!ZtvGiWA>bCgD5{IXF zQyfr!p!A$oV$Qu9sBT(h1X?{Fy?Vu2F;$+se(W#2(2YGj`}Fxq-OY+lLS zwS2x!YAXw5?B=@i2&?t?W`m=0G?o^xJ&KxPg>rpWnqREM zb55PwsPEv^%6>4yNl_-Wn@97KFiy_?Ty4m=8WcG*efU=_yGb`~OoM^%L3|PjOm@X- zQFl4N=6_OK)4hs*3NFwG< z?%c#I-6{T*KvpLCBZH_oHw(SUAFwp!v@O-um?=Bvy1;f8NvAQaM(8m`(TAJV_gh_m4Z-4yTq9@=dt}AM8uCnjG{?P1e*d7j{ zOi+2XYP46k(cn@N^3+o36%>Z<=zjRyUCrY$wI?b%A|+H15+!t@?{mL8fD*dzsZK<^ z_a6_%(v-8AR>mye-hwhLcDCj1AC%8sku8STjk=u@myM7_)l^rJRhe9EDky&5bRsIk z5XH~$mC$WQQexvQ&}jU$x0~=SXt?-MnI zoUzn}LLc5xb+E0?Tnh$Le&Zx&|+*x{~D^&@I?STsioCaWrz`2AkXAyMRc6G4> zrsa5Oa^L9h#D-ArgCnDe)KcL70Wfay>iP5{UDjgB8v?q|FW1t%=M2FEBFrcMA<8mNiTY_7-kFZrCpQ56<&;R{eurmHawa&)OY&C&fIB}> z89~5k+p;S^H5Hmy8{?25fico|0GpR^y6InL>s})|t;0 zil;uC*8tYrQ8~xb*iegp5}@BInfz>}+XmEbjt20J@`j0k{wjE@qPH zewiJFiF`3&me|Ugv4A^$I3e6;cJ846j$2s_P^suw=aVPuRhR#}OND59iVDUAhpl!w zaK-^v7!(<4$q7ue;+E!5%++__HlAJstt!cMG+4hU0-lwt*i86W)Z-0^E+bvLIC*jY z-o-cNgD!{jwrOrg4QY2N@;oRmdd^XUNTp*i^78U(ad)t$wUHMC3^E=SljH5b;22>@U1n4_W0`Hs4zx8+ zo~^)9pFnmOeUt*)hQOoZAxXISpU8on5#Y*;d-#XjKz4Dnk%%@zzsH!|eJ_?)ZDJG^!lv?3j5aTflD zR??mhpw7b`mb0G}0F2JA{$u;SRQvk#0fyMsGvAUihf! zD&@Ax0S$ZO>Y_A|wgCbcu$s6XK>tpzyx{HC^LIYO%US4_+NB>8w59990PXDDqZD&R z%GmjqnJL?w!+7$N&pCA}-?vi`P-HN=-pR!?!@J+^=Z?&WH1|fG->Rv&uGP+;kA8Ep z1>go=^tTw=|E`e-;(4KuynW^yfzNOC{EbX_If3W+f70J0dMC5_J~(?k(=Rzz(NQ%_ zt&%Rk5=yGO{J35edA_*>Vh!c*o+?Fwok9`x@&8do;)VQ=O*of8!gSH#8>uc3GL=BB zyMq6Ho?!pm*JJC~)F6Uv1!U9FUixqK4BFqr(5`+c{FP+>L}S>d=i!gKGnwMph?J3m z)LoSqnysMM_hq%D%3zua4Gs2x8RQBWLx3hzoa*!BV)i%Pj-Q$n!7Zjn8anjg(LgM= z<@VsQuP>;iUG&fVk>vi){Oy=!$1}U#=*-<({>Te%+EB|3{w=|wO$d#Oj10~nEj|DH z%3`-k%6~W+Td0&!}8>*tCxZ1nwUh&+dJK zRdg_xw(e%z8c9!#Lis!Kef`Lc>+PYS%jDLN>9#`4OrEU~Cf7pytqp3W^ro(v%+6Iz zL&xmFRY(a?zxql6DV5u}2Q`*kal)HHC7@-*7kA<4Wo5u28H=_9m5n^<*Vq5?z)sK+ zX&9V#A*H@^0`F%gR+?Ji;f780zcmDnLf3yxwjZ|SCS6u8@=bbioCKNaS zjy$)4_a+^CUh-^3kPPANZ?ErAoKV~K0yMV)7XmUdkd1@v_8ILp(8vZv$3_IQ?~e&U zrzflhK#Lxnzg+Y?{AmQ|U)>Z6-e_e;?d6@qp@19xo-~4F8f7W|YTJDLmv}qBr^)YI zTeTg{nStIL2p&n)yS{wm!7(jJIu?t~-~>b3sm{1apMAPllz~0ylxcpg*?TB~6*V?w zZUVB#wfm&~mX_f_0+Igkh8iRiw2LR$qzDLmud>{+bg`f5(qT}py6-0J6&riz`Icp# zCoDMLna=GpA>&>0s6KVL;6&~6>K;^7Av-I@+AP>jl$f_=r&q;FJL#Lmd0oFZ34il3 zrD!My+f23W!?{U#g{}Vbi57$gpX&EM73S>iOZ`S)l2+jUskK6_FWI0=1{PKKp>a=QpgB!eo){x|2-U^b=wym#asVS+2LoDlET~5?o~{ZvHD?210hyO{Kra z{`bBHkPNr3NAe3^h1B2Qh6@Q6X!Z{aki5CBlpiq{4&TX|Q1^LF$YSHLv&*IcHC=(f z;!dAX%$x`+_?SlTm@0d5{@s2LZ$Mi^I%2`=H=y zYcLd4u%BMrdyMIy_V#&HvNbi0Ny%7FZ8+lR_?XfsHXs k(Ub5nkQn&i(=0)Ne4@-3O0$cV)istY14xD=n3$fuD^taRBCQSGJD9z~3ctes9;-=#`Ez&T0 zmaZj_NZ^}>(Jdk?=F43-KQ2CzDq`^s>2NZ;C_uX?EQEV)Du8s$B= zdO%k0>OA1J&*DGW9GqtiKDTH7A!^6_@g+EZwaX!!Cvp1B4~BLpE=A}1WC(MMA^ur<_@y?w{?jkW(<=x2MfE=BYXf}x5xJbtZW=u@@ueVm zwX@yj*Sy71kMo#kaa3EYL$xj~&4xrGmD{2os=YduN_z>;sIo6q+-YbM+}*BZ>sLsr z!t3GtknN4g;KQ>)Ijn3%>YceS^Fy6+Q|3&RxxKNWsU0KFM3!H!v@4m|aKR9^+P3z^?S>`^9WoIk zQP$fsaNi@d*y_+_XRBizLCpH(4HN0t@J72DeIv()K(IKW>02$1OwDSAr=#%CM}K92;N}}Et zH8&>_POPox5|E1u)bF0QAZl90A9lQXrK0hH4IbKs%|-EbMlW6ChexH8MD~%|>rnBM zN1xmVsV8#aQu2_b z<_t>>7hxGsc>$B7x)YumlCa1(mz7?$0qS*<4tq{P_+xguoj8ZU4C2cZ z+a4#?HP1ey$df*LNq23ucJ!2am zyvJe;1vyZvWJ#9%{d(Il_|C!fvH-8c{AJfhEEzMT@UODAMfiw)Md^Xe?B`*8O9d0( zPgETD2+GyJ_)$14PTYY`Y-*NrCbHj5cM=81bjLK*n5WTn>9Lhw5QF2v72hduT|TGsH56f;?#pLr+WRu0SkMtB5_{L-%Wl#9(`@H|SmxE`qr-&h zL5M^AmkwXgzE4swt?o?P`+3ec{}Ko-q*=pm`570phYQIS9DbHauO#JbgyF@lUm-By zNi`uoc3|o_to5+)_R0Ua136TmPqm~#)te`Idv$v;%I05hvYD^WF4s`sP7a~-?7X~l ze&X{$8l!ARg1d+7)s8bshl59ASjGK9k22S&@K_!c|HG5_W zG0gR2yGxjRU4C{WCV1dOT?81J;r}~n@ zyyO|VZ>!BAlt*Znsj61)8&eiXB4x^zD#nFaJcz!} z9mSf~QgKF{@rJc->esOV9Tiq%(+5`7S_h9?dTg)PJ{Q*o>Nnmm{!#fr<466*QSQNs zJ*&zq484uOo8ut!aM&wp=Ub*QhDnzIN&Ehc3*b@#A z9=Gwn+_qRNkQcdeYxq>$#h5$35Vrdzq zN$18dFrY`}g?y*wy8Q#TeO);SDj?)Y*Yx5;-~Ywldq*|3eQl$NA}Ym3ld6bFFVbr) z6zM1+ozRiqdx?O6f`Ewh5|t)3^xhGWF1?2i(n1L(fslL~Jx9;+{k?bGali46aqk^( z{yBJ(z4ltOt-0oWp1rM_ZuD`9B{e;~3ULRW#RG$#PMYN+lIy-KW!+xVy-VL_0M@M^ zc@XivXuwsmUP40Q5YAPttT#XMO{m^C$s8d);P;-O@ypE$ZrYV^t3-M}Pmii+a3cPL zPZfLzHDp|Ew46^pFUHJYDCMs2s{ZQdoke^?(!GA~Wl=~2uJh~n#oF=xm0gr5H#e>p zYP<5~8<}GLhuel`xjo8{gr%_~7KX_UH7&w43m#(J`IUYbHfz%Mo2dV>#kE1Z2Cvv> zI;@eZ1UJM8kY>k71%l?&DzI>LB74O$XnBKKjy1!z8AIvg-JGP$t0 zJ7&y^(a);fc6b4tb9NP#_^_*-kz2`GeCuXvN}OWTspJ-X>Nd@BJqtFH&8xDHe7Gt| zu0zjP`kD&~TGLI^MvN1ELKpX>t4PecR>9&?+o9I&lMe1vCU2fZv{S?qJfi(B+Phh? z6!t;s%`VD{!9aJF!t%hwf7$u)?>JUw_JBF;?xZ|o%H({P<~3Rxzc%!V$j0VjSBW)i zpWPXVU`02wKCW?RRFStSu%0Dpol^^VtkpOzqWM+<0P{U>k8V+eFO)MG$NE%er=AzeM-eG06uZWqLQeN4T+uPTjK^7so4V82-dfOKri z#>WQ?O%wvdH%ae~I8cEF6$(|qBy|{*1dW@!7j{^gm6Z8&k_ft0PK|wff*GexbqUs| z=bofhrY&moq-4t3J61n-uZRNd)bX5?XY$UuGD(oGjUYCsVq4Q!0x~>W(qU|rJN-ca z<}3CDwmM3WgmGeW1>~xdMd7(eHYH+XHnxV*!=16`X=DA_I#4%jgwCXRcaYecxi1^f$xE!XZ*!3lkbLOFH?JovpUp_aE zaELYFVF91L^_JT(Oy+dqgPTn;kLQ&vV)a3&V(qDp_Yr5TAOFrcs)3zND5dF!ieaRH zaiqZfo4ecQ_reT391!iI#^D*>G%LF$D&J21kt_9F?M9NGB08vK0~kM@&tu@m zR0mnTjUCoiv9=6Q9*9BA91-!sq$LqZA|O~jdQHaH>`}>_n7G7E!;h~{Gcm=O)Wa28 zqT1E&4UXRKN_Y510j72f*!45{O3WIkL{bigyTJAt`+>mv6n?Gm3NNiK#bTe%5t$_# z$&X`P{%u&Vs3HW3cC+&L4hYfC|M4r0UEnLe|L_$s44RUcJBA?CIPWvZH{%Ci97?sX z@N)Mwyz=}VTN#7XdIDZ~T4JTU|Co?ew*r#e*x*-c6Yy&8dC5&MJa2iYJ8esE3t`ek`e)5bm zhTz9V#d9p7#nqoVuAE*JMI!q{M*cspvJw8dhX13tYPuF2EGs+;30#It0;+o%s>HaP z)T*Onxw^Taha&;L%&Gqjhzuigs(>RkB<#mZ46g#hWIfo(J@Qxoq8KW1>>>wU z0(Q0@C67n9#`P~7OMJs9RG#px5Z;YT+2xKDP~wUI`?&y-QOd0s7k4!vwY$f^=eMrK z9#nGKL*yuk8{Dw7v_1;;rC(aA8(c(Mro5|-cwS=o&^F6sXEOB$eN-_b{noWRPTxhY z*wIS#^7Tsl*Ux{9;kJDh%#IPe zQIpcNwlm*jnv1P8Gn?Ru{|03tx*yae`T;GJ<*?#-L^(NG*Pu937LK!DCoN|tb=;cl zW4O07e{S4VJ*esYhhO<@o^Joym^gxkig!a38%Q+3uq#*6~95nUVNA9Kj& z(4stDCPzFa_=E-JU4-kRkNchYSw7GOC=OA$^;BxB!x zGw+i$8y<-1i5S}6hG^j zooPIzq_qv5*Dx}?kO+ykT$^tU(50zExE6H*WdwQdS*ZL?aVpu5TEbuE`yfq$u!z3xOw~B$6 zBe#dxmH7!A?y3=8s(p58g@F&{8UWj3aP)8|oq^Z*Bpz2md#_u4ZoO*F-`L08Apa{B z)v9RrKK2C9&2((Dg2bq8s%e@5Wt;RVfm z8O4owfTdp_8|b*}w|rrd2<7aF8J`+( z^2A36z=I9(5+TT)6`im8G}@-`W}GZlXzkgQ3RRh=Toane&2iEdDftxay&j*|Kyet+ zf8LiOv{KE|&9fF$Q67Pl?(I&s+@8~Wfh)1(!{H7#F&3I6x|?nrMKX0(mCC2C-cZGX z5<(w*2r*;}w|`BP(*ga67J>qazu5FcWKXN0dyC$t@~lF}MY4%ily{UjbFbfbOCNzr zd2UkEz4^v}nuc|g&lwfbz%<^7k`qxrn1WC36?1ES37}+rpmiHzdZ__XQ)_p6&+{xq z_3*Do`$sNEPBDOGv%ck?eN4s*r_whS1v#v%M%=#_RO9h7X@(+c)?QCxYaUkZWz$dP z|B$^ZFiXU(3>qd>;Jh~FI3XH#ZvT`2$KQEBjf}?(op~%31NX~uvx)_SIr&awMZk^T zp6LwW)->5D9xn`T9>)2`$1l&+nqLZhh%>eang-0;2Pq*Ym%qz-T|kJmpY&%-OU{bf zZ$Z=FDy%C$3jBR85F`c+HUuzOz#}?O!{Ap+hc85nFcMtN11$Enw2F9q^lF9X^B(^B zQQZh)*^+=D4Kf`J5ieM5z)i!B*CYKn9cF_UQa_e+4=FVKn^#* zMjJ`V+0K$8h|u;HSO3%c3sz+i1N4L6qkV9zruREpfG9xiO6LcCM@Swd5nO+&ebel8 zUr`A1=Syv>IK+2{D{;h+M2goJ(r9iz!`l1C7sx75o(EXY3v1zo#EM+Ip!zzgl1pbF z0Y%=w+5~U1_ODc!_uayDuWQ0Qu)E}aV9u@9Z^;33lez}AKH5zyB)gW&&XNW<5w3In zx|BJ}zwVrH6_CcAcS9a0Hixai1FSvp>B~1Knjmh&g*}MIYoW8#?ojEiD4vr5u0ug= zUvG-dL7B5(l)IqfW&L!KjOIp`UpolFf~7?B^v*75`#!gTuHX*DJ+{CBqj@q={-uw% zgcRi<*$64OnF9%wb@}yzM_7($VnC~1@a3lUq-;L{%VHJm$xx3+j`O!Eh%Q z^}st+jBmSu%6u#faa+~oYCE~g_X%l@-+`P;Cf!!3s&0DmFlDK~JLnZ0%5?SOb$dHT zxVo0<^%=!H6K*uZ?ovB_uK{FM0dl>`BUxP`N~;JpxDuo*+JV?)o^gJ|&d>$rcT38A z{l}>17xRHE`l7ElUJ>oa$XZNXNas7}B0tZN^~q2#QA0B*yz`>I`h!`B?CyNFES&3f zao$u2g7UjU(_JaW^a|E+5sEUuyd1cR9y@wHthUNw{)TKE3vn}@Y?Y{Z-S+iLwLBB+ zKoSKW^?hhp-Y;JcT034U{*b9ov4MMJ=C5Yf1U=pVenvb@=+B*|Yf~C-B8*N><3th# zwua%yd%*);M+Hy2zOPM(AzUTDLvW6YnLo#e-y;Bz4100Azf{U-``utoG-~h$qyF8h z`o~WiCrhN($_vLQUZn9B5YcEx{i@@r`mzz3p7~{`OEWCw=X*-w+Vfm;(KD2|E&IM} z*^}Mi{eAwIw^15o>M{TQm6sNYgy)q?r%&|8zr}?G;D(1yNJ4hZoHcMax|RQFKhff_ zJqDk>p-3WH1mtnXF}5ga=c)Ev#IjYZS(C&yHlmz|za*?34lGFmt~i=_;y6z}T z>%|NCj;&jbtvYGq+)eNOGR-b4f?WdI@EeTBFeGXrz#6EvFN_q4yNXp5cNn))M|@`C zx$?_any%DxhKM+=^InEZE&wkM0eSDf#X5U$kJwuzwY(NfV2tO!Hs&1>c1Vdv-H1du z6>xVHB&G~`_{N18#(NnM4W{w=9`QyY6h2 z0Z4+H!643Stppl7=o4NBNYj@;tD+<01 z44n6o2MFM)>WTO3RrlLjkiV0V;HzJkcG3rcDsuA97ZsqYoa$l@kM;((A!yH>0Rs7s zwKjpHNd!vyl@ch(c0pjk7+fH4dvmn&>G2_Rdc#-zS*t~~k+Q%@Vaw_lif|3wp^S*{MMa}Mx6iepn!z=p7m%j~99=2~F5KL>i3y?BbV4^8X>OflXU#gqV ziJp;;`ZvESSA?W+9YW{aO1c&@ZqYU+^>&L9$zjF+LqXLOuo$3`+3SHXYl4Y%yz>rq zPdg>m2FO+a%jo|bwNp%9cG&GlcqUWRP~AP>+Ne~TT7r5B(fb}n-sD1uPDWI-oFTeT zQN>j=d#H);9>V8+W^H7t!Gb`J|3$otRJGR|W8U23*Im^>(i=PmSJU&truNM!guLIH3HEe56sP0V z#;@`jW|(OhR6N+_;c2R?_wn={eAu;rt1VN~dCP+c3$AzTfE6g1iu|g>G&3g3r9ucB zE5ta318-rFg2(y%Gg$Q_!gvqh(T(9^35kaSj1oc~mw8-hBL{(84W*=#YFjEnbyh|= zb{EJXV#hZs-Zr3uF-9+eOhn4b<``d$j9RcBd7tr5Q-LP+|pYfF#qUObUmZk z&}o*`g4Kv22?d#u1+=UiIN6J#>0dKq=NU&k{EmEhLvO*4Cd427x zyMv)2^$TvHB;eVB4JiC}Se}CEo!_hegh`3JaSr8@5I-r|K>QrBFwmX=@prTn7`J>S zwPN!yvBQA+yy5oqc+Pza+VGv3XB4GVxbwu$EXGaOh&k(6o`ZS=FV0Sj)Rub*>e2w% z9kpoTPEaE%g|(@p@4w>%Ak!2?VnSk7P`c>+8JVJsd6d z4`VGIS6@6)=GReB^7JfW7!wn zVqso()){oBi_5K24~UCEPy!BrYk{}&<}SeB_{$fES~$Hfz8Tj}Z~f&O@!az_xOsE1 zS<}|p8P?oy$?CZ2N1KK#cFwmF%f0weyqXNS|wx@O0IU`L8V%J_-1l zaK{{pAnwW1@6k?`NTv!&{F&5mlTSZ*tle8dG+10h`D_srswB^TSv_Gwir}YE-oR_y zqF8=U(8CU@&*UP#tlY9l?^mWJ=aP;qk8Yq`!hDzovfez;*oSM*UXQE3 zw{*B$9%GJaA<^;fb+G=~`tX`_&$DonPmN%TcnB8U5 zt6*lnmE&@*lcFrqRX@p#Z=8${EKYVjuHQ}NYa`=UE}QKlTTS$|;jByc5dPA>l>t2* zoRuJTU%Jrk=XVEWeSI$CHqG+bCp4^hnO>RrY;C5PR-^!Jf<(Tg7E7;P0i=(k;)%Ft z^zkET0-oW!C{3YN+rD0r2#yM_ul+tq-yo!JVk@*O;33-P>qRU=Zb8ms`NXD+0Tjxi zLD8)n$DgHOeLnxpvwv6@Ml^Ypwg$D-YT>Jkc`m!_i@zrFPE*ksZi?hGvVR82h(D~ z1_n3jh!$)maBAAB;|uI>g^wxX7qJMSUSVQ+X4vZ$4On4jttAF%)N9(gm*Dov6eT}W zxfog7EbWOIdd1UNkoH$+#hukm-9{{2_qu14(kTuU2V!)yIW7Rz-DTb9)gV$u$A;Dj z0oq#=?zzngHjL#sibsQui@J8Hpx)H8vci7H0^qC=kxAONl&y5T6!{MJNi6@`KbQ21 zZnB(h(J1Bvm!!olKgw9oQ*02IVobT!uYQwy-zc(eS-+dJcB;L6X7Tp+z8&x$gk(P9 z!~>@dPM(7odX3VLnB)N5rQw@H23b#^P2o*_@8==|eYtXm^Ssju7k~p>F|;f@gpZw8 zcVtjT3JFvi)4A%{K@e<9S@iTGW!+<|V>XMbpyrqgMc$sTVPeU`o&jf9aOMt|P(v!W zuChX=cGvMW>r3X*`Z*k^RnhZRv7M0&VKD@te1+P|!4&p_Gb4k^1pr>*uZFOZ95(Z; z9`2GNC~MfF^@hro)vAsQ+Xtq}K*5XzT|$gEgCHw9#-NIOTqNlU>wzPu*H)=mU6ONJ z;~`}1dihR6wHL6hY&e{MrB8K++4I}=Hgc6KfZ!rjn>!@)cqFtW9|jSD;ykHKl- ze?v$CtZZb6zTM?sbxKOm8HU~kYZmgC8C#R`I|$0zvv;ZUhX@~?+s$9Pf&1FwA(6yM z;pQnml&&085Pc6TBoY~9OG;QHE?IjQj(>g1a{v9M>P-6HaJ+>`)+6dM)1p}VFrf#d zVXRbj_Zi6=lPuXFP;Nc0u`xY+qpZnC;X;qMr!H*ASW625&{3=nspg<1_6#$wx7e&* z*-cmiOh1vfv zfGy_@69o5vt!<~lePo&Vg-tqPr&{=-d|{}KJTM1BC6WF4KaRVlkUUalB`|> zH`d0y*$J2SGiOM^dW=}K{KV|Uo)~*r*8Hf8lvqE+S zO`uF4lUvI1RgW`{fDkie(YssF+~A2r{h*|WT!5Vj1J8&};HW?0Mv;n7E&xf!7iib@@4|i7hPwt)DHQAxTDSej2j8sV zB;$_8?$Wm{?=HG<9V+V=#*BRf-=X=GTREhihoN>RWF|pl# zJ)>bu!X0(4R)mZVqSsZt9so|70do>Plk`)s=DO&XI-}}b4PYbxf{Fw!(fPCq^SIT# z;C#E%&BEhEUr|;+^nN9ji8~x`rt+D?yiH9n3(wAnn3S?I04Vh-1j=`Ym@cxgXW|84 zYW&HOf99hpdct6pIrlM#J5ERn1_1-`Y8|#D(sJ3QfdTDR6O-b)59Fyx<%KX>k1v|D zo3B{}oVklDy|DsB7+)30+)hRpXp5zN!EIy5jmzhyicsSCGGYN-NVj=UnwZW>ISDuwLj~bnLVJfjWh?^6fFbT5AzM4 z;4PE37ZvTdZOU{g>qx8$tG2)~02tX7aBbjN-!x((9)HeYtL3R?NE)y5=P@aip=IFC zvg#|H$hcYT0ItDBMtJ0TE4A`_a2OR} zGeU<^a3PD}^GyRcv>CXrAggxx>E`CnDT*U9%j;b}4mT!;f3@4fv;!DvEjB$+^4$ri ziciqtYoXCq+kL?z<5!}y-Hrj>QHikqLC+F+J(D2Y1yA#j`H@l z*!B{2M>i|{Op8Ud4ZG0cDS~Sh;2ePM1+RjT^r+rIQj68$J*iz;Z3m9#0)nIj!>+3c zfEtmtqqV+LM_mb^qRVPgsGWH8&H$BUYxd%;9bul%pieZqOrl#R?3_eCbt-;yJFPog zt1A*b9{d4y4*rKe3-bLvf)?=+03*WTg8fZ!b$JVjuuw;y@)b~}@_2e9FI!o(cWQpe zVYO6V5}wINISM?n?m4iDgmwmuJkrDA^W2ZCpipRU3B@f>PhYm^3P@4#J&8TRRdW;u zx13wCQY8X~7g)Q*;%;co%5hF8>ghB1lvI z+)7z{d*K)WV@R!V99WwRay9^Y5k;b$0X;$6cl(1Yk_U;b^-jE+qCM3vjveLF5W0hRD#R@+ir5?4VXmzE#%%CV4HlYD!maqIfKm=U~n zOXbnu6{W&F!=h+}rdp${9o*;g8>iYL|4rr5jm%rB8*_Us+xu5Fg8|que~s0+K*@!f zNwDY=8bDhIC50C#5aX$-h-GK%rgOw2&*|?jJbXwPAYijw>a=>B#|>H_WeBf}0+cpo ztNBA|l!uPk+uKK164dPHCiUkF&aYt}JZv}MYqhS{RYp>HxZdn8KR>x)%o@)`F z8xlS_7je=;w*84)UDWm|jOz-URmnE{GcF>aJxDt%mf`(&bY$q8YNhJVOl=(+-<~yv z(-cUSo+FApHcbD<0$f8s1fVQR^~ zM75y6Ngb~|K1v(iwW6RJF1`zjph+eD*(+zsPx8i{ZdC0RnMuS%0ou8As#q5N3)^lV z{dK_aMG@%{ZTcu=iyQ;CsE>rrRd?yCoi^OV+$}dg+LP7Pia70l>Jn< zS2PG4qb%w3q--kHM^oP?_1**?`qHYoYh9VW_M=eL26>cVD%RzKPQLqE`L-v3ai#XjsAH zQ4#tG;(kbRn8R{A=LuuV-Ku?pc%O$&8nXH~54QSFO~qBu_yWq|PD^?9fUZmJD#wl* zj^`pVJ&A?^g}QiywJrrm1DCeve^K48yWXrT`cT4$tueOxXq^2KHI1aOAPk6xOU5b8~xUn_xp2aT0}&u)tG$+K5k?dA2Uk?St5 zbD4hE-M#t5q7&cH`0XTRM4VriihKiZ3zytz$(oX~WK~l*-$y;+ZqaHI=G||tO%=V| z(AoapSJTs=UaRfPwgO_hp*7p5V2fn7Zqy4bTSMP+_r%FLqRH`yN z433R^6A@F7h9zsOqA>-w+J#fqOanE$)P@p0t2)2?#m~rC5S-IHFD}zwMi@>qW-%Uz z)#;(m@kmv8i-~oH9VOtV|ABws0y9gJI2?D|*^G#mi_k7V%w6q-gI-&oo87~m|O z!d~!MZcDv@kb1X`?d%HZWB^wAJPul-aqCi$WyiNsQ8wuHxKhHiL|K}?M* zCId)Z1S4w}$TSW7SZ3sH-$e#S3J*trf-kjQwf+)q$>_Uw2G$VUFcPAvCkDLzcY)pn z(B{E$Cq6_lq{QP@^yTyDy}G>CXYQ&}3*BQ7gntfxEe=g%B0{8vRh0Pgvjwi~{_ zA%UDx=V` zfc@*+sjTiz?2hiG^KI;Uj4wO%ir5~uAMR%I0of?vn+jQCD?}wTkmb}?pl4G5vvosy z*A?5ip?wBOk7VpYaX*VXOZGs4YhKRcGl1K-DgoF9rwj#KH$qo`!`1T4CHAaQ4_^?rJVhDk zKmrXVfIeVORMcwjV;)=~mb~FmWuekevbdWe;wB0p|94`*tb0JS>5^e;3ZpLNZqBR2AOm_fgVw#1yn~-+?l6PfX#GSAhk1mJ}JEyzk*+(vf zYk=f9JX*Kg1&BoT#KujFda*P%<$~`KbYQr!`fkb5DT!dHxIK2?WsbiG;u>?QnS&&X z1)#?QoCaX2sX+g+B%?_Ns9cN1q)Kq*naBE$bHp0H%6B8wwRI~O(+AWs>xOYBrAbm5*9>at5}35hi9qA0Mn1yW81p7%;F>TVnZRF)XGw(CH>S{NWg9J6yf zg4|0^3$=VnasWG2f;!1Qs9_F_PU5z`Der8;4aox-3*h@4sAJ$NfZ+g~FA=6zZU%9Q zI|&I+ch!)gm%z+n>_CMBI5OKas~t5gt$d3CGMt{p=162FU*)^(@r6-i+@@v(1365=2~EQH&kDj1 zvV`f0)h%~3D%6*%jj72yz0(&se1*>S13=`2UyaWn9E7i4&%CU^_Srkf=e`@v>5=~r zgogET<1Bt|OuW2ut|0q=XyyG6H{yS29RH`uF^2wH3f9Ay-!qz1Slj0QM+U_GQ})E= zSVr@afl1A>9sqftUVX}>DWmusqVJD95z6r^B;zeP{o_9(=6U$V9~M~vaVvhNhs?<)=9{&!bS$sp@0e+~TqEw04>1udiS<;S_J zz56pCswyJ26xcr+N58_D7sWmUWN}Ka_&67p!_5YW3=;8V1uP{<`cq8X21F)^|c zNpg#mE~x(G?%XeZ-0pg+Ka> z7c^|Z^!imN{#Cx*gXM?6WJL6Tb8r-7b9zNn&2pwqAW59aZngPPgY~wnrOyDuRL&BM^|FW_du2$2q z1(mii2rKc-2;AqPYeF9SIB3h*%lS;B$g8gg#6%p5-0!waO4*$^l9dgeK4$V%3XWhN=0S!FjI&UFFEklMr&bX^B&_x zkd{ImDGuqFFq5oZS38#ZnDHae*+7!^p-;_wjwW=^Xvn(T8x7U&{af-Vf1MglDza{& zv^Yv#ayvV7!@{O`9rbugyS#p#^8`rXg^MnKDA4b1EZ2UXC`){#f0K-<)f1y5;6Z`w zH+~M!`^WH4MBn2UVlqeebotXXRPr!_IP>7 zVL5?$bT5fNjk4}WP~vsHJ%_VAWuJL`r?i4n9yIw76AKdjVRAG&HLi-ygJS5Jg#@OS?d2?5Ahm4^WkQQyDyJtxLVPsV|9($nxR_Mbnu0m@ch}k zi}_>OiCSk{@LLo)*%TRs>PH+F{UtFk8^n%O1ip3|Iz0MAFKCr(|ze%xfaZ$G3$4OikE=jS?1HY5GM z=LSfI!|ab+$^hoUfhqR6LG@*s@ci||p|!~z+@$`;90#e7F2U~PHh4d+qARy+dC^+= zE1muOnp*|~>0{`oA2-WMsd39@RIm8n5Y`2JSCOs#Q85I;nq-Rm6Yk;dO6Tn;8s{&S6?47@CF(^U?K=?**T?A2MKHH71UA^!Fz!WR6j zKd0Ly9~dxHwNG-18IjXdp`@FWyJTr&{J8Kz!cPzUPuH{+2L=RhQIk3Fw)8apG-L@X z3gMX59s<0Tn~dJP9ECh}j{^t-1B(ChO?qOY-72Z z2K0I-7>J%KK}&#A`@aYJXqNE6f3Lpc0Xgxd&fsk6pw$H~_o4{jP6X%!279(MKiwOe zsBPU>{ZR%sx6B7nW4&Hm)6%hiOR=WARSSgtveZu#k!p=>^49vwM_mj9R zmBqg;s1trK5MM5lj`~~3KE{}bWo+n&8@Z#cG`nIn6SW3AB(gMDbjaj0)#Ew<@ec`B z$l|g;f5UCU>mCOIrukWvTEhiL;=3Smfhb&DI6G7Q>71V5S#hqVKRh?4ES9V5gP|(r z0o}LZC|B%L;AVS2Z#KS$(!UIXtuR5dKnHipq_kO>F;l%OtM zofnp_5656IJzBQzyLOVMQs*0{-(O{2;euTCRw_7t);=7U7n>`Ysmg4PEnc$-xuSI}K#f0>wyO!zMy>CT97phUvgBbVhhf^J{R99U*Zy7xz* z=u9-zQhoB|mir^UD4z!(6`u(tq_O`PB=oOo(%5OKev}U;Xp8^XMwVV&?$N>{_Iafb zx{h97sdoIN;kx=JVD*jFJz3Y`qp7|RjgEgw^hhX}AUe{;*gok1vm;YNgmaML=5k}7 zbTv?+C`f25Y~=rUcvl~JHpWvcGS1@8ky)+y%r#%uwE)-k6#BrQ?}yJIiubvRiQx46 zYq)azQTzIUf?mjGvj-Gk%x{=m!%i9(4_3d&!PE0^D~>567bJ#xVR9~-}Hr#5EThB8IoD@`za679;9?nmXTdkzsb3s$D%juu$IrFy6immE^Q$l08iz ze#pHaQO7KIAusi$yMbk7SXSRI$5hMk?Y~`?&DxrdLUGDOb=KiWFs!jDJNS;-u24CF zWF*L1?Qf`SFy$DEn*1kqmobboaKpcMAXko7I--{(Hq@FL^l{mSsaDv==vt+}Nc#qwn&j>BfoZ47Zve_B8aC~8OQh~V(8TR1c16;&w!T*r_ zN8*G>O!UIZ{NE7+kB0-VGvVJN#&0adW3l*uIN*lW+GZS6Ppu?OiY?ngu;Qo>ijifw zW4Tv7ko|J4eg}z*a4VaEzTJD^t8W>EqAn>m`LT_r+^lcV^zA#p@0f|Al|WiPR@pKb zNGx*PhlxI)w!hKkHuDL$#C}$!XcQL2@R(>>mY96Q9Jm^iO@ppO8jLA+vw1TYQ+)M$(Oc2WVc}@jCAV{bbb~d_4eUv_dU>L z&LUd#sCK*L?ow{S`@8VU0}yQgLobQKU}W_Y=`ibC`5*I`LsX_eNwIXvX1k_8vy8Er zfGoge}Z7OHu519 z(V3V+>ZFzcsAGfQM3J$`4;S!OvzEvMwK4hDestL9+T2DjMhJBR<|hXKoby<{;3z)8 z^1Q89%D)Y!I9He>ejt1#ulLPk>V}VczW1B%z+P6cjvgvIC-%3bKBM!zyLz&{pu_ z+XreWGX*fav0kElvFnVbY@YMgh=!zZZ`G1u;V{qKDf2A@ zIuAikOR2bq>hg!ViGAXO>E`>j6-pmn9_aUFX7neqmF|Dx*b9O(#g)2g<7f{y3?aJ<9J5ieDXV5ZeFQmLH9oJiKE z)VtEV1VCWO=~|{Zi2#2qqkKfotv@-74Dp+;@zU$q_!NmQrRy(?d?$&?&=altPOFco zW~N*76XXn^ep>%6BO1~$h{{VJKU~{XjP=Wu4ws1ATWPMkqZCm)1YM~n*A=!G#wq@B z6m;VxCUTLWT6`_Q!O^&WnB0HDD)%Uk{B!u~n73S@1=(j-QlfcT>_B63 zdQtnDgyUn*JBV8`0W&lQs*AY z^JmV~etxnRy{Y~E3Wq}=_SF`Wr6iL}F_INiF7y5}OqOf;1z?o^bbIgj`LriJa_?kZ zL=E(*DN0!&`_mQn&V7+p;ILtsTT)5|KeOe$T^4@-5qDBT?1|{U^1$LFvlhwWFW1(5 z?r~Z^4K%s!<#JLgT2npjwi|4qtZ;;ROgO+BG>{-5fsKj{6vY_~OuYr5n*|35db+wJ zt*v(Yb;D}EL5O1Wj||P;&Q|`Qj$4vfrG8+)gz!DPX{@iND(1UwT~ajvFbu?>wVqgNy)|fQSq>hBD#<%9PR#=-T3Q{MImsaNpaf}87K`H-<_5JDEm@ zJzplC{Ek0Qt*A4|o#LhLAp|M7eoq^%(>q=Rj@2Y+8J`NRShceneeM3v9Qv7WEef{h zxiQwHOZ|@DMl=L&Jfx|XW;J1_;SDfFxTd#bERThSraD^Yx#lMpqJu1g8Eu5 z3*d^w9Jm7YYS-FmsJyLfP1zvBH(=g1fw$1tI+RYDo%Vy zCP=}ak91{s_wGBVcA6zyD=xUqA)W8ry=4#eVOJyRYM8a^z)Hj6^W%bPqOgtoY*~Bx zk${I)e_ZP-G$g6ej_Y8nU3r&(TsGBy^;va~L&1lm8L*Yk!20$5oP3z3@MvZ);q`at zU2e_~xWP32P3udeJaZ+m`V({e9g{Jbq|S*|7x7^qF+624_~mI<^LVdAr+k)+_E)NBY_! zF8hI;+GSDB6<-~Avu9l_|FK78ZPVL_Re>|S98|-rT08Th8gsA2!7X_B};_*)+eI}v$MCA@{e9!URO_30Jf`UZ?4tw^i@L6iKQI$+9$})NtVm< zfr$hJl)2N#mk~+v_~dR{&Nd;L#F0AmPMz5G!Dn#_@F19{jpkhME~PML#P+Xa}L!-^p;Z)9b9xGa#7crhKZNG6X~=%MWHCt*OmG}P-U<=K zc_Kzks(Ei&?!BX)KoqR*z#;@$ebK|sWn^uH^s5uCX`PF4kjX>yzcL_0znd$eBi13@ zA3CQjC6eEz-`Y2Slp}_bg5DuXj<8J1l>rXn+&J4V$LZ8}{6o2-D)~Oyh%G9L+F=76 z*Cr{~33Gh#brk{D)oIIhq*B)>sAn6x;>^EK9ZWTOEdi>`xs9pT)NlFG8xincIVc02 zx|!LIMv1CjLvQ$VBduA`b_MgDI*Ax{R~{Doya(7e88i*eQkYPV;I*ONiHUiOmzuN` zrL6Agptd`{ez?e9=-QLaJGo=n8tS;c1CJE9W6UK6&m2p+lZH|2xOUy6c&V`1nG2

    6nXfp$iyYRc)LQ#&#QfDs)O6#65?b7cnyrjkl_N2*K9M)LLjKj_&C z2{32lq@-$m{er6Pt^UnN~~eR;<+%sy-aP%S4oao~X9mS{u}rD^WSHayN?+ ze_dA%Y~XvvYa?PDS}qaNM4X{6;88Kaa>~2PnhS3ZxVrZAL6jx`L!KhU@d_wwl%@{X zz1FVVQm|St(9gLf8w&F)qu05|@!8gf(}2uzxr($+VU(FgpZn%iu_oHrHgs{fwPFjw z=@$Vxcv8bgVf$gdCTz=;sxEP)ymNkXJ23lym2>^^Oz&&Fl2i)kjY$_YnHN*0C9`Twa7hx!j5{-iVYd6-oO@sQ zbyq?eVeLwH#c|G^Z(J0bqXAMp$6(#-j!*Fie(ZOe1Q2e&H z8=vx%Ff+qB0Lcc2Y~Hh4p@_O_{%XzNE4>qja&)>dCHzrIcAEb}$q>D~LJy}6&K#(p z#ZA3T9z0Etjtc6|RZsI&+w+jwz1ea*xf11 z1zPqxZ#E}luChnkl^Vipp$j|+%1C!8#+{G?CC8OD(JyN~YU)yRCdU<2WXAL`HLTgf z{>;MfY(H`PYsrY^Zx2u5Oaf=J1~WLlp?aghgZz(bJi= z))29f1FY;Xi6Gea3^_adT9Kd@H1K0sAs;Jzxv0nfpxWH9C?bU#1Ya^9xgrS_2^$9= z-+Rs|g4$Xk1FpRg2Yy+G&nmqyyIe#^=o9dsXH$2(cQ4yx&|wbkAQl3Dr@f(V)MD7r zj8q%j@q;1SI3t9?eP zNfw~M3C?#onn|^ZMml|L&dNwOnQx=VNk@(dSdVrwBlDITW>U|Q@g+GeK`gZUIyv|2 z3!5ZUNOrR_++@Ox{VTeS>*s)L?rFuMFJaBK?l9W^zC7<{hDvDXQ|OBgpG18`k!N7c6}<@T2(l-Y#34n(3d1^d(? ztE?$u%zCvFW#o4+bza206^&iHwXcBjwa#?!72sZK+C+JEAJ`js4n!ABdU&0uB%V=T zy4njEbWcY;XE%%3$W1>NHPxGRyxH~}+*#!^wZ;k#LW=@|U3lbg zv&A7F|9K(C=jN_8RMQ3d$om&aU<2!-{ERwG;l*btlS4H&x|jb%0^2dGDeQW}7EyR@ zj?Sqwu?Cx$ek>#JKU2axih%OLCJcVG^B9kOBGZ_?6pQY(f+6c{`$Hzxl zG#ca#6eT!TUL_^4W6VkqQBih@yuo2RF1KJa_AGoUREK_V}g@+h(7c}RcEBtID%(M%#M$$8D2IHJgL$K8=Me!w2T8Af-5{LnRQp>8q&n#BpjXssImb` z-H=aZi1+=NOIttjHHX#JBZ2j1~s_Rq)(|QmPT<+!doXG71RAkbqQ}|YLXU5vH zKlyi6&{Ll4UM+;Eew4$$9s$tZw*nPZ^+~FX3j`EUnW&Dy8Q2Zqyw}k@=RY12^yI*2 zV}J_g_j=8r$|}QuNKTOTQO_UD1jp&%%t%NqN6-ml5eW}~_C~8)gSh#ZyOAHpm9v7y%k}`3q`7vR>WkJwVaByDo>of8-ZJXT$*5y zu3z{S}0p)FW>|c#x zpNKPQ8Nqr9Lxef_kEU$AKQ&qIAb^`t3f0MtqWwRvym9aFu#P=}z(V0hz%4rLr z*}YCZ^}p3p{_k&k|IsZx-Bdm-cGza@FI-gfC2sE`yf%Hzwco(~UeQ4dm_B|3U$r^? zWi6%sowinv?6&9rZo-DH^)L+Qy>l5O?#s)$+7QkfD2SgoGV2^)R)39K9|YKvm(^j(ptd^w>Qdg#OoYpFYxW+B1Hu}+ZBi~1;!FsYJ^ zk#bY26s9eo2#D9(v18}-*Ocs_>EmVCm?U9><`+l6*cwB-0;pAJXbD{Nxa+;|!bUkfrY0ZB*eHig#i`}!%Q1y{a%iBCrRC_4 z^-;Quy{WE&p}Ev?GjMkAF*$B_`F>Covf|S^Abur00FpaJpE)4D%M01wQ;cS*tNQu* z<8CQ@*=%%>LG$*D>JwQe1hDFONy=$QZER>&!flCLfY(lD=@}TZ2E?0x+*Dwc4oXy3 q?67ro6pj7GV|@v(qa*bH1Fpz)3tL@q)|0Mse>tDN;8@|{9sduxcBaPw diff --git a/docs/_static/statistics.png b/docs/_static/statistics.png deleted file mode 100644 index 3dac67069109f0e4003787438509fd66943eb748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28440 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 diff --git a/docs/index.rst b/docs/index.rst index 3038bca246..4b35bd36e2 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -38,7 +38,6 @@ account. Roadmap Translations Contributors - Screenshots Licensing FAQ Contact diff --git a/docs/topics/index.rst b/docs/topics/index.rst index 5213486084..b9310f8ac3 100644 --- a/docs/topics/index.rst +++ b/docs/topics/index.rst @@ -24,4 +24,3 @@ Introductions to all the key parts of Mayan EDMS you'll need to know: settings file_storage backups - screenshots diff --git a/docs/topics/screenshots.rst b/docs/topics/screenshots.rst deleted file mode 100644 index 8d9d1275f5..0000000000 --- a/docs/topics/screenshots.rst +++ /dev/null @@ -1,64 +0,0 @@ -=========== -Screenshots -=========== - -.. figure:: /_static/main.png - :figwidth: 40% - :scale: 30 % - :alt: Home screen - :align: left - - Home screen - -.. figure:: /_static/page_view.png - :figwidth: 40% - :scale: 30 % - :alt: Page view - :align: right - - Page view - - -.. figure:: /_static/document_view.png - :figwidth: 40% - :scale: 30 % - :alt: Document view - :align: left - - Document view - - -.. figure:: /_static/api.png - :figwidth: 40% - :scale: 30 % - :alt: REST API - :align: right - - REST API - - -.. figure:: /_static/tools.png - :figwidth: 40% - :scale: 30 % - :alt: Tools - :align: left - - Tools - - -.. figure:: /_static/setup.png - :figwidth: 40% - :scale: 30 % - :alt: Setup - :align: right - - Setup - - -.. figure:: /_static/statistics.png - :figwidth: 40% - :scale: 30 % - :alt: Statistics - :align: left - - Statistics From 44531bd92ab43fe92bfdba5efb4c8fdbf1d018f5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 13 Nov 2016 03:50:09 -0400 Subject: [PATCH 054/119] Add plugable locking backend support. Add threadsafe file lock backend. --- mayan/apps/checkouts/apps.py | 2 +- mayan/apps/checkouts/tasks.py | 6 +- mayan/apps/document_indexing/tasks.py | 24 +---- mayan/apps/lock_manager/backends/__init__.py | 0 mayan/apps/lock_manager/backends/file_lock.py | 92 +++++++++++++++++++ .../apps/lock_manager/backends/model_lock.py | 10 ++ mayan/apps/lock_manager/managers.py | 18 ---- mayan/apps/lock_manager/models.py | 6 +- mayan/apps/lock_manager/runtime.py | 5 + mayan/apps/lock_manager/settings.py | 17 +++- .../{test_models.py => test_backends.py} | 33 ++++--- mayan/apps/ocr/tasks.py | 7 +- 12 files changed, 155 insertions(+), 65 deletions(-) create mode 100644 mayan/apps/lock_manager/backends/__init__.py create mode 100644 mayan/apps/lock_manager/backends/file_lock.py create mode 100644 mayan/apps/lock_manager/backends/model_lock.py create mode 100644 mayan/apps/lock_manager/runtime.py rename mayan/apps/lock_manager/tests/{test_models.py => test_backends.py} (52%) diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index e83886a46c..153dc0aec2 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -46,7 +46,7 @@ class CheckoutsApp(MayanAppConfig): DashboardWidget( icon='fa fa-shopping-cart', queryset=DocumentCheckout.objects.all(), - label=_('Checkout documents'), + label=_('Checkedout documents'), link=reverse_lazy('checkouts:checkout_list') ) diff --git a/mayan/apps/checkouts/tasks.py b/mayan/apps/checkouts/tasks.py index 046c9a8e40..2f437ad8e1 100644 --- a/mayan/apps/checkouts/tasks.py +++ b/mayan/apps/checkouts/tasks.py @@ -5,6 +5,7 @@ import logging from django.apps import apps from lock_manager import LockError +from lock_manager.runtime import locking_backend from mayan.celery import app from .literals import CHECKOUT_EXPIRATION_LOCK_EXPIRE @@ -17,15 +18,12 @@ def task_check_expired_check_outs(): DocumentCheckout = apps.get_model( app_label='checkouts', model_name='DocumentCheckout' ) - Lock = apps.get_model( - app_label='lock_manager', model_name='Lock' - ) logger.debug('executing...') lock_id = 'task_expired_check_outs' try: logger.debug('trying to acquire lock: %s', lock_id) - lock = Lock.objects.acquire_lock( + lock = locking_backend.acquire_lock( name=lock_id, timeout=CHECKOUT_EXPIRATION_LOCK_EXPIRE ) logger.debug('acquired lock: %s', lock_id) diff --git a/mayan/apps/document_indexing/tasks.py b/mayan/apps/document_indexing/tasks.py index e6cfe43bc3..a86077c7d4 100644 --- a/mayan/apps/document_indexing/tasks.py +++ b/mayan/apps/document_indexing/tasks.py @@ -7,6 +7,7 @@ from django.db import OperationalError from mayan.celery import app from lock_manager import LockError +from lock_manager.runtime import locking_backend from .literals import RETRY_DELAY @@ -18,12 +19,9 @@ def task_delete_empty_index_nodes(self): IndexInstanceNode = apps.get_model( app_label='document_indexing', model_name='IndexInstanceNode' ) - Lock = apps.get_model( - app_label='lock_manager', model_name='Lock' - ) try: - rebuild_lock = Lock.objects.acquire_lock( + rebuild_lock = locking_backend.acquire_lock( 'document_indexing_task_do_rebuild_all_indexes' ) except LockError as exception: @@ -46,12 +44,8 @@ def task_index_document(self, document_id): app_label='document_indexing', model_name='IndexInstanceNode' ) - Lock = apps.get_model( - app_label='lock_manager', model_name='Lock' - ) - try: - rebuild_lock = Lock.objects.acquire_lock( + rebuild_lock = locking_backend.acquire_lock( 'document_indexing_task_do_rebuild_all_indexes' ) except LockError as exception: @@ -59,7 +53,7 @@ def task_index_document(self, document_id): raise self.retry(exc=exception) else: try: - lock = Lock.objects.acquire_lock( + lock = locking_backend.acquire_lock( 'document_indexing_task_update_index_document_%d' % document_id ) except LockError as exception: @@ -96,16 +90,8 @@ def task_do_rebuild_all_indexes(self): app_label='document_indexing', model_name='IndexInstanceNode' ) - Lock = apps.get_model( - app_label='lock_manager', model_name='Lock' - ) - - if Lock.objects.check_existing(name__startswith='document_indexing_task_update_index_document'): - # A document index update is happening, wait - raise self.retry() - try: - lock = Lock.objects.acquire_lock( + lock = locking_backend.acquire_lock( 'document_indexing_task_do_rebuild_all_indexes' ) except LockError as exception: diff --git a/mayan/apps/lock_manager/backends/__init__.py b/mayan/apps/lock_manager/backends/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/lock_manager/backends/file_lock.py b/mayan/apps/lock_manager/backends/file_lock.py new file mode 100644 index 0000000000..4a667b514e --- /dev/null +++ b/mayan/apps/lock_manager/backends/file_lock.py @@ -0,0 +1,92 @@ +from __future__ import unicode_literals + +import cPickle as pickle +import datetime +import logging +import threading +import uuid + +from django.core.files import locks + +from common.utils import mkstemp + +from ..exceptions import LockError + +lock = threading.Lock() +logger = logging.getLogger(__name__) + +temporary_file = mkstemp()[1] +logger.debug('temporary_file: %s', temporary_file) + + +class FileLock(object): + @classmethod + def acquire_lock(cls, name, timeout=None): + instance = FileLock(name=name, timeout=timeout) + return instance + + def _get_lock_dictionary(self): + if self.timeout: + result = { + 'expiration': datetime.datetime.now() + datetime.timedelta(seconds=self.timeout), + 'uuid': self.uuid + } + else: + result = { + 'expiration': 0, + 'uuid': self.uuid + } + + return result + + def __init__(self, name, timeout): + self.name = name + self.timeout = timeout or 0 + self.uuid = uuid.uuid4().get_hex() + + lock.acquire() + with open(temporary_file, 'r+') as file_object: + locks.lock(f=file_object, flags=locks.LOCK_EX) + + try: + file_locks = pickle.loads(file_object.read()) + except EOFError: + file_locks = {} + + if name in file_locks: + # Someone already got this lock, check to see if it is expired + if file_locks[name]['expiration'] and datetime.datetime.now() > file_locks[name]['expiration']: + # It expires and has expired, we re-acquired it + file_locks[name] = self._get_lock_dictionary() + else: + lock.release() + raise LockError + else: + file_locks[name] = self._get_lock_dictionary() + + file_object.seek(0) + file_object.write(pickle.dumps(file_locks)) + lock.release() + + def release(self): + lock.acquire() + with open(temporary_file, 'r+') as file_object: + locks.lock(f=file_object, flags=locks.LOCK_EX) + try: + file_locks = pickle.loads(file_object.read()) + except EOFError: + file_locks = {} + + if self.name in file_locks: + if file_locks[self.name]['uuid'] == self.uuid: + file_locks.pop(self.name) + else: + # Lock expired and someone else acquired it + pass + else: + # Lock expired and someone else released it + pass + + file_object.seek(0) + file_object.write(pickle.dumps(file_locks)) + lock.release() diff --git a/mayan/apps/lock_manager/backends/model_lock.py b/mayan/apps/lock_manager/backends/model_lock.py new file mode 100644 index 0000000000..30ba0afb1a --- /dev/null +++ b/mayan/apps/lock_manager/backends/model_lock.py @@ -0,0 +1,10 @@ +from __future__ import unicode_literals + +from django.apps import apps + + +class ModelLock(object): + @classmethod + def acquire_lock(cls, name, timeout=None): + Lock = apps.get_model(app_label='lock_manager', model_name='Lock') + return Lock.objects.acquire_lock(name=name, timeout=timeout) diff --git a/mayan/apps/lock_manager/managers.py b/mayan/apps/lock_manager/managers.py index e5ccf338e0..01a7405501 100644 --- a/mayan/apps/lock_manager/managers.py +++ b/mayan/apps/lock_manager/managers.py @@ -49,21 +49,3 @@ class LockManager(models.Manager): else: logger.debug('acquired lock: %s', name) return lock - - def check_existing(self, **kwargs): - try: - existing_lock = self.get(**kwargs) - except self.model.DoesNotExist: - return False - else: - # Lock exists, try to re-acquire it in case it is a stale lock - try: - lock = self.acquire_lock(existing_lock.name) - except LockError: - # This is expected, try to acquire it to force it to - # timeout in case it is a stale lock. - return True - else: - # Able to re-acquire anothers lock, so we release it now - lock.release() - return False diff --git a/mayan/apps/lock_manager/models.py b/mayan/apps/lock_manager/models.py index 7d66c38f98..179c70dbb6 100644 --- a/mayan/apps/lock_manager/models.py +++ b/mayan/apps/lock_manager/models.py @@ -5,7 +5,7 @@ from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from .managers import LockManager -from .settings import DEFAULT_LOCK_TIMEOUT +from .settings import setting_default_lock_timeout @python_2_unicode_compatible @@ -14,7 +14,7 @@ class Lock(models.Model): auto_now_add=True, verbose_name=_('Creation datetime') ) timeout = models.IntegerField( - default=DEFAULT_LOCK_TIMEOUT, verbose_name=_('Timeout') + default=setting_default_lock_timeout.value, verbose_name=_('Timeout') ) name = models.CharField( max_length=64, unique=True, verbose_name=_('Name') @@ -27,7 +27,7 @@ class Lock(models.Model): def save(self, *args, **kwargs): if not self.timeout and not kwargs.get('timeout'): - self.timeout = DEFAULT_LOCK_TIMEOUT + self.timeout = setting_default_lock_timeout.value super(Lock, self).save(*args, **kwargs) diff --git a/mayan/apps/lock_manager/runtime.py b/mayan/apps/lock_manager/runtime.py new file mode 100644 index 0000000000..3c4a54de02 --- /dev/null +++ b/mayan/apps/lock_manager/runtime.py @@ -0,0 +1,5 @@ +from django.utils.module_loading import import_string + +from .settings import setting_backend + +locking_backend = import_string(setting_backend.value) diff --git a/mayan/apps/lock_manager/settings.py b/mayan/apps/lock_manager/settings.py index 6a152657d3..659674f60c 100644 --- a/mayan/apps/lock_manager/settings.py +++ b/mayan/apps/lock_manager/settings.py @@ -1,9 +1,20 @@ from __future__ import unicode_literals -from django.conf import settings +from django.utils.translation import ugettext_lazy as _ +from smart_settings import Namespace + +DEFAULT_BACKEND = 'lock_manager.backends.model_lock.ModelLock' DEFAULT_LOCK_TIMEOUT_VALUE = 30 -DEFAULT_LOCK_TIMEOUT = getattr( - settings, 'LOCK_MANAGER_DEFAULT_LOCK_TIMEOUT', DEFAULT_LOCK_TIMEOUT_VALUE +namespace = Namespace(name='lock_manager', label=_('Lock manager')) + +setting_backend = namespace.add_setting( + default=DEFAULT_BACKEND, + global_name='LOCK_MANAGER_DEFAULT_BACKEND', +) + +setting_default_lock_timeout = namespace.add_setting( + default=DEFAULT_LOCK_TIMEOUT_VALUE, + global_name='LOCK_MANAGER_DEFAULT_LOCK_TIMEOUT', ) diff --git a/mayan/apps/lock_manager/tests/test_models.py b/mayan/apps/lock_manager/tests/test_backends.py similarity index 52% rename from mayan/apps/lock_manager/tests/test_models.py rename to mayan/apps/lock_manager/tests/test_backends.py index a915c7af60..bb556e3e19 100644 --- a/mayan/apps/lock_manager/tests/test_models.py +++ b/mayan/apps/lock_manager/tests/test_backends.py @@ -3,48 +3,53 @@ from __future__ import unicode_literals import time from django.test import TestCase +from django.utils.module_loading import import_string from ..exceptions import LockError -from ..models import Lock -class LockTestCase(TestCase): +class FileLockTestCase(TestCase): + backend_string = 'lock_manager.backends.file_lock.FileLock' + + def setUp(self): + self.locking_backend = import_string(self.backend_string) + def test_exclusive(self): - lock_1 = Lock.objects.acquire_lock(name='test_lock_1') + lock_1 = self.locking_backend.acquire_lock(name='test_lock_1') with self.assertRaises(LockError): - Lock.objects.acquire_lock(name='test_lock_1') + self.locking_backend.acquire_lock(name='test_lock_1') # Cleanup lock_1.release() def test_release(self): - lock_1 = Lock.objects.acquire_lock(name='test_lock_1') + lock_1 = self.locking_backend.acquire_lock(name='test_lock_1') lock_1.release() - lock_2 = Lock.objects.acquire_lock(name='test_lock_1') + lock_2 = self.locking_backend.acquire_lock(name='test_lock_1') # Cleanup lock_2.release() def test_timeout_expired(self): - Lock.objects.acquire_lock(name='test_lock_1', timeout=1) + self.locking_backend.acquire_lock(name='test_lock_1', timeout=1) # lock_1 not release and not expired, should raise LockError with self.assertRaises(LockError): - Lock.objects.acquire_lock(name='test_lock_1') + self.locking_backend.acquire_lock(name='test_lock_1') time.sleep(2) # lock_1 not release but has expired, should not raise LockError - lock_2 = Lock.objects.acquire_lock(name='test_lock_1') + lock_2 = self.locking_backend.acquire_lock(name='test_lock_1') # Cleanup lock_2.release() def test_double_release(self): - lock_1 = Lock.objects.acquire_lock(name='test_lock_1') + lock_1 = self.locking_backend.acquire_lock(name='test_lock_1') lock_1.release() def test_release_expired(self): - lock_1 = Lock.objects.acquire_lock(name='test_lock_1', timeout=1) + lock_1 = self.locking_backend.acquire_lock(name='test_lock_1', timeout=1) time.sleep(2) lock_1.release() # No exception is raised even though the lock has expired. @@ -54,7 +59,11 @@ class LockTestCase(TestCase): def test_release_expired_reaquired(self): time.sleep(2) - lock_2 = Lock.objects.acquire_lock(name='test_lock_1', timeout=1) + lock_2 = self.locking_backend.acquire_lock(name='test_lock_1', timeout=1) # Cleanup lock_2.release() + + +class ModelLockTestCase(FileLockTestCase): + backend_string = 'lock_manager.backends.model_lock.ModelLock' diff --git a/mayan/apps/ocr/tasks.py b/mayan/apps/ocr/tasks.py index 7406a1bed3..7f0f84cf70 100644 --- a/mayan/apps/ocr/tasks.py +++ b/mayan/apps/ocr/tasks.py @@ -10,6 +10,7 @@ from django.db import OperationalError from documents.models import DocumentVersion from lock_manager import LockError +from lock_manager.runtime import locking_backend from mayan.celery import app from .classes import TextExtractor @@ -22,16 +23,12 @@ logger = logging.getLogger(__name__) @app.task(bind=True, default_retry_delay=DO_OCR_RETRY_DELAY, ignore_result=True) def task_do_ocr(self, document_version_pk): - Lock = apps.get_model( - app_label='lock_manager', model_name='Lock' - ) - lock_id = 'task_do_ocr_doc_version-%d' % document_version_pk try: logger.debug('trying to acquire lock: %s', lock_id) # Acquire lock to avoid doing OCR on the same document version more than # once concurrently - lock = Lock.objects.acquire_lock(lock_id, LOCK_EXPIRE) + lock = locking_backend.acquire_lock(lock_id, LOCK_EXPIRE) logger.debug('acquired lock: %s', lock_id) document_version = None try: From 90c08b707dec58a57aac349cb8c918a9bf14ebc6 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 13 Nov 2016 17:28:52 -0400 Subject: [PATCH 055/119] Optimize the FileLock backend. --- mayan/apps/lock_manager/backends/file_lock.py | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/mayan/apps/lock_manager/backends/file_lock.py b/mayan/apps/lock_manager/backends/file_lock.py index 4a667b514e..9f020deae2 100644 --- a/mayan/apps/lock_manager/backends/file_lock.py +++ b/mayan/apps/lock_manager/backends/file_lock.py @@ -1,9 +1,9 @@ from __future__ import unicode_literals -import cPickle as pickle -import datetime import logging +import json import threading +import time import uuid from django.core.files import locks @@ -28,7 +28,7 @@ class FileLock(object): def _get_lock_dictionary(self): if self.timeout: result = { - 'expiration': datetime.datetime.now() + datetime.timedelta(seconds=self.timeout), + 'expiration': time.time() + self.timeout, 'uuid': self.uuid } else: @@ -48,14 +48,16 @@ class FileLock(object): with open(temporary_file, 'r+') as file_object: locks.lock(f=file_object, flags=locks.LOCK_EX) - try: - file_locks = pickle.loads(file_object.read()) - except EOFError: + data = file_object.read() + + if data: + file_locks = json.loads(data) + else: file_locks = {} if name in file_locks: # Someone already got this lock, check to see if it is expired - if file_locks[name]['expiration'] and datetime.datetime.now() > file_locks[name]['expiration']: + if file_locks[name]['expiration'] and time.time() > file_locks[name]['expiration']: # It expires and has expired, we re-acquired it file_locks[name] = self._get_lock_dictionary() else: @@ -65,7 +67,8 @@ class FileLock(object): file_locks[name] = self._get_lock_dictionary() file_object.seek(0) - file_object.write(pickle.dumps(file_locks)) + file_object.truncate() + file_object.write(json.dumps(file_locks)) lock.release() def release(self): @@ -73,7 +76,7 @@ class FileLock(object): with open(temporary_file, 'r+') as file_object: locks.lock(f=file_object, flags=locks.LOCK_EX) try: - file_locks = pickle.loads(file_object.read()) + file_locks = json.loads(file_object.read()) except EOFError: file_locks = {} @@ -88,5 +91,6 @@ class FileLock(object): pass file_object.seek(0) - file_object.write(pickle.dumps(file_locks)) + file_object.truncate() + file_object.write(json.dumps(file_locks)) lock.release() From 3663521899882f3659bac2d226294151fa823a46 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 13 Nov 2016 18:16:01 -0400 Subject: [PATCH 056/119] Split document app views into different modules. --- mayan/apps/documents/views/__init__.py | 5 + .../documents/views/document_page_views.py | 227 ++++++++ .../documents/views/document_type_views.py | 197 +++++++ .../documents/views/document_version_views.py | 98 ++++ .../{views.py => views/document_views.py} | 503 +----------------- mayan/apps/documents/views/misc_views.py | 26 + 6 files changed, 566 insertions(+), 490 deletions(-) create mode 100644 mayan/apps/documents/views/__init__.py create mode 100644 mayan/apps/documents/views/document_page_views.py create mode 100644 mayan/apps/documents/views/document_type_views.py create mode 100644 mayan/apps/documents/views/document_version_views.py rename mayan/apps/documents/{views.py => views/document_views.py} (57%) create mode 100644 mayan/apps/documents/views/misc_views.py diff --git a/mayan/apps/documents/views/__init__.py b/mayan/apps/documents/views/__init__.py new file mode 100644 index 0000000000..602a5c9dd7 --- /dev/null +++ b/mayan/apps/documents/views/__init__.py @@ -0,0 +1,5 @@ +from .document_page_views import * # NOQA +from .document_type_views import * # NOQA +from .document_version_views import * # NOQA +from .document_views import * # NOQA +from .misc_views import * # NOQA diff --git a/mayan/apps/documents/views/document_page_views.py b/mayan/apps/documents/views/document_page_views.py new file mode 100644 index 0000000000..8a1cb08045 --- /dev/null +++ b/mayan/apps/documents/views/document_page_views.py @@ -0,0 +1,227 @@ +from __future__ import absolute_import, unicode_literals + +import logging +import urlparse + +from django.conf import settings +from django.contrib import messages +from django.core.urlresolvers import resolve, reverse +from django.http import HttpResponseRedirect +from django.shortcuts import get_object_or_404 +from django.utils.http import urlencode +from django.utils.translation import ugettext_lazy as _ +from django.views.generic import RedirectView + +from acls.models import AccessControlList +from common.generics import SimpleView, SingleObjectListView +from converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL + +from ..forms import DocumentPageForm +from ..models import Document, DocumentPage +from ..permissions import permission_document_view +from ..settings import ( + setting_rotation_step, setting_zoom_percent_step, setting_zoom_max_level, + setting_zoom_min_level +) + +logger = logging.getLogger(__name__) + + +class DocumentPageListView(SingleObjectListView): + def dispatch(self, request, *args, **kwargs): + AccessControlList.objects.check_access( + permissions=permission_document_view, user=self.request.user, + obj=self.get_document() + ) + + return super( + DocumentPageListView, self + ).dispatch(request, *args, **kwargs) + + def get_document(self): + return get_object_or_404(Document, pk=self.kwargs['pk']) + + def get_queryset(self): + return self.get_document().pages.all() + + def get_extra_context(self): + return { + 'object': self.get_document(), + 'title': _('Pages for document: %s') % self.get_document(), + } + + +class DocumentPageView(SimpleView): + template_name = 'appearance/generic_form.html' + + def dispatch(self, request, *args, **kwargs): + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.get_object().document + ) + + return super( + DocumentPageView, self + ).dispatch(request, *args, **kwargs) + + def get_extra_context(self): + zoom = int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) + rotation = int(self.request.GET.get('rotation', DEFAULT_ROTATION)) + + document_page_form = DocumentPageForm( + instance=self.get_object(), zoom=zoom, rotation=rotation + ) + + base_title = _('Image of: %s') % self.get_object() + + if zoom != DEFAULT_ZOOM_LEVEL: + zoom_text = '({}%)'.format(zoom) + else: + zoom_text = '' + + return { + 'form': document_page_form, + 'hide_labels': True, + 'navigation_object_list': ('page',), + 'page': self.get_object(), + 'rotation': rotation, + 'title': ' '.join((base_title, zoom_text,)), + 'read_only': True, + 'zoom': zoom, + } + + def get_object(self): + return get_object_or_404(DocumentPage, pk=self.kwargs['pk']) + + +class DocumentPageViewResetView(RedirectView): + pattern_name = 'documents:document_page_view' + + +def document_page_navigation_next(request, document_page_id): + document_page = get_object_or_404(DocumentPage, pk=document_page_id) + + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) + + view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name + + if document_page.page_number >= document_page.siblings.count(): + messages.warning(request, _('There are no more pages in this document')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) + else: + document_page = get_object_or_404(document_page.siblings, page_number=document_page.page_number + 1) + return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) + + +def document_page_navigation_previous(request, document_page_id): + document_page = get_object_or_404(DocumentPage, pk=document_page_id) + + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) + + view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name + + if document_page.page_number <= 1: + messages.warning(request, _('You are already at the first page of this document')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) + else: + document_page = get_object_or_404(document_page.siblings, page_number=document_page.page_number - 1) + return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) + + +def document_page_navigation_first(request, document_page_id): + document_page = get_object_or_404(DocumentPage, pk=document_page_id) + document_page = get_object_or_404(document_page.siblings, page_number=1) + + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) + + view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name + + return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) + + +def document_page_navigation_last(request, document_page_id): + document_page = get_object_or_404(DocumentPage, pk=document_page_id) + document_page = get_object_or_404(document_page.siblings, page_number=document_page.siblings.count()) + + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=document_page.document + ) + + view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name + + return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) + + +class DocumentPageInteractiveTransformation(RedirectView): + def dispatch(self, request, *args, **kwargs): + object = self.get_object() + + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=object + ) + + return super(DocumentPageInteractiveTransformation, self).dispatch( + request, *args, **kwargs + ) + + def get_object(self): + return get_object_or_404(DocumentPage, pk=self.kwargs['pk']) + + def get_redirect_url(self, *args, **kwargs): + url = reverse( + 'documents:document_page_view', args=(self.kwargs['pk'],) + ) + + query_dict = { + 'rotation': int(self.request.GET.get('rotation', DEFAULT_ROTATION)), + 'zoom': int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) + } + + self.transformation_function(query_dict) + + return '{}?{}'.format(url, urlencode(query_dict)) + + +class DocumentPageZoomInView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + zoom = query_dict['zoom'] + setting_zoom_percent_step.value + + if zoom > setting_zoom_max_level.value: + zoom = setting_zoom_max_level.value + + query_dict['zoom'] = zoom + + +class DocumentPageZoomOutView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + zoom = query_dict['zoom'] - setting_zoom_percent_step.value + + if zoom < setting_zoom_min_level.value: + zoom = setting_zoom_min_level.value + + query_dict['zoom'] = zoom + + +class DocumentPageRotateLeftView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + query_dict['rotation'] = ( + query_dict['rotation'] - setting_rotation_step.value + ) % 360 + + +class DocumentPageRotateRightView(DocumentPageInteractiveTransformation): + def transformation_function(self, query_dict): + query_dict['rotation'] = ( + query_dict['rotation'] + setting_rotation_step.value + ) % 360 diff --git a/mayan/apps/documents/views/document_type_views.py b/mayan/apps/documents/views/document_type_views.py new file mode 100644 index 0000000000..c9658ec06f --- /dev/null +++ b/mayan/apps/documents/views/document_type_views.py @@ -0,0 +1,197 @@ +from __future__ import absolute_import, unicode_literals + +import logging + +from django.core.urlresolvers import reverse, reverse_lazy +from django.shortcuts import get_object_or_404 +from django.utils.translation import ugettext_lazy as _ + +from acls.models import AccessControlList +from common.generics import ( + SingleObjectCreateView, SingleObjectDeleteView, SingleObjectEditView, + SingleObjectListView +) + +from ..forms import DocumentTypeFilenameForm_create +from ..models import DocumentType, DocumentTypeFilename +from ..permissions import ( + permission_document_type_create, permission_document_type_delete, + permission_document_type_edit, permission_document_type_view +) + +from .document_views import DocumentListView + +logger = logging.getLogger(__name__) + + +class DocumentTypeDocumentListView(DocumentListView): + def get_document_type(self): + return get_object_or_404(DocumentType, pk=self.kwargs['pk']) + + def get_document_queryset(self): + return self.get_document_type().documents.all() + + def get_extra_context(self): + return { + 'hide_links': True, + 'object': self.get_document_type(), + 'title': _('Documents of type: %s') % self.get_document_type() + } + + +class DocumentTypeListView(SingleObjectListView): + model = DocumentType + view_permission = permission_document_type_view + + def get_extra_context(self): + return { + 'hide_link': True, + 'title': _('Document types'), + } + + +class DocumentTypeCreateView(SingleObjectCreateView): + fields = ( + 'label', 'trash_time_period', 'trash_time_unit', 'delete_time_period', + 'delete_time_unit' + ) + model = DocumentType + post_action_redirect = reverse_lazy('documents:document_type_list') + view_permission = permission_document_type_create + + def get_extra_context(self): + return { + 'title': _('Create document type'), + } + + +class DocumentTypeDeleteView(SingleObjectDeleteView): + model = DocumentType + post_action_redirect = reverse_lazy('documents:document_type_list') + view_permission = permission_document_type_delete + + def get_extra_context(self): + return { + 'message': _('All documents of this type will be deleted too.'), + 'object': self.get_object(), + 'title': _('Delete the document type: %s?') % self.get_object(), + } + + +class DocumentTypeEditView(SingleObjectEditView): + fields = ( + 'label', 'trash_time_period', 'trash_time_unit', 'delete_time_period', + 'delete_time_unit' + ) + model = DocumentType + post_action_redirect = reverse_lazy('documents:document_type_list') + view_permission = permission_document_type_edit + + def get_extra_context(self): + return { + 'object': self.get_object(), + 'title': _('Edit document type: %s') % self.get_object(), + } + + +class DocumentTypeFilenameCreateView(SingleObjectCreateView): + form_class = DocumentTypeFilenameForm_create + + def dispatch(self, request, *args, **kwargs): + AccessControlList.objects.check_access( + permissions=permission_document_type_edit, user=request.user, + obj=self.get_document_type() + ) + + return super(DocumentTypeFilenameCreateView, self).dispatch( + request, *args, **kwargs + ) + + def get_document_type(self): + return get_object_or_404(DocumentType, pk=self.kwargs['pk']) + + def get_extra_context(self): + return { + 'document_type': self.get_document_type(), + 'navigation_object_list': ('document_type',), + 'title': _( + 'Create quick label for document type: %s' + ) % self.get_document_type(), + } + + def get_instance_extra_data(self): + return {'document_type': self.get_document_type()} + + +class DocumentTypeFilenameEditView(SingleObjectEditView): + fields = ('enabled', 'filename',) + model = DocumentTypeFilename + view_permission = permission_document_type_edit + + def get_extra_context(self): + document_type_filename = self.get_object() + + return { + 'document_type': document_type_filename.document_type, + 'filename': document_type_filename, + 'navigation_object_list': ('document_type', 'filename',), + 'title': _( + 'Edit quick label "%(filename)s" from document type ' + '"%(document_type)s"' + ) % { + 'document_type': document_type_filename.document_type, + 'filename': document_type_filename + }, + } + + def get_post_action_redirect(self): + return reverse( + 'documents:document_type_filename_list', + args=(self.get_object().document_type.pk,) + ) + + +class DocumentTypeFilenameDeleteView(SingleObjectDeleteView): + model = DocumentTypeFilename + view_permission = permission_document_type_edit + + def get_extra_context(self): + return { + 'document_type': self.get_object().document_type, + 'filename': self.get_object(), + 'navigation_object_list': ('document_type', 'filename',), + 'title': _( + 'Delete the quick label: %(label)s, from document type ' + '"%(document_type)s"?' + ) % { + 'document_type': self.get_object().document_type, + 'label': self.get_object() + }, + } + + def get_post_action_redirect(self): + return reverse( + 'documents:document_type_filename_list', + args=(self.get_object().document_type.pk,) + ) + + +class DocumentTypeFilenameListView(SingleObjectListView): + model = DocumentType + view_permission = permission_document_type_view + + def get_document_type(self): + return get_object_or_404(DocumentType, pk=self.kwargs['pk']) + + def get_extra_context(self): + return { + 'document_type': self.get_document_type(), + 'hide_link': True, + 'navigation_object_list': ('document_type',), + 'title': _( + 'Quick labels for document type: %s' + ) % self.get_document_type(), + } + + def get_queryset(self): + return self.get_document_type().filenames.all() diff --git a/mayan/apps/documents/views/document_version_views.py b/mayan/apps/documents/views/document_version_views.py new file mode 100644 index 0000000000..47f41cc42d --- /dev/null +++ b/mayan/apps/documents/views/document_version_views.py @@ -0,0 +1,98 @@ +from __future__ import absolute_import, unicode_literals + +import logging + +from django.contrib import messages +from django.shortcuts import get_object_or_404 +from django.utils.translation import ugettext_lazy as _ + +from acls.models import AccessControlList +from common.generics import ConfirmView, SingleObjectListView + +from ..models import Document, DocumentVersion +from ..permissions import ( + permission_document_download, permission_document_version_revert, + permission_document_view +) + +from .document_views import DocumentDownloadFormView, DocumentDownloadView + +logger = logging.getLogger(__name__) + + +class DocumentVersionListView(SingleObjectListView): + def dispatch(self, request, *args, **kwargs): + AccessControlList.objects.check_access( + permissions=permission_document_view, user=request.user, + obj=self.get_document() + ) + + self.get_document().add_as_recent_document_for_user(request.user) + + return super( + DocumentVersionListView, self + ).dispatch(request, *args, **kwargs) + + def get_document(self): + return get_object_or_404(Document, pk=self.kwargs['pk']) + + def get_extra_context(self): + return { + 'hide_object': True, 'object': self.get_document(), + 'title': _('Versions of document: %s') % self.get_document(), + } + + def get_queryset(self): + return self.get_document().versions.order_by('-timestamp') + + +class DocumentVersionRevertView(ConfirmView): + object_permission = permission_document_version_revert + object_permission_related = 'document' + + def get_extra_context(self): + return { + 'message': _( + 'All later version after this one will be deleted too.' + ), + 'object': self.get_object().document, + 'title': _('Revert to this version?'), + } + + def get_object(self): + return get_object_or_404(DocumentVersion, pk=self.kwargs['pk']) + + def view_action(self): + try: + self.get_object().revert(_user=self.request.user) + messages.success( + self.request, _('Document version reverted successfully') + ) + except Exception as exception: + messages.error( + self.request, + _('Error reverting document version; %s') % exception + ) + + +class DocumentVersionDownloadFormView(DocumentDownloadFormView): + model = DocumentVersion + multiple_download_view = None + single_download_view = 'documents:document_version_download' + + def get_document_queryset(self): + id_list = self.request.GET.get( + 'id_list', self.request.POST.get('id_list', '') + ) + + if not id_list: + id_list = self.kwargs['pk'] + + return self.model.objects.filter( + pk__in=id_list.split(',') + ) + + +class DocumentVersionDownloadView(DocumentDownloadView): + model = DocumentVersion + object_permission = permission_document_download diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views/document_views.py similarity index 57% rename from mayan/apps/documents/views.py rename to mayan/apps/documents/views/document_views.py index b64c008c04..642124d72c 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views/document_views.py @@ -1,74 +1,48 @@ from __future__ import absolute_import, unicode_literals import logging -import urlparse from django.conf import settings from django.contrib import messages from django.core.exceptions import PermissionDenied -from django.core.urlresolvers import resolve, reverse, reverse_lazy +from django.core.urlresolvers import reverse, reverse_lazy from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.http import urlencode from django.utils.translation import ugettext_lazy as _, ungettext -from django.views.generic import RedirectView from acls.models import AccessControlList from common.compressed_files import CompressedFile from common.generics import ( - ConfirmView, FormView, SimpleView, SingleObjectCreateView, - SingleObjectDeleteView, SingleObjectDetailView, SingleObjectDownloadView, + ConfirmView, FormView, SingleObjectDetailView, SingleObjectDownloadView, SingleObjectEditView, SingleObjectListView ) from common.mixins import MultipleInstanceActionMixin -from converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL from converter.models import Transformation from converter.permissions import permission_transformation_delete -from .events import event_document_download, event_document_view -from .forms import ( - DocumentDownloadForm, DocumentForm, DocumentPageForm, DocumentPreviewForm, +from ..events import event_document_download, event_document_view +from ..forms import ( + DocumentDownloadForm, DocumentForm, DocumentPreviewForm, DocumentPrintForm, DocumentPropertiesForm, DocumentTypeSelectForm, - DocumentTypeFilenameForm_create ) -from .literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME -from .models import ( - DeletedDocument, Document, DocumentType, DocumentPage, - DocumentTypeFilename, DocumentVersion, RecentDocument -) -from .permissions import ( +from ..literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME +from ..models import DeletedDocument, Document, RecentDocument +from ..permissions import ( permission_document_delete, permission_document_download, permission_document_print, permission_document_properties_edit, permission_document_restore, permission_document_tools, - permission_document_trash, permission_document_type_create, - permission_document_type_delete, permission_document_type_edit, - permission_document_type_view, permission_document_version_revert, - permission_document_view, permission_empty_trash + permission_document_trash, permission_document_view, + permission_empty_trash ) -from .settings import ( - setting_print_size, setting_rotation_step, setting_zoom_percent_step, - setting_zoom_max_level, setting_zoom_min_level -) -from .tasks import task_clear_image_cache, task_update_page_count -from .utils import parse_range +from ..settings import setting_print_size +from ..tasks import task_update_page_count +from ..utils import parse_range logger = logging.getLogger(__name__) -class ClearImageCacheView(ConfirmView): - extra_context = { - 'title': _('Clear the document image cache?') - } - view_permission = permission_document_tools - - def view_action(self): - task_clear_image_cache.apply_async() - messages.success( - self.request, _('Document cache clearing queued successfully.') - ) - - class DocumentListView(SingleObjectListView): extra_context = { 'hide_links': True, @@ -203,77 +177,6 @@ class DocumentRestoreManyView(MultipleInstanceActionMixin, DocumentRestoreView): success_message_plural = '%(count)d documents restored.' -class DocumentPageListView(SingleObjectListView): - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - permissions=permission_document_view, user=self.request.user, - obj=self.get_document() - ) - - return super( - DocumentPageListView, self - ).dispatch(request, *args, **kwargs) - - def get_document(self): - return get_object_or_404(Document, pk=self.kwargs['pk']) - - def get_queryset(self): - return self.get_document().pages.all() - - def get_extra_context(self): - return { - 'object': self.get_document(), - 'title': _('Pages for document: %s') % self.get_document(), - } - - -class DocumentPageView(SimpleView): - template_name = 'appearance/generic_form.html' - - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=self.get_object().document - ) - - return super( - DocumentPageView, self - ).dispatch(request, *args, **kwargs) - - def get_extra_context(self): - zoom = int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) - rotation = int(self.request.GET.get('rotation', DEFAULT_ROTATION)) - - document_page_form = DocumentPageForm( - instance=self.get_object(), zoom=zoom, rotation=rotation - ) - - base_title = _('Image of: %s') % self.get_object() - - if zoom != DEFAULT_ZOOM_LEVEL: - zoom_text = '({}%)'.format(zoom) - else: - zoom_text = '' - - return { - 'form': document_page_form, - 'hide_labels': True, - 'navigation_object_list': ('page',), - 'page': self.get_object(), - 'rotation': rotation, - 'title': ' '.join((base_title, zoom_text,)), - 'read_only': True, - 'zoom': zoom, - } - - def get_object(self): - return get_object_or_404(DocumentPage, pk=self.kwargs['pk']) - - -class DocumentPageViewResetView(RedirectView): - pattern_name = 'documents:document_page_view' - - class DocumentPreviewView(SingleObjectDetailView): form_class = DocumentPreviewForm model = Document @@ -342,234 +245,6 @@ class DocumentTrashManyView(MultipleInstanceActionMixin, DocumentTrashView): } -class DocumentTypeDocumentListView(DocumentListView): - def get_document_type(self): - return get_object_or_404(DocumentType, pk=self.kwargs['pk']) - - def get_document_queryset(self): - return self.get_document_type().documents.all() - - def get_extra_context(self): - return { - 'hide_links': True, - 'object': self.get_document_type(), - 'title': _('Documents of type: %s') % self.get_document_type() - } - - -class DocumentTypeListView(SingleObjectListView): - model = DocumentType - view_permission = permission_document_type_view - - def get_extra_context(self): - return { - 'hide_link': True, - 'title': _('Document types'), - } - - -class DocumentTypeCreateView(SingleObjectCreateView): - fields = ( - 'label', 'trash_time_period', 'trash_time_unit', 'delete_time_period', - 'delete_time_unit' - ) - model = DocumentType - post_action_redirect = reverse_lazy('documents:document_type_list') - view_permission = permission_document_type_create - - def get_extra_context(self): - return { - 'title': _('Create document type'), - } - - -class DocumentTypeDeleteView(SingleObjectDeleteView): - model = DocumentType - post_action_redirect = reverse_lazy('documents:document_type_list') - view_permission = permission_document_type_delete - - def get_extra_context(self): - return { - 'message': _('All documents of this type will be deleted too.'), - 'object': self.get_object(), - 'title': _('Delete the document type: %s?') % self.get_object(), - } - - -class DocumentTypeEditView(SingleObjectEditView): - fields = ( - 'label', 'trash_time_period', 'trash_time_unit', 'delete_time_period', - 'delete_time_unit' - ) - model = DocumentType - post_action_redirect = reverse_lazy('documents:document_type_list') - view_permission = permission_document_type_edit - - def get_extra_context(self): - return { - 'object': self.get_object(), - 'title': _('Edit document type: %s') % self.get_object(), - } - - -class DocumentTypeFilenameCreateView(SingleObjectCreateView): - form_class = DocumentTypeFilenameForm_create - - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - permissions=permission_document_type_edit, user=request.user, - obj=self.get_document_type() - ) - - return super(DocumentTypeFilenameCreateView, self).dispatch( - request, *args, **kwargs - ) - - def get_document_type(self): - return get_object_or_404(DocumentType, pk=self.kwargs['pk']) - - def get_extra_context(self): - return { - 'document_type': self.get_document_type(), - 'navigation_object_list': ('document_type',), - 'title': _( - 'Create quick label for document type: %s' - ) % self.get_document_type(), - } - - def get_instance_extra_data(self): - return {'document_type': self.get_document_type()} - - -class DocumentTypeFilenameEditView(SingleObjectEditView): - fields = ('enabled', 'filename',) - model = DocumentTypeFilename - view_permission = permission_document_type_edit - - def get_extra_context(self): - document_type_filename = self.get_object() - - return { - 'document_type': document_type_filename.document_type, - 'filename': document_type_filename, - 'navigation_object_list': ('document_type', 'filename',), - 'title': _( - 'Edit quick label "%(filename)s" from document type ' - '"%(document_type)s"' - ) % { - 'document_type': document_type_filename.document_type, - 'filename': document_type_filename - }, - } - - def get_post_action_redirect(self): - return reverse( - 'documents:document_type_filename_list', - args=(self.get_object().document_type.pk,) - ) - - -class DocumentTypeFilenameDeleteView(SingleObjectDeleteView): - model = DocumentTypeFilename - view_permission = permission_document_type_edit - - def get_extra_context(self): - return { - 'document_type': self.get_object().document_type, - 'filename': self.get_object(), - 'navigation_object_list': ('document_type', 'filename',), - 'title': _( - 'Delete the quick label: %(label)s, from document type ' - '"%(document_type)s"?' - ) % { - 'document_type': self.get_object().document_type, - 'label': self.get_object() - }, - } - - def get_post_action_redirect(self): - return reverse( - 'documents:document_type_filename_list', - args=(self.get_object().document_type.pk,) - ) - - -class DocumentTypeFilenameListView(SingleObjectListView): - model = DocumentType - view_permission = permission_document_type_view - - def get_document_type(self): - return get_object_or_404(DocumentType, pk=self.kwargs['pk']) - - def get_extra_context(self): - return { - 'document_type': self.get_document_type(), - 'hide_link': True, - 'navigation_object_list': ('document_type',), - 'title': _( - 'Quick labels for document type: %s' - ) % self.get_document_type(), - } - - def get_queryset(self): - return self.get_document_type().filenames.all() - - -class DocumentVersionListView(SingleObjectListView): - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=self.get_document() - ) - - self.get_document().add_as_recent_document_for_user(request.user) - - return super( - DocumentVersionListView, self - ).dispatch(request, *args, **kwargs) - - def get_document(self): - return get_object_or_404(Document, pk=self.kwargs['pk']) - - def get_extra_context(self): - return { - 'hide_object': True, 'object': self.get_document(), - 'title': _('Versions of document: %s') % self.get_document(), - } - - def get_queryset(self): - return self.get_document().versions.order_by('-timestamp') - - -class DocumentVersionRevertView(ConfirmView): - object_permission = permission_document_version_revert - object_permission_related = 'document' - - def get_extra_context(self): - return { - 'message': _( - 'All later version after this one will be deleted too.' - ), - 'object': self.get_object().document, - 'title': _('Revert to this version?'), - } - - def get_object(self): - return get_object_or_404(DocumentVersion, pk=self.kwargs['pk']) - - def view_action(self): - try: - self.get_object().revert(_user=self.request.user) - messages.success( - self.request, _('Document version reverted successfully') - ) - except Exception as exception: - messages.error( - self.request, - _('Error reverting document version; %s') % exception - ) - - class DocumentView(SingleObjectDetailView): form_class = DocumentPropertiesForm model = Document @@ -856,29 +531,6 @@ class DocumentDownloadView(SingleObjectDownloadView): ) -class DocumentVersionDownloadFormView(DocumentDownloadFormView): - model = DocumentVersion - multiple_download_view = None - single_download_view = 'documents:document_version_download' - - def get_document_queryset(self): - id_list = self.request.GET.get( - 'id_list', self.request.POST.get('id_list', '') - ) - - if not id_list: - id_list = self.kwargs['pk'] - - return self.model.objects.filter( - pk__in=id_list.split(',') - ) - - -class DocumentVersionDownloadView(DocumentDownloadView): - model = DocumentVersion - object_permission = permission_document_download - - def document_update_page_count(request, document_id=None, document_id_list=None): if document_id: documents = Document.objects.filter(pk=document_id) @@ -1012,135 +664,6 @@ def document_multiple_clear_transformations(request): ) -def document_page_navigation_next(request, document_page_id): - document_page = get_object_or_404(DocumentPage, pk=document_page_id) - - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=document_page.document - ) - - view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name - - if document_page.page_number >= document_page.siblings.count(): - messages.warning(request, _('There are no more pages in this document')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) - else: - document_page = get_object_or_404(document_page.siblings, page_number=document_page.page_number + 1) - return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) - - -def document_page_navigation_previous(request, document_page_id): - document_page = get_object_or_404(DocumentPage, pk=document_page_id) - - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=document_page.document - ) - - view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name - - if document_page.page_number <= 1: - messages.warning(request, _('You are already at the first page of this document')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) - else: - document_page = get_object_or_404(document_page.siblings, page_number=document_page.page_number - 1) - return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) - - -def document_page_navigation_first(request, document_page_id): - document_page = get_object_or_404(DocumentPage, pk=document_page_id) - document_page = get_object_or_404(document_page.siblings, page_number=1) - - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=document_page.document - ) - - view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name - - return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) - - -def document_page_navigation_last(request, document_page_id): - document_page = get_object_or_404(DocumentPage, pk=document_page_id) - document_page = get_object_or_404(document_page.siblings, page_number=document_page.siblings.count()) - - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=document_page.document - ) - - view = resolve(urlparse.urlparse(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))).path).view_name - - return HttpResponseRedirect('{0}?{1}'.format(reverse(view, args=(document_page.pk,)), request.GET.urlencode())) - - -class DocumentPageInteractiveTransformation(RedirectView): - def dispatch(self, request, *args, **kwargs): - object = self.get_object() - - AccessControlList.objects.check_access( - permissions=permission_document_view, user=request.user, - obj=object - ) - - return super(DocumentPageInteractiveTransformation, self).dispatch( - request, *args, **kwargs - ) - - def get_object(self): - return get_object_or_404(DocumentPage, pk=self.kwargs['pk']) - - def get_redirect_url(self, *args, **kwargs): - url = reverse( - 'documents:document_page_view', args=(self.kwargs['pk'],) - ) - - query_dict = { - 'rotation': int(self.request.GET.get('rotation', DEFAULT_ROTATION)), - 'zoom': int(self.request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) - } - - self.transformation_function(query_dict) - - return '{}?{}'.format(url, urlencode(query_dict)) - - -class DocumentPageZoomInView(DocumentPageInteractiveTransformation): - def transformation_function(self, query_dict): - zoom = query_dict['zoom'] + setting_zoom_percent_step.value - - if zoom > setting_zoom_max_level.value: - zoom = setting_zoom_max_level.value - - query_dict['zoom'] = zoom - - -class DocumentPageZoomOutView(DocumentPageInteractiveTransformation): - def transformation_function(self, query_dict): - zoom = query_dict['zoom'] - setting_zoom_percent_step.value - - if zoom < setting_zoom_min_level.value: - zoom = setting_zoom_min_level.value - - query_dict['zoom'] = zoom - - -class DocumentPageRotateLeftView(DocumentPageInteractiveTransformation): - def transformation_function(self, query_dict): - query_dict['rotation'] = ( - query_dict['rotation'] - setting_rotation_step.value - ) % 360 - - -class DocumentPageRotateRightView(DocumentPageInteractiveTransformation): - def transformation_function(self, query_dict): - query_dict['rotation'] = ( - query_dict['rotation'] + setting_rotation_step.value - ) % 360 - - class DocumentPrint(FormView): form_class = DocumentPrintForm diff --git a/mayan/apps/documents/views/misc_views.py b/mayan/apps/documents/views/misc_views.py new file mode 100644 index 0000000000..04a0facd2b --- /dev/null +++ b/mayan/apps/documents/views/misc_views.py @@ -0,0 +1,26 @@ +from __future__ import absolute_import, unicode_literals + +import logging + +from django.contrib import messages +from django.utils.translation import ugettext_lazy as _ + +from common.generics import ConfirmView + +from ..permissions import permission_document_tools +from ..tasks import task_clear_image_cache + +logger = logging.getLogger(__name__) + + +class ClearImageCacheView(ConfirmView): + extra_context = { + 'title': _('Clear the document image cache?') + } + view_permission = permission_document_tools + + def view_action(self): + task_clear_image_cache.apply_async() + messages.success( + self.request, _('Document cache clearing queued successfully.') + ) From a5a6afe2409a1be4aae1666fde0fed0eeba36e9e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 14 Nov 2016 01:44:47 -0400 Subject: [PATCH 057/119] Update MultiFormView CBV to work with Django 1.9.x --- HISTORY.rst | 6 ++++++ docs/releases/2.2.rst | 1 + mayan/apps/common/generics.py | 12 +++++++++++- requirements/common.txt | 2 +- setup.py | 2 +- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index c0788306ce..7180d43ea4 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -6,6 +6,12 @@ - Remove dependency on the django-filetransfer library - Fix height calculation in resize transformation - Improve upgrade instructions +- New image caching pipeline +- New drop down menus for the documents, folders and tags app as well as for +the user links +- New Dashboard view +- Moved licenses to their own module in every app +- Update project to work with Django 1.9.11 2.1.5 (2016-11-08) ================== diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.rst index 75aa8ffce8..94e7e09014 100644 --- a/docs/releases/2.2.rst +++ b/docs/releases/2.2.rst @@ -21,6 +21,7 @@ Other changes the user links - Dashboard - Moved licenses to their own module in every app +- Update project to work with Django 1.9.11 Removals -------- diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index 5feec9e02d..d7fd5eff23 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -10,7 +10,7 @@ from django.views.generic import ( ) from django.views.generic.detail import SingleObjectMixin from django.views.generic.edit import ( - CreateView, DeleteView, ModelFormMixin, UpdateView + CreateView, DeleteView, FormMixin, ModelFormMixin, UpdateView ) from django.views.generic.list import ListView @@ -207,6 +207,16 @@ class MultiFormView(DjangoFormView): form = klass(**form_kwargs) return form + def get_context_data(self, **kwargs): + """ + Insert the form into the context dict. + """ + if 'forms' not in kwargs: + kwargs['forms'] = self.get_forms( + form_classes=self.get_form_classes() + ) + return super(FormMixin, self).get_context_data(**kwargs) + def get_forms(self, form_classes): return dict( [ diff --git a/requirements/common.txt b/requirements/common.txt index 966a77c01f..2c0e089e77 100644 --- a/requirements/common.txt +++ b/requirements/common.txt @@ -1,2 +1,2 @@ -r base.txt -Django==1.8.15 +Django==1.9.11 diff --git a/setup.py b/setup.py index b2396e91eb..91abdbc887 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def find_packages(directory): return packages install_requires = """ -Django==1.8.15 +Django==1.9.11 Pillow==3.1.2 PyYAML==3.11 celery==3.1.19 From a335f39e2a1729bd2b8c85ba6bdab2953a8c4413 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 14 Nov 2016 02:34:56 -0400 Subject: [PATCH 058/119] Add support for the --reverse test parameter. --- mayan/apps/common/management/commands/runtests.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mayan/apps/common/management/commands/runtests.py b/mayan/apps/common/management/commands/runtests.py index 787155f06c..16766a195d 100644 --- a/mayan/apps/common/management/commands/runtests.py +++ b/mayan/apps/common/management/commands/runtests.py @@ -15,6 +15,11 @@ class Command(management.BaseCommand): default=False, help='Don\'t use migrations when creating the test database.' ), + make_option( + '--reverse', action='store_true', dest='reverse', + default=False, + help='Reverses test cases order.' + ), ) def handle(self, *args, **options): @@ -22,6 +27,9 @@ class Command(management.BaseCommand): if options.get('nomigrations'): kwargs['nomigrations'] = True + if options.get('reverse'): + kwargs['reverse'] = True + test_apps = [app.name for app in apps.apps.get_app_configs() if getattr(app, 'test', False)] print 'Testing: {}'.format(', '.join(test_apps)) From 7adf3621b7fa30d813716799ba6c1e050d3375be Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 14 Nov 2016 02:36:05 -0400 Subject: [PATCH 059/119] Remove ununsed task. --- mayan/apps/documents/literals.py | 1 - mayan/apps/documents/tasks.py | 53 +------------------------------- 2 files changed, 1 insertion(+), 53 deletions(-) diff --git a/mayan/apps/documents/literals.py b/mayan/apps/documents/literals.py index 8d8da36711..bc58ba9096 100644 --- a/mayan/apps/documents/literals.py +++ b/mayan/apps/documents/literals.py @@ -16,7 +16,6 @@ DOCUMENT_IMAGE_TASK_TIMEOUT = 20 STUB_EXPIRATION_INTERVAL = 60 * 60 * 24 # 24 hours UPDATE_PAGE_COUNT_RETRY_DELAY = 10 UPLOAD_NEW_VERSION_RETRY_DELAY = 10 -NEW_DOCUMENT_RETRY_DELAY = 10 PAGE_RANGE_ALL = 'all' PAGE_RANGE_RANGE = 'range' diff --git a/mayan/apps/documents/tasks.py b/mayan/apps/documents/tasks.py index 70309258ad..873ee89df1 100644 --- a/mayan/apps/documents/tasks.py +++ b/mayan/apps/documents/tasks.py @@ -9,8 +9,7 @@ from django.db import OperationalError from mayan.celery import app from .literals import ( - UPDATE_PAGE_COUNT_RETRY_DELAY, UPLOAD_NEW_VERSION_RETRY_DELAY, - NEW_DOCUMENT_RETRY_DELAY + UPDATE_PAGE_COUNT_RETRY_DELAY, UPLOAD_NEW_VERSION_RETRY_DELAY ) logger = logging.getLogger(__name__) @@ -85,56 +84,6 @@ def task_update_page_count(self, version_id): raise self.retry(exc=exception) -@app.task(bind=True, default_retry_delay=NEW_DOCUMENT_RETRY_DELAY, ignore_result=True) -def task_upload_new_document(self, document_type_id, shared_uploaded_file_id, description=None, label=None, language=None, user_id=None): - SharedUploadedFile = apps.get_model( - app_label='common', model_name='SharedUploadedFile' - ) - - DocumentType = apps.get_model( - app_label='documents', model_name='DocumentType' - ) - - try: - document_type = DocumentType.objects.get(pk=document_type_id) - shared_file = SharedUploadedFile.objects.get( - pk=shared_uploaded_file_id - ) - if user_id: - user = get_user_model().objects.get(pk=user_id) - else: - user = None - - except OperationalError as exception: - logger.warning( - 'Operational error during attempt to gather data for new ' - 'document: %s; Retrying.', exception - ) - raise self.retry(exc=exception) - - try: - with shared_file.open as file_object: - document_version = document_type.new_document( - self, file_object=file_object, label=label, - description=description, language=language, _user=user - ) - except OperationalError as exception: - logger.warning( - 'Operational error during attempt to gather data for new ' - 'document: %s; Retrying.', exception - ) - raise self.retry(exc=exception) - - try: - shared_file.delete() - except OperationalError as exception: - logger.warning( - 'Operational error while trying to delete shared file used to ' - 'upload new document: %s; %s. Retrying.', - document_version.document, exception - ) - - @app.task(bind=True, default_retry_delay=UPLOAD_NEW_VERSION_RETRY_DELAY, ignore_result=True) def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id, comment=None): SharedUploadedFile = apps.get_model( From 1133577e4d5d9391a0f328c6aee33ed916fd1032 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 14 Nov 2016 02:57:41 -0400 Subject: [PATCH 060/119] Fix ACL resolution for non model objects. --- mayan/apps/acls/managers.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index 63eb8c6f48..eb5bbb207a 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -68,7 +68,13 @@ class AccessControlListManager(models.Manager): obj = return_attrib(obj, related) try: - parent_accessor = ModelPermission.get_inheritance(obj._meta.model) + parent_accessor = ModelPermission.get_inheritance( + model=obj._meta.model + ) + except AttributeError: + # AttributeError means non model objects: ie Statistics + # These can't have ACLS so we raise PermissionDenied + raise PermissionDenied except KeyError: pass else: From 4578eacce922a0f8d1ed4f4e4be172e67ca2e855 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 16 Nov 2016 19:05:56 -0400 Subject: [PATCH 061/119] Consolidate the page thumbnail and staging folder thumbnail widgets. Update the staging folder file image API end point to work in the same way the document page image API works. --- .../appearance/static/appearance/css/base.css | 17 +- .../appearance/static/appearance/js/base.js | 23 -- mayan/apps/documents/apps.py | 52 +-- mayan/apps/documents/settings.py | 14 +- mayan/apps/documents/widgets.py | 300 ++++++++++++------ mayan/apps/sources/api_views.py | 65 ++-- mayan/apps/sources/apps.py | 9 +- mayan/apps/sources/classes.py | 2 +- mayan/apps/sources/serializers.py | 5 - mayan/apps/sources/widgets.py | 119 ++----- 10 files changed, 286 insertions(+), 320 deletions(-) diff --git a/mayan/apps/appearance/static/appearance/css/base.css b/mayan/apps/appearance/static/appearance/css/base.css index e353760ec5..5504f4c49d 100644 --- a/mayan/apps/appearance/static/appearance/css/base.css +++ b/mayan/apps/appearance/static/appearance/css/base.css @@ -102,15 +102,6 @@ img.lazy-load-carousel { height: 0px; } -.tc { - margin: auto; - text-align: center; -} - -.tc a { - text-align: center; -} - .img-nolazyload { border: 1px solid black; } @@ -127,6 +118,10 @@ img.lazy-load-carousel { visibility: visible; } +.instance-image-widget { + text-align: center; +} + hr { margin-top: 5px; margin-bottom: 11px; @@ -148,10 +143,6 @@ hr { text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); } -.a-caption { - color: white; -} - .radio ul li { list-style-type:none; } diff --git a/mayan/apps/appearance/static/appearance/js/base.js b/mayan/apps/appearance/static/appearance/js/base.js index 21b59d93d7..2a125b2ad8 100644 --- a/mayan/apps/appearance/static/appearance/js/base.js +++ b/mayan/apps/appearance/static/appearance/js/base.js @@ -65,29 +65,6 @@ jQuery(document).ready(function() { autoResize : true, }); - $('a.fancybox-staging').click(function(e) { - var $this = $(this); - - $.get($this.attr('href'), function( result ) { - if (result.status == 'success') { - $.fancybox.open([ - { - href : result.data, - title : $this.attr('title'), - openEffect : 'elastic', - closeEffect : 'elastic', - prevEffect : 'none', - nextEffect : 'none', - titleShow : true, - type : 'image', - autoResize : true, - }, - ]); - } - }) - e.preventDefault(); - }) - $('img.lazy-load').lazyload({ appear: function(elements_left, settings) { loadImage($(this)); diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index c32668a2c7..b953ef3ba4 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -70,14 +70,13 @@ from .permissions import ( ) # Just import to initialize the search models from .search import document_search, document_page_search # NOQA -from .settings import setting_display_size, setting_thumbnail_size from .statistics import ( new_documents_per_month, new_document_pages_per_month, new_document_pages_this_month, new_documents_this_month, new_document_versions_per_month, total_document_per_month, total_document_page_per_month, total_document_version_per_month ) -from .widgets import document_page_html_widget +from .widgets import DocumentThumbnailWidget, DocumentPageThumbnailWidget class DocumentsApp(MayanAppConfig): @@ -187,17 +186,14 @@ class DocumentsApp(MayanAppConfig): model=DocumentPage, related='document', ) + # Document and document page thumbnail widget + document_thumbnail_widget = DocumentThumbnailWidget() + document_page_thumbnail_widget = DocumentPageThumbnailWidget() + SourceColumn( source=Document, label=_('Thumbnail'), - func=lambda context: document_page_html_widget( - document_page=context['object'].latest_version.pages.first(), - click_view='rest_api:documentpage-image', - click_view_arguments_lazy=lambda: ( - context['object'].latest_version.pages.first().pk, - ), click_view_querydict={'size': setting_display_size.value}, - gallery_name='documents:document_list', - size=setting_thumbnail_size.value, - title=getattr(context['object'], 'label', None), + func=lambda context: document_thumbnail_widget.render( + instance=context['object'] ) ) SourceColumn( @@ -206,29 +202,18 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=DocumentPage, label=_('Thumbnail'), - func=lambda context: document_page_html_widget( - document_page=context['object'], - click_view='rest_api:documentpage-image', - click_view_arguments=(context['object'].pk,), - gallery_name='documents:document_page_list', - preview_click_view='documents:document_page_view', - size=setting_thumbnail_size.value, - title=unicode(context['object']), + func=lambda context: document_page_thumbnail_widget.render( + instance=context['object'] ) ) SourceColumn( source=DocumentPageResult, label=_('Thumbnail'), - func=lambda context: document_page_html_widget( - document_page=context['object'], - click_view='rest_api:documentpage-image', - click_view_arguments=(context['object'].pk,), - gallery_name='documents:document_page_list', - preview_click_view='documents:document_page_view', - size=setting_thumbnail_size.value, - title=unicode(context['object']), + func=lambda context: document_page_thumbnail_widget.render( + instance=context['object'] ) ) + SourceColumn( source=DocumentPageResult, label=_('Type'), attribute='document_version.document.document_type' @@ -248,18 +233,11 @@ class DocumentsApp(MayanAppConfig): SourceColumn( source=DeletedDocument, label=_('Thumbnail'), - func=lambda context: document_page_html_widget( - document_page=context['object'].latest_version.pages.first(), - click_view='rest_api:documentpage-image', - click_view_arguments_lazy=lambda: ( - context['object'].latest_version.pages.first().pk, - ), click_view_querydict={'size': setting_display_size.value}, - gallery_name='documents:delete_document_list', - size=setting_thumbnail_size.value, - title=getattr(context['object'], 'label', None), - disable_title_link=True + func=lambda context: document_thumbnail_widget.render( + instance=context['object'] ) ) + SourceColumn( source=DeletedDocument, label=_('Type'), attribute='document_type' ) diff --git a/mayan/apps/documents/settings.py b/mayan/apps/documents/settings.py index 2c37e86bb2..e2e9fb4308 100644 --- a/mayan/apps/documents/settings.py +++ b/mayan/apps/documents/settings.py @@ -15,12 +15,11 @@ LANGUAGE_CHOICES = [ ] namespace = Namespace(name='documents', label=_('Documents')) -setting_storage_backend = namespace.add_setting( - global_name='DOCUMENTS_STORAGE_BACKEND', - default='storage.backends.filebasedstorage.FileBasedStorage' +setting_display_size = namespace.add_setting( + global_name='DOCUMENTS_DISPLAY_SIZE', default='3600' ) setting_preview_size = namespace.add_setting( - global_name='DOCUMENTS_PREVIEW_SIZE', default='640x480' + global_name='DOCUMENTS_PREVIEW_SIZE', default='800' ) setting_print_size = namespace.add_setting( global_name='DOCUMENTS_PRINT_SIZE', default='3600' @@ -28,9 +27,6 @@ setting_print_size = namespace.add_setting( setting_thumbnail_size = namespace.add_setting( global_name='DOCUMENTS_THUMBNAIL_SIZE', default='50x50' ) -setting_display_size = namespace.add_setting( - global_name='DOCUMENTS_DISPLAY_SIZE', default='3600' -) setting_recent_count = namespace.add_setting( global_name='DOCUMENTS_RECENT_COUNT', default=40, help_text=_( @@ -38,6 +34,10 @@ setting_recent_count = namespace.add_setting( 'remember per user.' ) ) +setting_storage_backend = namespace.add_setting( + global_name='DOCUMENTS_STORAGE_BACKEND', + default='storage.backends.filebasedstorage.FileBasedStorage' +) setting_zoom_percent_step = namespace.add_setting( global_name='DOCUMENTS_ZOOM_PERCENT_STEP', default=25, help_text=_( diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index 49fccc9564..31a9dd0eef 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -7,9 +7,9 @@ from django.utils.http import urlencode from django.utils.safestring import mark_safe from django.utils.translation import ugettext, ugettext_lazy as _ -from converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL - -from .settings import setting_display_size, setting_thumbnail_size +from .settings import ( + setting_display_size, setting_preview_size, setting_thumbnail_size +) class DocumentPageImageWidget(forms.widgets.Widget): @@ -17,15 +17,19 @@ class DocumentPageImageWidget(forms.widgets.Widget): final_attrs = self.build_attrs(attrs) zoom = final_attrs.get('zoom') rotation = final_attrs.get('rotation') + + html_widget = InteractiveDocumentPageWidget() + if value: output = [] output.append( '

    ') return mark_safe(''.join(output)) @@ -38,6 +42,8 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): Display many small representations of a document pages """ def render(self, name, value, attrs=None): + html_widget = CarouselDocumentPageThumbnailWidget() + output = [] output.append( ' + +
    +
    \ No newline at end of file diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/browserconfig.xml b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/browserconfig.xml new file mode 100644 index 0000000000..beca4f5f92 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/browserconfig.xml @@ -0,0 +1,11 @@ + + + + + + + + #da532c + + + diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/community.html b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/community.html new file mode 100644 index 0000000000..54830af089 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/community.html @@ -0,0 +1,154 @@ +--- +layout: default +title: Community - Select2 +slug: community +--- + +
    +
    +

    + Community +

    +

    + Select2 has an active community that enjoys helping each other out. +

    +
    +
    + +
    +
    + + +

    + Having trouble getting Select2 working on your website? Is it not working + together with another plugin, even though you think it should? Select2 has a + few communities that you can go to for help getting it all working together. +

    + +
      +
    1. + Try sending a message to the + + Select2 discussion group + + or searching the archives. +
    2. +
    3. + Ask in the #select2 channel on + chat.freenode.net or use the + + web irc client. + +
    4. +
    5. + Raise a question on + Stack Overflow, + make sure to include the + + "jquery-select2" + + tag. +
    6. +
    +
    + +
    + + +

    + Found a problem with Select2? Feel free to open a ticket on the Select2 + repository on GitHub, but you should keep a few things in mind: +

    + +
      +
    1. + Use the + + GitHub issue search + + to check if your issue has already been reported. +
    2. +
    3. + Try to isolate your problem as much as possible, so we can easily test if + the issue has been fixed. +
    4. +
    5. + Once you are sure the issue is with Select2, and not a third party + library, + + submit a ticket + + to the repository. +
    6. +
    + +

    + You can find more information on reporting bugs in the + + contributing guide, + + including tips on what information to include. +

    +
    + +
    + + +

    + New feature requests are usually requested by the + + Select2 community on GitHub, + + and are often fulfilled by + + fellow contributors. + +

    + +
      +
    1. + Use the + + GitHub issue search + + to check if your feature has already been requested. +
    2. +
    3. + Check if it hasn't already been implemented as a + + third party plugin. + +
    4. +
    5. + Please make sure you are only requesting a single feature, and not a + collection of smaller features. +
    6. +
    + +

    + You can find more information on requesting new features in the + + contributing guide. + +

    +
    + +
    + + +

    + You can find more information on getting involved with Select2 in the + + contributing guide. + +

    +
    +
    diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/bootstrap.scss b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/bootstrap.scss new file mode 100644 index 0000000000..83fc0c7b11 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/bootstrap.scss @@ -0,0 +1,51 @@ +--- +--- + +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "vendor/bootstrap/variables"; +@import "vendor/bootstrap/mixins"; + +// Reset and dependencies +@import "vendor/bootstrap/normalize"; +@import "vendor/bootstrap/print"; + +// Core CSS +@import "vendor/bootstrap/scaffolding"; +@import "vendor/bootstrap/type"; +@import "vendor/bootstrap/code"; +@import "vendor/bootstrap/grid"; +@import "vendor/bootstrap/tables"; +@import "vendor/bootstrap/forms"; +@import "vendor/bootstrap/buttons"; + +// Components +@import "vendor/bootstrap/component-animations"; +@import "vendor/bootstrap/dropdowns"; +@import "vendor/bootstrap/button-groups"; +@import "vendor/bootstrap/input-groups"; +@import "vendor/bootstrap/navs"; +@import "vendor/bootstrap/navbar"; +@import "vendor/bootstrap/breadcrumbs"; +@import "vendor/bootstrap/pagination"; +@import "vendor/bootstrap/pager"; +@import "vendor/bootstrap/labels"; +@import "vendor/bootstrap/badges"; +@import "vendor/bootstrap/jumbotron"; +@import "vendor/bootstrap/thumbnails"; +@import "vendor/bootstrap/alerts"; +@import "vendor/bootstrap/media"; +@import "vendor/bootstrap/list-group"; +@import "vendor/bootstrap/panels"; +@import "vendor/bootstrap/responsive-embed"; +@import "vendor/bootstrap/wells"; +@import "vendor/bootstrap/close"; + +// Utility classes +@import "vendor/bootstrap/utilities"; +@import "vendor/bootstrap/responsive-utilities"; diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/font-awesome.scss b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/font-awesome.scss new file mode 100644 index 0000000000..d72cf940fd --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/font-awesome.scss @@ -0,0 +1,16 @@ +--- +--- + +/*! + * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +$fa-font-path: "../vendor/fonts"; + +@import "vendor/font-awesome/variables"; +@import "vendor/font-awesome/mixins"; +@import "vendor/font-awesome/path"; +@import "vendor/font-awesome/core"; +@import "vendor/font-awesome/list"; +@import "vendor/font-awesome/icons"; diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/s2-docs.scss b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/s2-docs.scss new file mode 100644 index 0000000000..6b66a37c1f --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/css/s2-docs.scss @@ -0,0 +1,24 @@ +--- +--- + +@import "vendor/bootstrap/variables"; + +@import "result-repository"; +@import "sidenav"; +@import "hamburger"; +@import "code"; +@import "featurette"; +@import "layout"; +@import "nav"; +@import "footer"; +@import "alert"; +@import "home"; +@import "examples"; +@import "social"; +@import "buttons"; +@import "anchorjs"; +@import "jumbotron"; +@import "prettify"; +@import "syntax-highlighting"; +@import "typography"; +@import "dl-panels"; \ No newline at end of file diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/examples.html b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/examples.html new file mode 100644 index 0000000000..aeb329ba15 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/examples.html @@ -0,0 +1,256 @@ +--- +layout: default +title: Examples - Select2 +slug: examples +--- + + + + + + +
    +
    +

    + Examples +

    +
    +
    + +
    +
    +
    + + {% include examples/basics.html %} + {% include examples/placeholders.html %} + {% include examples/data.html %} + {% include examples/disabled-mode.html %} + {% include examples/disabled-results.html %} + {% include examples/multiple-max.html %} + {% include examples/hide-search.html %} + {% include examples/programmatic-control.html %} + {% include examples/tags.html %} + {% include examples/tokenizer.html %} + {% include examples/matcher.html %} + {% include examples/localization-rtl-diacritics.html %} + {% include examples/themes-templating-responsive-design.html %} + +
    + +
    +
    + +{% include js-source-states.html %} + + diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/android-chrome-36x36.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/android-chrome-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..12a3dc6b4e9735acdea5c5e29eb42219dffaf1df GIT binary patch literal 916 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/apple-touch-icon-72x72.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/apple-touch-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..e5399209d9e126eccad30519c5f5198113cc7812 GIT binary patch literal 1626 zcmZ8g3oz7s6h5rSh86q3vbyV0=_XPr-7UK!c4hNe(#xBcP@65*Bcg{_hzu2*QYjm% ztt4}&gxFB-MtSDOhV`fk%Z$?WZ}>0PbWe&-%(EwM>Moy$zJVAW0G4<-DC`w>_8xp&j!8nn5oR zTnt29(0^4F+2Te0SAuxp!2kV-_zh4CwuMoP93eBH@U!c`)xRP-SiHeqxadSYtLQiJ zYcrNmO3I{GcU<{0FAslnT!7=|IHIeK8s%Z0T1hGe=i$ zK7TJ`-<$Mh3H`m+s# z#gkMtPb#s(7K?ESu*Ah~xrHoE+aQy{ge!)I_JeeRtX8SmFAEpU+PywGIcVaBL|@I! zPT!?7g{*`X`ezwv5cXyGuxKe*2kI_YDj&Ck;m34f#SzI@Zt+Eb8Oi7|oMd)A}hLHa%S6E(u5v&vzeJ$ z8ufvD$*Yu5+M~KnW1i-G)A5g{#>U%kKbjGV=m7&G53Ous270zwe$}`udD9Xe7Ura{ zgHt?0vwG*z@FlaRrUp~3+x3jyjSagv1DC^`D@$uWzMjm>dZWhfE(%KzpZ}pE+xcKw zo9`RJ>5X>#JZj=4eH|^*_}Qr)8gZXcZn8B;9R#eYl`xyu3SZSX+0W_t3~R=M*mW zIXhFcMQUkkTHX7>+9XG0&KUL7v5%~B)Z4wj{%~^;JCU?I%rdX3WZ>CUp|dej*T$uH z2X|B9`5@lR;O4qh+!ebU_*0`M1gef@Y1t6Q);?+PX+A;F{=6eJv_N{IU$3GOGeJ4l z*4JlkVL`Yp4X3;%Bzq5iuX2C~(IK(k zdtzf0c&b}@m%orK=3j@4vIlQ6mmGV|!eGskklBFz{Ig&G9fYdcLEnnf~4tPzK5-{>nH5 zoMR3ig(KT0nAZlN41_FlQ%754U2`3&PO&M$p@?AuBbw^m&o&mh$O@p_F>T9jd=mc! DxstZ3 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/apple-touch-icon-precomposed.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/apple-touch-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..31b912e71dfd9364ae7e5ae1db7190f810624da4 GIT binary patch literal 1586 zcmYLJ2T+qq6kd|hi4qe?q!|trP{0P!Aaa02LXi>zazT2LP?Qq7oFP<^2pCX7isD4( z;7~Duiqr$83R0ztnxjaQ;wdWSe#G-;-tPO}d*A!s&d%&!va&Eniphup0FWkRBMRin zn@a=^?QVxpgg_2)*5H%@0HvwotFD4jED%gFHU#%NA5<M?^Aw=uK?k#@Q5vM z3vBJP0ALPW!CUY|bqhu88vyC)PUm`!lXsx%Dcw|{k`G)vwmUaN;ijxi3UGM|aEU-R z706$E1~&(CSTn+?8sH952HIOmCancy_Zp+0jESfVeOw0}*nmN?umNvnwqY#t*2PvS$3!O4yiW3EnBH8{ z$it7j$7il;=7n;Kwd8Aj3rDz4QM=~`2n#L_z5KcC_v!rS1+>!j)vOWJxoQC5wkAdf zRQraK8((aO^l|zErOae}(!1z4j^zp^L&09|CANsN3RSzV0$T%;1IB8xrex^bO7PR0 zakw-Oc-uGP@`OLR<~++hfpoh^&4Yfc8p*5(bz>U}dz0_z(14klu}l#8&O=iJ3GQ!d z^q}H;`J&*KU`k4>KLVz;M=Fym$nxeIdyc>hM%vOQT6$m-LseRTli95txJmPJcUo*} z>-AXWv`O*tj2LCLHhd>4rB%%)24j^u-Z-ws#L(XukK?F#PpXh+YqwaEcX`_6LV`=&SR$P~nU!S9pwrvkgJU!Y}>ymDz$_NN>!B!88%_1nIyLd%qhcjivq@c#J zuSrdO(ZmKDtsbZQ*ui%Uq}Z%|S-!^pi*exvmF)L)5B|&w(J+edcj3aShDTOU{Hy+c z0>OUtm+qFErN!=xO&7SjpM@im|b=Gb!hCdZJl~oudt2vyuO- z@03wcSg(50G9Yx@KkxEz0zOxuc44FA1)I%ABD)9{j}(s2eCBXC{^@cFXEk2u6K=j3 z&(3A{Ep|pm(Cg;4`OD5|w33n%VQ7L?K^&3}?muto6ObpI3X72)o0^(JSYok980OZb zkds|Gg&cv#^3L~+E8RN%&wHW=3nj~+xe<5aU`Om84Ntmcl{hvN0nKJL{zgYfQg~Q>d5)V{5S%lR*O4hIJ zxleWbIB0!p(Ym?NjzKJrw9`M9T=@7F)R&A`QmhkmL5I(n4Yq zbQ9U#;t|uCEzv9DMp=hEO>FL|bh;LraiNOi{)5(DTy@Ws%#r59+UaXtsoVx-VinOm zyP@MPEf~38v{4>q^MJD0H4nYk(~(qr2E{cD9}slji|*%%XG8>e;^_elcjza`;V(&u z1lp;pwpzBen~YNcTuEHhT^y~1HsfI6XuJ_qtHA@V#G~Td26~$t+Z*K?h1;0qTc(;| W8jE5q8ER)jBY+9X!swo%3+rD}`mIm^ literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/apple-touch-icon.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5399209d9e126eccad30519c5f5198113cc7812 GIT binary patch literal 1626 zcmZ8g3oz7s6h5rSh86q3vbyV0=_XPr-7UK!c4hNe(#xBcP@65*Bcg{_hzu2*QYjm% ztt4}&gxFB-MtSDOhV`fk%Z$?WZ}>0PbWe&-%(EwM>Moy$zJVAW0G4<-DC`w>_8xp&j!8nn5oR zTnt29(0^4F+2Te0SAuxp!2kV-_zh4CwuMoP93eBH@U!c`)xRP-SiHeqxadSYtLQiJ zYcrNmO3I{GcU<{0FAslnT!7=|IHIeK8s%Z0T1hGe=i$ zK7TJ`-<$Mh3H`m+s# z#gkMtPb#s(7K?ESu*Ah~xrHoE+aQy{ge!)I_JeeRtX8SmFAEpU+PywGIcVaBL|@I! zPT!?7g{*`X`ezwv5cXyGuxKe*2kI_YDj&Ck;m34f#SzI@Zt+Eb8Oi7|oMd)A}hLHa%S6E(u5v&vzeJ$ z8ufvD$*Yu5+M~KnW1i-G)A5g{#>U%kKbjGV=m7&G53Ous270zwe$}`udD9Xe7Ura{ zgHt?0vwG*z@FlaRrUp~3+x3jyjSagv1DC^`D@$uWzMjm>dZWhfE(%KzpZ}pE+xcKw zo9`RJ>5X>#JZj=4eH|^*_}Qr)8gZXcZn8B;9R#eYl`xyu3SZSX+0W_t3~R=M*mW zIXhFcMQUkkTHX7>+9XG0&KUL7v5%~B)Z4wj{%~^;JCU?I%rdX3WZ>CUp|dej*T$uH z2X|B9`5@lR;O4qh+!ebU_*0`M1gef@Y1t6Q);?+PX+A;F{=6eJv_N{IU$3GOGeJ4l z*4JlkVL`Yp4X3;%Bzq5iuX2C~(IK(k zdtzf0c&b}@m%orK=3j@4vIlQ6mmGV|!eGskklBFz{Ig&G9fYdcLEnnf~4tPzK5-{>nH5 zoMR3ig(KT0nAZlN41_FlQ%754U2`3&PO&M$p@?AuBbw^m&o&mh$O@p_F>T9jd=mc! DxstZ3 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/favicon-16x16.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..ab60a1d139cb0a8481911f475f6cf41e788f83fa GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM*ts0X`wFKAD9KIX4(g*ZgN-03wF$>p+q*3rI5lgNPK|0V)7Vfk~J$s0du@ z4_Gfl{wz6G(ik!D1Pvb zf#D^C?h2liGmIX)Sb{$=h#z6`nar2ZAl%~Tyy!6ln_%L}BF%1N&#l@<3%mHr;svT~ zgp0U@>KJUcnt1812fD$$B*-tA;qSj-=KsH${xLrPFTUc1ti-&8z59Yi=Y9RKU2a9r z%3Xi?|C-1r&f)TTv0=e~82I;3@}rY2(1?AWE{-7*mv#HorJD?RTKK0bI=3-@zqgG^ z@6PN0|22d^*r`+&@3qrqnBw(eRcL>;+AG&!j?FXjSD45oPH4HDptX6eq?3e{yw>5b zm1kVC@3-okqYZ+o-qs{~2bU6@GOl`JoEXC*f5g5hX#19-8f8yaN4Aam!<$wB&=hGktW@T=@WNu+)VeiQz%)$yT4JL!lvI6;x#X;^) z4C~Ixyacjq1AIbUeKHFfa&G(w%H`Z(PPqtSfXKMxKoS{2l!2rYE&xf+>N^bLjX*&J z%DxU)&mcVy!3LWT;UX00-1x!3@DFUoZ!pP_b)6ym2E&rC3`KVs{Eh-u{sp@VsF5k_ z(o+ToKBZa~`6glW84NM!SX?$SXs>0|oX?^=bEZ)iP%%&$L-uu`UZ9z~*g_bjCmv(+ zp39rPf;)*pvXjB@$W;d0bBwM)yBLZeZe@#D%Nh5DfuT#FjKTK+gT(Yt461J!w4X4T z++{L7#pHI7CEyFA;B5w*iGoG-V)YEZdl^Lg7(^=nGVn9x-&Tq`xQHhuRkY<11H*F$ z1~=j28T>ha7!=D?I$a&th(w=w$H2tny))cyeu;SdWVwkY6yvU&h@`fBrBr{#z^-=Kn+YDsvs37ZyH$avq$B5nBdK>L z`!M`?Jdb5j;mr${_BHh@wrj~PP%3%8?KjWd*E?(MrfXaFE$-e}mK`XQ^wP?#WbX7+ zFF(~S3^*}=e!7w5@txwL#}6!Blca8+@NqLi# zFYUH5W7d^lA2nXB4GK;8`f=sds_9;DJEkSh+ArVNv}i}MYwL1Fc%p*Ww1+pJ{raVrCLX-{s$IR;re`rG?+(9; z+N7KRL}Gs7Q>l4^)53)s6P(;0^~4@sd`W1^*4bY+>*~GBW3ta*b7Af@0XrRY*GUDd zTRuoy?we5J?P;y2npH9Hoa@#TJa=DkFg?~d$h&#>+#jtjt*so3m#^;ne?Qvej`@?P z_N(ViODQbYdjd>M;Z-3KB|(Yh3I#>^X_+~x3MG{VsS23|CCLm76>}bc;^8O^)6h8O zfBKB)(;xZee9%@5v&}!U`@8CWlj)l{bedoW618#E~;cWR9?(Ztz&(rN{6} WT(IPmlj&5T6%3xPelF{r5}E)%(CB&q literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/favicon.ico b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..91dcfd50e8aac9daa112e3c7d0a3d0eafca1652d GIT binary patch literal 15086 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 P00000NkvXXu0mjfoT;;3 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/manifest.json b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/manifest.json new file mode 100644 index 0000000000..99bc8aa42d --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "Select2", + "icons": [ + { + "src": "\/images\/android-chrome-36x36.png?v=699Nxpjr2A", + "sizes": "36x36", + "type": "image\/png", + "density": 0.75 + }, + { + "src": "\/images\/android-chrome-48x48.png?v=699Nxpjr2A", + "sizes": "48x48", + "type": "image\/png", + "density": 1 + }, + { + "src": "\/images\/android-chrome-72x72.png?v=699Nxpjr2A", + "sizes": "72x72", + "type": "image\/png", + "density": 1.5 + } + ] +} diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/mstile-150x150.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/images/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..9dede7da1659f7c36e6b2a810c48f7341c38bf8c GIT binary patch literal 1394 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 k*U{af-huBDI+Z#b! + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/index.html b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/index.html new file mode 100644 index 0000000000..accd1db992 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/index.html @@ -0,0 +1,237 @@ +--- +layout: home +title: Select2 - The jQuery replacement for select boxes +slug: home +--- + +
    +
    +

    Select2

    +

    + The jQuery replacement for select boxes +

    +

    + + Download Select2 + +

    +

    + Currently v4.0.3 +

    +
    +
    + +{% include notice-previous.html %} + +
    +
    + Select2 gives you a customizable select box with support for searching, + tagging, remote data sets, infinite scrolling, and many other highly used + options. +
    + +
    + +
    +
    +
    + +

    In your language

    +

    + Select2 comes with support for + RTL environments, + searching with diacritics and + over 40 languages built-in. +

    +
    + +
    + +

    Remote data support

    +

    + Using AJAX you can efficiently + search large lists of items. +

    +
    + +
    + +

    Fits in with your theme

    +

    + Fully skinnable, CSS built with Sass and an + optional theme for Bootstrap 3. +

    +
    +
    + +
    +
    + +

    Fully extensible

    +

    + The plugin system + allows you to easily customize Select2 to work exactly how you want it + to. +

    +
    + +
    + +

    Dynamic item creation

    +

    + Allow users to type in a new option and + add it on the fly. +

    +
    + +
    + +

    Full browser support

    +

    Support for both modern and legacy browsers is built-in, even including Internet Explorer 8.

    +
    +
    +
    + +
    + +
    +

    + Getting started with Select2 +

    + +

    + In order to use Select2, you must include the JavaScript and CSS file on + your website. You can get these files built for you from many different + locations. +

    + +

    + Using Select2 from a CDN +

    + +

    + Select2 is hosted on both the + cdnjs and + jsDelivr CDNs, allowing + you to quickly include Select2 on your website. +

    + +
      +
    1. +

      + Include the following lines of code in the <head> + section of your HTML. +

      + +{% highlight html %} + + +{% endhighlight %} + +
      + + Immediately following a new release, it takes some time for CDNs to + catch up and get the new versions live on the CDN. +
      +
    2. +
    3. +

      + Initialize Select2 on the <select> element that you + want to make awesome. +

      + +{% highlight html %} + +{% endhighlight %} + +
    4. +
    5. + Check out the examples page to start using + the additional features of Select2. +
    6. +
    + +

    + Downloading the code locally +

    + +

    + In some situations, you can't use Select2 from a CDN and you must include + the files through your own static file servers. +

    + +
      +
    1. +

      + + Download the code + + from GitHub and copy the dist directory to your project. +

      +
    2. +
    3. +

      + Include the following lines of code in the <head> + section of your HTML. +

      + +{% highlight html %} + + +{% endhighlight %} + +
    4. +
    5. + Check out the examples page to start using + the additional features of Select2. +
    6. +
    +
    + +
    +

    + The different Select2 builds +

    + +

    + Select2 provides multiple builds that are tailored to different + environments where it is going to be used. If you think you need to use + Select2 in a nonstandard environment, like when you are using AMD, you + should read over the list below. +

    + + + + + + + + + + + + + + + + + + +
    Build nameWhen you should use it
    + Standard (select2.js / select2.min.js) + + This is the build that most people should be using for Select2. It + includes the most commonly used features. +
    + Full (select2.full.js / select2.full.min.js) + + You should only use this build if you need the additional features + from Select2, like the + compatibility modules or + recommended includes like + jquery.mousewheel +
    +
    +
    diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/options-old.html b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/options-old.html new file mode 100644 index 0000000000..65690d1852 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/options-old.html @@ -0,0 +1,37 @@ +--- +layout: default +title: Options - Select2 +slug: options +--- + +
    +
    +

    + Options +

    +
    +
    + +
    +
    +
    + + {% include options-old/core-options.html %} + {% include options-old/dropdown.html %} + {% include options-old/events.html %} + {% include options-old/adapters.html %} + {% include options-old/setting-default-options.html %} + {% include options-old/backwards-compatibility.html %} + +
    + +
    +
    + + diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/options.html b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/options.html new file mode 100644 index 0000000000..5670c1cf10 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/options.html @@ -0,0 +1,37 @@ +--- +layout: default +title: Options - Select2 +slug: options +--- + +
    +
    +

    + Options +

    +

    + Select2 supports a wide variety of options that allow you to customize it to your needs. +

    +
    +
    + +
    +
    +
    + {% include options/introduction.html %} + {% include options/core.html %} + {% include options/data.html %} + {% include options/selections.html %} + {% include options/dropdown.html %} + {% include options/events.html %} + {% include options/compatibility.html %} +
    + +
    +
    + + diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/FontAwesome.otf b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680 GIT binary patch literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 zl^SXjMs!_Dy`s8u>CnY)jTPD2ga==2xN%*{#{i(wj|%uM=HUQDr@)6YHTVmtkrZs(Z9SUL)@IvXf!Cj7x2E_ zuSs_{eyZO1DcOm8X5jyo3{ChUe7JCahEVLn~U^5^K zpTa8`2)#xCyZ#6(Pq|=Fg6}ET{W$3*8q5`}y~t!C{>b{P!ctt7TU<@BEM7u4lf78Qks`2aJPlqf;9O=aLqhPJlK z-EAP`&9xTG)vG@6p;A-j-pZy@OYt6YM{IOsG_0goFp~y@6+^*8!9oIzD6$3Hf`xcG zo~}53+WdO#Y2Fv`i9Nm292+}rnh($5-+d?K7d>(~;%qO#D?r5OqN1hPIgz~G#l<+5Q2>NIB#JlAy%HacqewzMldb6d03kj({Ilai67aRq~m zY`Ya$!a=%;k2CSQq`0!8L}Mz-G3`>4aBy6P{AZBsq?>F7w<4{fNK;bZRNkc8v!}Xx zkEW&G(puS?h_id}#LvDL|LT+)_~9Md=Us+ z$%lLQ!)yHh2%j~(cUSM`gBqo!ny@fl#CfbX{1dBHwY62Xsz&~^ovT-!nDza?P>XYH zR}{yOo3AAthYb!FpM>L^%n1oYsv(sRX~*r(TVKd}bV*1sZ#tgfYh7etbUfjj`S@{P z+l#gr!HU7+!}2ZYN?2}#XXFd%uh`=Fo`g?l&V!lr$zZUscmW(eyZj_K-T8?@F;~k$ z^0EdpZuqbPWbl;24-HWRzQQR@g26aGkE`9WG>3#!KI97S@%uQIvu%b9)ON>eoH4=Tks2$NBOJ+Cpc7HV+8t-(aF37_PV8R~+jwA5QG>8+^x>?vvPI$kp>% z;39o*?y(LvL}>X*IMW-*hP3mJLloy8#@>Sr6L}``F=!$0vr$ z8pZ|?LeN0~Oh&*^qS?5CHk`*`<)i*#K#r@M*}C1P-XnDTO4iY`!w!8`%3Q z?dVW;G_*H2tFZ$H159&iJ73uWmEU{=8Co5WlUw;tcrZTS6*AB|_=MMQ0^mD}hU{!* zb}66j$B)8;@s*H`5Bb6AF#S86?E*f`+0WU}Ii{7Z%5h8qHenvZcxC)}_566>euKg4 zrIU2)Wa}g-e#`e>54}UWcF1nv9l%`hqi+<$;fu#`dKJU(GGU7i)*q8ct)0I^y)`v? zvq@JV#DvOVFa`Xvga4}N0vQc8p-@BP?{E!#!$fb!3E=0? zB?(u>cocLvN<1-nOw+&a2 z7h!o+3E#3%V@|xJRolvKWx^Ljj*lgj@?j2nUa{`Woxfp$62AbS-c;g#Eckur+Aq~s zy?u+qIv2hG`-%S+4895b$v)RU555WeiT@_-C+j@5>?Q;c1+e|~_V(8ntA`*8c?n+< z_Vn;s*^uyT>`^bc1#U~iBe%t<8PW`?g(kd&+j+pGwrPg^aV7J?hr%959yj0OfSO$T ze;9icz^1Bo4HTsrPCSR>F%70kvv(Ci1Vxbof-)%rQf9(D&y>mR=F`^g(3 zpH}?-;q&kE12ATGV9e}5NW3kR{oKp@_@oca4@!ZwPB3*q8*a(Pz_yUd9dvUk}!a73512K+A2yZcq z>)w96%;L&~#f3xX1C2!WH4_Keb}4!3{OWfZ^YPvDhu?=QFClNReX@1x z`Kwn&b@in!f8GgfUhHHtez<4U>0s312IAE3qB_thONWZ;ba%}@T|7SpCmT4AzN;tF zVF!KZ5yq@QOi|nVhf4aPhlAkZ5?rrg7(~jG-ta#;AJKW9U-yU}p~WDugx{kPXJ|0z z*14m~5~T*GGq+S-?J2J+&#yF>^9Aju_I8!9lf3$g@Dk`>)P>0rrl1S6W0c01FX*yl zzFJ>*u4aHYRP-ebNTDki%X_-B0xSG~@d$w}rjK9%N>4?QTAY$zhSc!_No84CfGbi_ znx4X&$OuJ-IbDym(QI*Yy1SH5_1z~zlFnJg*&QyMOHE?ME?0rk!8`M9xw)zVq>z9O zABre*=xt^26!t;IlJv6nwB5w=QLEE+?df2(An#J|#aOTnmc%QbEFDVc8O z(T)}ghTB*OZXsPP2H$A3$m_1JY*TkI@UZY#>YA_d&k~adfB1nsNFIFr2m0WQ**lhR z1lJYp&0sQ4bZq17<{9cf!VH~E0(X3W@TpNrXU8rYj35q)Z^tzF-arIWGMMf&E_&#_{$ZyHsd)Ljg4KoRLdbw zuk_EjPS;JB(tS@+2Th_^R9kIZ9g$p7Qsd(6`E>dCL8?S&o-37G)l{|p;=j(5wa3*5 zZ_i3Q%5VSj`?T9?@+294@Li(j5$@&4O0v3>bV|LQ&P$!D01AkP1B4Aw!(HkdER$`R zaeKNI>cqkE%s|8{c;uklIZD6WEYil=E5SgDC)x2uiqoZ zg0@YN1Cb+W$z#X{pj#t?KZ)+5v*-tE`T-i7MX-P;i)GY8R)Hb9Pj)@=qYda=&pb~C z(ucmKk4t+u!X;t63@U!=DUA7}G``Q_$Tj33vBi-$(bgAa9VKc?=ofSyM!#8nR$`70 zjFMs`xH$SIc7h)WQ4>PGAZy8KGK=@r6xRW?(063QNwP{or(VbSsvd+;6OLxkWh9fN zV>!|(+_|^&5#aBR(tty9wjxTMlMQIWjPEbd0bY_xAQBJeRGsJ_+y`wEyCZ( zCgJbwJp`#MyH&N%zfjR!&}?kxXsh2WB2(T5jdVPjqY|_ z%%VX`BAW2+kPp!DpP@!-0mlAN+!U%*V!*G%Y?DBi@&^tdIJW16)LZMUX;k6q#56sc zby1djOUby~Lrcs4twHCc3nV5%rpPp>8}9bc5-*=BtP(kFB~Cl*pN_lzGmrI8qb(;- z6(#IYv?r`>T&Z5UcIWy8zSjlgF=1ojin@&<8|z++Kdjy$6CZx9{y-gHccAcS!T~A5 zfEfH!G5D{=|B8rC8XhrxI1Q)a%HF5QD1$94KPNYYWeak13-pEAAy$JU+hr8&v_(lh zcrES_6`Bex1!}}1_~FBlc+JLIg+L<|8(|8~S0eXfcjOf3mzYBeEy$50+Q8qw4R!^x zpCOCMV&cK8#cyXDxJ)5t8)N@Eoz@~d;8C|ritXM4PY4b7&B6mR`u6Qk5+2bRa?ke* zZs}}+3mA^20F89EAd{V}QIKd&=RguA>jm3afw8I`h%zkbVpsIDB62jOeZQ;|nM06Be7fG>8|`Z=N`}Ux(OU)G|9j>CLrG+% z%r~Ovpn^O)gg*QUOSI}hn$wBN@J^N%JIf#Zrv2;FpGtdrdJigG*nxx&k3jJ3Z}a&L zPpu!J9WA9^5V9inlH+QOw-ARo2D3A$Z_SSosH~xG+MkbK5H~+&p_KMpIO`c2^7~Fc zg6>ESag+Xh{h5ZdyG~0$!G+P%wD^eM!HA@=5`4d`JY5o`j{|Zm`|>eW5Sc% z9hc9wMnmSp2L*n^4Et6H{`2<%HD82^XTh#0ChHWS0Jg_9z{yGJ^N&)L;L)vbh=Xf0 z?yif(ydt>R+GtU4}j=u|TvljkknX$~^2KY?~7L{hD6ep{bQ*tuk z@^txwMFzbwJ)Mk$pWqJ{!xWD*ZrsN){k>{r8Hh=iE?@CFQ)jH>dUlZkqL!kD=9a$QGT>r3i9pw^l-;E!G4JxQ22sOM$r6}VON1MW z!%N*;xI10qQB<~Q`h1>#?hg~CrKHElt5%=TzsfWqJ|nVI@1Et!=R%mMyt1smUPW&s zi4Y<4w^zz?3K0yoJIELK@%9b!^cC_CwXaKzyfki9f1j4^5ttKru>U29amPhu|4ZP4 zrJ`5Jz_OC``%;GWf+eSLx}dDzi)9cwJbwViSY``Ed_VJ!5u|nDGgfzr*~$tc0irOl z3<*~DJEEV|g~SrRz}arc^V9RJV#nGoo7cxk3$rcR*(wMXY{dgIkUjud@wpM4sl38m zq5l4hw$tzPPg^Hmi2X!r@_J2Pbyca&Uda!ynt1Cc6`)8Kt|h(Iu-7bIus^c1OSRv< zuW}Ff3v8#SpCd12OY_Uj73C@-{pK4YJ^yCh`u*Hd*Wt?c`n2WS)~(t3y5pdGe}xn$ zv^WgVo_~;>Pi4ZcBQi3NC^dayL)=7W{-FmC4QOW&t0qS_2l+f59k>iv$bUsaf;T|T z2SKANifdTn8;B(Wf_qLxh+? z1z~V&;go9o`?_%TAZ!q`!|B<{d3HK?#Hg6g!RSvJTXk1+ZdN0g)tKA7OGS!gobRh% ztzs8#A>~krLd3f$N3DDMY2D6m#@8hBnB-uVh(78D|BfhCB!&(r!)P?UarYICZ^KCp zQIg<}kGeVEsNPXPLZ0sIJRLw&@-&vj-o7nLthw=2qq^>^uj+V=0}Olia1S1VXbr@V zT#A<$%%A%5{4-a`7)! zdZvobmSmJ@wRWU>s))>zL^M?F_v)GCVJCS`} zpVgpm%n7LjUOvNGsxMWOIpR`JNh!ji$Lw#~Pc#)blr(sWWTY}bu;DHssRuMw^LD${ z=~NXLI51>J?T_BK}-B8>}o~~DVttDk%6%xfiDyAZ0R2VdsVQ_($$0P76eV3&8 zL&ypl*TzJx0C|W-vgw;&5Q-Sfg6+Y9*LnCB8}aEC5NYb#3Gtsa%NOIDO>Col@Gw9{S#3JoBVoEbnf<5pCGTufo%( zTt^;N%YXh_{HmCY&@>$K9zU+CE2z(_ z;dK37is^Ia&fsXbnEvJV7%D@4P&b)sxQI)w}raWd_f%rkVuQ< z^jEJ|o#OX{AurxbWNJ9xxP1LTScdbJ|D0?Bx`2C4SGQo5O8!%PUVK&}*A`W^VWlc6 zV`XAIC;#~kbMwf}0JNDE^6s;#XQGaBj#^uNok}ho&paM?h_jX!mX)eH6FWB^=j;+P zw-CVbesrdq28rni`j1V^=wrMgW__PM$bOU)yEvS z)bEnMb&|XQtMmy3_sN2Jv<=hb!2cPvPo9?rOje}CZY%a}G{zxq2hcy0m(ntMDZtJT zXTICKR0C_EFR6BS3EvYgw7XdX)&Lh(jz1&*4E^zSfWkMEr1j2}l=XxuURkziJZCXW zCM-Mk_PZxfUcY{9$@D^AxOpc`AxI?OY`gee#HO|DQ@Ol!b7GRpucT=fiOu(yf=d<^ zNgHAkAKm@tW%3~NQpH1QB=3JzLJU2rVH!Z<5K8PX=n%EU7|#jX9U2VtK>zu|X*Z%P z^g;3rRdRw$QmA2;1Ri2BgHbbUg7?E>RniCH5Ir{@-E^qO zl{+CMiG(R2nXf^fwJ(#?O@_doXPFKyr1g5WvykvaHj;(r@2VF~rBi#udc*Fi7x}_` zVFb&Ffl(5I5xoQg(~Ybr9Dw0yO1#=TeaGelcEDEJp{)h71>!!bG6w%=zm&;fA3<@D zWt4<21~(?b!MB9fzDE>vSv!)&q5oFhCODaqEp)(ZPjfvNNweY!WS~Rovi00+U$p=t zHWC1_;o`us!@*Br;(`9IBN})N0ggbMhAx15(q?igojbU6Uvy=Lv|~l-vItc~6dbPM z5yLr%iut-GLLu<>@Xq1GqdGe~OOJOP>_WNES zdma`zGD}fZWOC&>a*;;QHyZP;*-VANWiGNy_wJhqf{FxqpGjmj@5%(ds) zjZRZhkrbY9kizOf=H8ZL%`Pw@>FUUJnWXZyAQaiG4(Uas!kJ^wHgnmz#=Kmov80ff zhq;_~2YgQ0;3+RPv!W;;!FNk-YavD_KpR;?5nq+VXCb zwC&R`_I|CF7hv`ftsoB^IN&;+Z8}9>`TT-vPjpLKBe(7J_OnrE4Alw85}i`S3@y3pEib2~Z{wFIMlFn6 zEsdI&Ja>j_#Qw2+#&ETBn&!1>yXi#4k=BukkG>gsF7`r#bo;G;Zu(mN&iSgAbNu0k z(=9c}q-Cw;@4c#G!3q)_7$kbSfwt}I$boU9OAIeR98V7N?6N)x7~k6kYy#`n0HyV* zbz;*bcrimH{^x~Z&)#}=jQ@H6Fi~jG^&Xc52%Q933j@2~R_x4LYKZ4viKY*&n5LdF zr>Sl>Pj`Gwvq|>zWQSDuR_uj$RF{vEhu+@JmDHc`G^*_mi^YN%{TsXlOtJbXx9SC^o#;+xaRkSUH7snux7Ghzhs zRfcK84uy(`!k5+d_!aZxW~I!`edpkbi}hD$Z+CGzU-cD6&+#V?~;Fu8Ibo8TzmJ++yppvbFV6v&Cdq(UGJ-9Y}^obGflG`7!Fm zB&#inZ--OxzzFhafi#@l`WFRao$7pF?{#vgEUTz`;4&W{SQi2PSCL90N8qRs@r4WVBwh72jjWKGa1YdJX?c1*pOKZD z3VfDYvaKPu6%?GaF~mrXyXaZzHd|9%tD30Al@$m~^B%9G!dxj8TqZ>d`59r-n?S@B z(n4aTH_7Al=Sr#BY%#M|v$FV1sEVQ0L6U8aJK9W~@KL0&!M~x^|B*D(+Pt$3vTguQ zIe|IwvQ{gkY{>KFlJMKGUV@l6*T7IPivyq*{2N5W0i35`ND>B|hs%r$(b;AmcNYL z%QFAZqMW!KU95_B0o8+6#euAOFuR|@3L%)KWx@fn=%PA*u-dQNjM#@6Ub*;Xn(!%| zc9u^2Y7B8(-y#DZ`DEmc_lRV|$L%0zK5&ry5Ces$H8_BwQba7!QmgFBf-_T*H1PkZ zprvFbbr2DCHcLsJggBdt1Myrel@6$Bfywak$GCs(81*mrJcd&sYh~|gxZV+@T|uUk z)&C+*L{Nc?FaXMmWq1t$x?4eof6*o~ov!A{%z<<$0>P8P^hr`78#@Yk#>xW__my#M z`VUA;^8cf>WI!?oY#I5F5Yv)SNeVNv+QCpkJeCFDID!a{vnj73B)1`{I?h4o9aVOa zInIXMrsT?yl&V-~TrQonSh<4C%L}X!veUUUHzgTVFkXpZI^VZSNL*f0QeNB&I!{UG zbi_Ghu}VmCN-j3$h;NG#dJPnw*tY2>EkLWCl1By$$y@UdbDJGI<~#bl0>%sblPsIGQ4gg64HCS?F6W={FSNpKDGXyoKL?$3AV zeOfpab7k`HfR^b}Oq(}v8b|*r?(^fA7x&kRD`^l?OLP+Y=}Udi+pkx?=<4L#kL*9v z+TpG7)Ou>Ab?y^H+N{2HHEK8>lHoIFse~?gZ+@A$tljzgAr+F)iht2joV=T=*3wBM z=JU}jBiC8r0;5Ys9>vj^PhObt$&wJ4Jnv_g{-XlO& ze<5KA5#W@L6FHpG=|r)i@7&lq%5AvY7+K_Q`VyUpa66js|Kc$s$DRZHm`HTCS&r_DQe`P~cW-{FNWvD|iX_$3mox_!0fR?~4R z(s?+K&Z8?$XkEO2Rr@OGi=9_S{;F<)nND1t@39NW1fk!7KeA%_r>!ykmiEZ@=r^Qa z&tFR>QI(njs>A7oHO{qV>v>!nJQFfl9~@{XQp(N==Vx2z-B7bxD&K2DHZemLQ4?`+ z87Fs}jUu|xOjLsyVdehrmVH0*a$D_%@Aq9)!wP4C9r7sVTVTI^c7?nP_bV7ls+Uwz zy>LB$9eL%&P7VjWe{pM~H^GzOk?P!3dZJl%tL5r#PJWmKUmAW9QBTP`=P$g=$v?b& zZr(JW{!>y@|3+zx`i+ChkuAtJ;ex5n*8m^Br1ZdW`|TY?GHP4 zzKJ`q3Z#@KSK$ zY5(OfQeghNl9LN_js*9(g3r`2)5jc+(qo;3+;qcH$u8fwB zm`^9Ir79I2^%>CgFTD1Kqx=B7CZLny`e39A!&5FLVeIZqkQ^vFQrcF9i()D*GncA6 zJ8KRe=k3U(Ej0f^RAd%&WQux95rv+Nsd=WxZx$n0G#}7z0BL~80mLy*^UO0MGDgGD zH_v?eu?&z;d?FIrUC_>5BoEt4Ff%RlC9*yYk_+t?f!ZcQ*svLmP_U@cFwtuI5JLeN z(R?yr&LfN}lhGYrjxgCIqN874>(Xe9tjx(8J1+gh?-CYU9Z9RV8e zg9il~$8q9lB{Ig}zSoxBoX;AQqcL_s?A%gh?A!u-2ArtxL^jI&W(g=q^ZQOTa2WQ& ze3-UJ$;++RZ)VrN(cI`dT3viHv6@I-@~a&%ivD*&VbbKURJfhU0_3|3T=|*V(!6}g zJepi4Z+?DuV|rvts#RKSj!Q38WgD|BxzI9nC#M(XW$K)U40l#Ss=mySZ`T|0il8Bx zn{O@j7;I*#(UhNWRNFK48QD3899>Rc7wt|ZMoZ>9Vv>E^|c4U_9NKJQ23ybniHohP$*O`|uh2v<* zGkW7P;tOM?N#3nhdd_9sZE_WrI!tc6$L@7F$_ih%Zrf^1DL|golqEGm;nl7#ve|7a zhoQQ_;c;e_W?M6)8CGw4vO1%DhtbNrlPYtnOQbmk33?M}FeTR%xy|_n1qCL9C)JVd zG1+3<9oCGz9VMC0M0dfio%tyR#@xhWX@)(kB*U5J+TqHp&MUW8WtT}y@=~fZ)gIk$ zTLG{4ZrEE~ZM7v7=NA?k3ibAEJ5r?%gFB@x!IY4hUsRP}oa;@t7)zyAkcIJA5m#E| z$#7e045iuLbVsJkXxnncYfCa3-mrP37L%n=RpiNitGrNeE@-mZtwm+&g(gIWiy<>u ztas)*3alF%&E_Jf*_mgTCa0I|GS~nawdEI`{p!Ytw>zYTj$%u(y3$mV?#;H^^NS1Y zwqlRfX>}EPt;P9yuH53>Vlx!(%_hAoG0TuI&B@O-<`fu_&&@BC%D?Z}UB0KZ)s5h6 zt}8dsZqZrurSA0lk}~t*yzIX|<}_H+fe3bGmN;D2qDs31tmrIf0W!oJZB=#7;)eWU zqg4LS$?iOlKHcCnw`LnNr4DGS7OP!mYhsbHG_L-5ktxO528@Zbz#X57onD*lHWVf# zLHIkZDl=V*hdbMl4-j%jMsi`Q)oD)9nerLC*OX&2SoKCjh26D1*IZ+(uvF)=txJtH zc)W@nRRs={C$BKmrY}nO##I#CthFUM4rz`vyRx{X*j;6_mr9H4q6#WhC0?7^!>-w5Z5xD^wL`IMOPtkhe}Y6>xdk>DFvxfjK_WR*+eiXi3Gx z1%6g;PJRx~svzH(VlakXoc|2~9+g4Xl zYOJ?3#BH@Zku`7v^o;%RRMEMzaE4fME}kA*Bso92!SAVl&q zd@S}J%+g0BxVKADhb%zQ-GAVGg^JQbgFd>;J%`T*(?%v3{05~zRdQEm8O#J;ZqNPU1p-$$}0Q)KKH5?BlCC2H(4{G()B1Qw!=0GInIji8l) zE#B8AGFx}mctDI3zJMRGXof>cSLTdY2($>&MQR zwu=B+8pRD8X#hAWanKm5RsNXo`3k}D3Ay= zSon1rLgnRfp|qjmwRggycK<9{$dr%wG57Q}nJ6_SE}N-1yD9;aSx+{IQYsA)LfP%9 ztEuL;wKi`&p`N9Yhn?8iysee1sjhSHQa3ahQUHJ3NH;-vmzc!0 zZrgESshT-yOAqX5-Nq*-=?pPbOc_qA_w zY&FrTMN@W9Qok@IYN3`N^_l4On=MzbtFFa#Ejq;oj#F-bbJ2^tC#omC7_(>*Pamg4 zM2i-0pE5}`ao0<4YPrDSEjsl<^fmSM4_Z#Y$$vIVv``y0`303cY|^e5Pc7o0n!iD$ zJ=GQcAp(Ebx^|s9#goT@T|L#Y=Ywl7D~F-hi=LrdW>Pug4igV@jR(u#IDyg%5%YB$ z*KlO+MDUj%rrQFg719f#UGU`8M-Z|B*Y1zf3SmAFHbX_^Glk#cYZD2BIwgl?AW2#^ zo&G^$zooZLL?4*kF^oK-E|iJMBOTw72PX5q)xJnY^&Zhai7*I!fI*VYlIrcG!9PXR zyHY%$rjU$6sC86fXJ^30*5ZjQksX$ijtGTNBs^N_b=8_`LJDd#tCCA-aHrCqZLk{D zdVPU0o9~_Gf0*9?cD@y_!VuS|K{_Yaw~P&%eJL$Ptr)TFs;`7^85d+K-cb54UG+V5TI zfeY_dUr--u&x&v4FD%?Ng!Y>*CDR0-0wi*)wa{h@DRw%Fi;Ei@mDg8hLX$1KSc#aAh=>>o3C=-8ug>2k61vfC{nyFIcBo+3 zib5df%Lx_!Cj%5ljJsqsQZTr6t)b!?pcee$;*HBvbsKqdLn7~5tikuiQ?_s3%=@3j zHk&tZpR!oh8zA_~TZMMo-bdC&xChZWe>;s-$lK{jdQw8a@l8?$J_$L<^Y(4X;1dk? z0;w}09E6f^iM-Vpe5YH%xWmA~$S?K%AVEC12&1?_P>td6W}= z_Wu%S)upaEeY&sJpAh_d|HUWT2de?#cpeD%twUaW;>t_Bud=s7H2bYvn?QYqb}nAe z0DsNqAU63x@+Nqo08b5!ek2od4Hj#9A!F|krvbqWTnnZM*Tn#?lIjC#8KpdFqirH@ zX2tqs)tz98-_?V#9o6}Df&6eXa%@1J>6jlI)T8V z1+5VZ0eAmF${pb`7T65BD_Ff9cOO_)a#RK#`=Aan>NEjmh=BZbc(woSC!e-j^XF9& zZTqzfXRrQ70Vx-OXU*VMEKS@&XRA_dcyZ*8I88a&SOBSkDrLEn*fs5X-K4xjEG-cV!>~-putDR*V`1Pe*t77V7>SOoB zAJA8(p4fbAut~W_l9a#Ix{NCtZd#I~%9QAfa*Oi0lAOBi19}p+L7Di$+om_wpSe*N2Ya=-e!TkhH}zN_~9 z?qmCo?%&_uc&K7`X?w{DynZs0;Zk`=hA<$f(xNgqn5w<1Du>tQ;_UV&`y0+(h0XRR zrxcbn3Y)l075NQZigi}*%)IHg5W22JG*)aHU0U#ibys0yR;@0iG~F3(TU#_wDX%G` ziC!b-%0ao4GM00Ot*IM#ZpcbXNZhX59=|PZt6rKsFCu%odj7n!mbv`;+NeFc1KUrf zy_0_0{Rjd zt50kCBSR7%gRvyYiJ2R5pT1gYT>u%QWDI0&`f8wlQ!8M=u_L?gbJ>x}2pY)@ zPDy@|eO@dn8q447=(bTQQ%7pA7eicHzBJXEXH3e^$cfC)G$w%*=ahyWLT#M@XblkiGNB*XF^ft zJU8L+iJjbP`f_%pMU^&h+q{@n(!}@P*I!eAp#i-TJcpqma=Za;G1sRu5+TleGyAvN zuh@ZpLb|#5W0v=Eph1`ZdE;{HlG)SN4AKqf#^XS*tI1>E0dKqmb;D4p1$v^Xa5pAV z?TqSGyK$gt)?8yUJJ5nmV{+g?AHjh_oKHozlbJwy_mbCP&Tqyco&c0Ko)(Ooc<4kd zw}!sN4m5GxqVd~SN_~+48Cu9VGMMBDK>#(~B;)$`JmG^t{SMg7&(NJX)k&;U$RzOI zB7gqZrrGasgNBHjW0vii0xkD2NV%)1>NmKhO7i3xa^LABkZ=2mQe9DvKcYNN?(7)QRBYceO&Jhidi#x|-ThHfIA+rJy%#AT~1S+c`^Ml&>HQMdYstXODZI0wmDke}V#6=zqfh1i`!T z1e6Ecpu9Pj_YuH&=q9oWS7j4koAGHAP##z!X1L<*vMXl-&$vOx$Unh~+xXUQlBC6@ z>*EtAeyqfu)QE`KuO-0&@Cm%+nK-dbw6__jm`P{SnK;c%w7D6lnMq~>s)IQIA}7F| ziXn6lRn;x`IA?@%?a!(@qwLEgt*CGe1(%l@&aS)%7DI@dqg_>FP`5{-+za`R#GQ_mm;{p3zO`9xd;M6E*J@tyhQ z52y%Ow<%MGJ$YpkoL{R&OeF7L`_{~d2HAR}732&ZLms8k9Gx~{==8O`6#;{rVoTA8 z{5u0V3%MyAm+ZFfDz4?u)t|cXrJ6i&6!3oD-$ZUo1|XvDdRVRpX;6S*9Jqzg(`9tw z3xF)4HrYU;urul;r!-<9Js2uJ4Ya{+CT|2$nE%`*%Wc}878}b`7sd-6h{3|3QyiGvb1Q+iY<|RO0ofz`BlvcyQ4W* zHUt9HnOVkc6npxS{wT^uv^i6Sl6$UfZg+G-^D6aD9R!K^Es-m>EV^5kMu0m3*zKuT zkG|T*S5}oEkaA>4ZS-y~+vPEO)n1R?1hD4pP;z3x@}zI_}IaZ&VHPq<455krK@dk zO)yjzFm+}lVO{~ogG289t zB6VeXNm(&3>u3TI+sQGz-lF+Vqv z_kSpvF=x(<8FMbYGYJv}lt+(e@*p9g;BsGP#g*7#`=9<4g#?b8;*kQVpO~9<%J^)2L)nL zO{1n44qfMd_!{u%BETW<4Oftp5(x916p=`5)#u!?{-<|Cx~n(@emOLUyWru${l2S} z6%bqq2C7F6uA_W>fHNic%D?vM7?P$xefZdj8L~22$8WLI%4AHXI(%Tn&Kc{LbIAz_ zh>A@eGxu==6-jBb*g!;cf0%kJsV<==xmLRF*v@x4Rp2zPL3yoLIJp;i>oxSRbR}XU z0}=l70Ga8)%Y#R_;jy-7FHhp+UtgZ|Wms{TG$u7AYMUzFr7KV6(o(Z^@v3bV(akAb zPKGfxO(plvJhA;OH^1@hridI17M5dYGIA9Qu{nVTQe@}ndpFd3Y#_Lxq4oqOc!7F6%toL(>?RzB z@FhfQw0P23*;o>(k$3gD<|xRD4dfk~eUjTXJ$J&3s_Uzdjd?~z1_m&@0oh}GW|em& z2(BeGaq{n889QiGm^y6G{}o)<=sxq;1GhlTfK5@ z$IDk^IX_RP!Pb?K=q3n?g_A`p7%Y=Cc}BC@$Q?*n*R(>dlbu;`rLNZLuHyYeu(mKn zqOYpWtyA{_fL5%F-I&13zb-UF%@q}f0;uFguwlbVbSy`e5|kufMJHDW>M3#pFOhd& zZR&XMpGZf5lY?8R0T>nJ99SzDk%L)=ptpNq1et*norroQX=pH#05D$q^|&Cz*wYRc zQUtzrg4I;>Coqxk48TPH8%pSRkkJ2JfA$_o=nr265Fzpe(j@^P974V$Q8W~p8u726 zj(&s(e61IjAPhREhDq3U!Ueorff>@I`fypVjudJzn%HD5of1}0m&s4EBnbS-zA*}8 z&~*(eZ)3Rn)5qRm$@r5mUW?^=t5Md#S1q~Lbh7J)ifKfGq~;QnCp3I-I}_+*s(O9J zu-akG{~?Ba#|3m1gF5#iyNAhqI;vCjYQZjMOQupC{nBZMefk2*il1zTTzJ)Ln7}PugTMsZuZv&15v>_v& z0(-}Zr^CU8-7k|5!&4QA=*jE!f~y7B9PC!Hd{IAyRZ%*Ew!>|OVc)Osu;4)S^)Ga_ zWG1@P*Xc0d$jjg?&qmfta4B|63LSQox@69>Qoh|@{4ksP82oTMunoW=y5yHIx?*4QcI-`l3Hy_`!{pMj)E~N?{L-D^fl=sqEn-|L z*7L&A^TJur>ynV}K+lW9x0ZW+LjA)mA=0I=SXyX%Cr7(msIF5K0jUa%)0fEs*>G?z z#Su}Rh+jh&Ib2M&L?;?9j*5ajSxXcN&XG`Uyr>P`EMAmDgQKEwNG(yK+hPp0IuXPx z!?7_2Iq_{YHjN2$bc^s^*GaltM5Mjb(qaK-m0flWABY2{Z?Q~NPhD{43J<|4+#4W% z0Uw1xnile`V2t|OC7sx>R&+-zj-tULzmC0iMnI*S4O4;2>74slNTyW;#B2lK?&= zw1;VWvkvzx@9&d9LIzc5@79vf)L@QWg|0a8zb%7Z;l&2RSGdy2Yz-U}nTJ7B@d^tj zy@F|To(yx{EBGzw71@A0|2ZsNNBccG1&Y(JlKr_s{OHAxfwsGWt7pS|?{DAYMgWDCVING#tL zx^DLuKyOp9l8wX-Gh-v$*zZD76KsszA2=kc^?lCptQ__TEL!xt#lG3 z#a?~RzjM85eZhL(oR*)Grb_mtRhK%QB~Gra#@*tslOibd9+aEI7^xY?K{&JEv2i#P z`9tJXL7qhlWgz~A4NcF{)|Iq?qc4ad5Y+kxIY*xQ8VK33Z+B*8U*dC4o-F84cbv2p zpX6O{U-Z0zRS^PhRhg2AK+`Bd9vgw z^`Jre_#yl^^shrM(`VI@(^Dr;RxNPNuheqGY0w6M7l){5e>Z*L#1IaVNsXX@Vy+r> zaR1W?;X@^V{3kb}iT&9)#mJR-5|ISb^~tj!a}y|I-lHX>*>hipJIK0@_J5{uvj*@e zL*57!Eb*_xPm1*H%xpae$({d*)!1r$@)lX*tVfB z(I5n3hQ9yXHeTPhrD~f#QlGrl9Vw-wj{|1kk4#XL3COhfBcqS={%m3TXh>SIrpS2( z8NCd+{C;!-Frf%f_M@Yh@%qTBt!?^N{i{{(HtBDz-@nfQ!9m}@6xPbSBVSE!bGN#y z_UhZDXzJ5IQ*ipUYw)Zi$L@o+C^Ut%SPtR>ypawBa(rEamX#UT!V!^o#34tAc?jc2 z@LbGHaB5I=7nCIpE(Ro$K)M#XA~0>Q)j(0QRmL>}g6e{k2&qc$PO$i<>~|T+fkbxf z`WHM@eqQ*3$d;3VYA8c8B6DDJVm5<|ed;r6*nB1bAQn>YK_prRqdXY&x@Z~Ii7}21 zm#`E&9G?9eOk`~NG#REfnAqsf{d&9qw2rTPKTh@TI(Jw8S|*>-Z<_3nZx8kR8ZF>L z^fkrI1hf=XgWdLhyl*XOLVY9}1W}eh?;Y5K$1w8hF{G};1scdG?Z8rVuJlbEqF|rtX{5wiT9bu23pd-{!<_)1QESZC%pu%nN)L{-?Bnp7( ziFE1W-}r>rj~O~hgU0WdAT;UQt=KB#cFF2xWTotL8PQ{=5n2`WK?8kk6_qZMlGzd> zIYS;lMh3X0xO2joAo`$@KDva;=19qW3Az6Q8G4R91ke`>S9SR}{C-@K(GGVkPv%K7 zi!$w*4(S=F%RG3B4$sR2uZqM;tQF;jhJ(VH)Y2T4@x$*6a}JS?TN zB*LViXO_}Y6RB#ylq{9xH8h%Llh=GM3-gAGdO+zL z+{-rwRJL@XqL~=Uk@R1#@IN9vLjI-+5grj96 zq@?V)j1)mKE|qXgZ$0@V4Qit^VrZi|-IY;hltMDoVpDtE4!50mdJ(WaM>eui95uB< zgX)B9isdUkubc-a>k4^c-X2lU5@-+6tGnmEZ6LxD5n19<9C|(DwYe@--BJe1ZZ&13 zmZqRwZAwZ;Y$i_={44zC7w2YYtb2WJh|rJzHrihxT9aG8bC23xT2x%d3yX+eU?sY8 z$^gh!?2*)>;RT6B{ZmB;cYPPPO6f6kyA@m8w@7kU|`wy2Jg(wh<3(=#5fz0 zb~DY7E^%~q+^$@Xh28Ax`dV+ToA&`L098>802qy3{e@F7TwqasCGvkI=?y*{_$(1l z^@h*aP@V59F|iP{#~Y~BoasrjWM)Ay%cAW43LH$>i#j|{FTkVg?It^AzHapQ5_}`N z?tmWdZ46QtnC`a`!jmtB$*ahNe-o64U1P{$ZY|K@Y!2yooxGueyw~l3f6rmvk+P`= zW}n%{o9L!T*3dcgmZvXDT^c8q9~SZ?XIc-ubwwp#dN&pjSdr_!09^foZ5wAJJvU5q zW#d~5TDeBacPHz~sN)=&h|~PoMtY@v+Xg^n*3W#-0wD~S@3;?t(TOta# zyc$9qu{bBiljKdVNDYz4l7G?9?t-&EeE)Z7)|;nxzyG1i-|O27#rUl1%&OE1`Y-aC zvJVM1@ulC9VA@5|FHKZU-2KuiAi+MTpI4+-WmadQ-Aa-Rl2H>tX!RwH>c;v2lC2So zawzm5H`XW?&$)%vtX7)~afXNI=L7t9P2t1Lq35<^&LJW6r-gCn5T7PA##JMs`l z>rfFmZi6woKv~DNLU!jr{}$%41af;|sqRV5zh(SxI9q!QckJ4##x>izBW7zM-`wjG zZ7tj#1L4w2+3sC?vBc*R4G0x2M2A5hQ$D#kXv-{m^o3~$V5$B<$iU?8(Wv~7>8b!C0jE%TdYWMqhh0I(Y-e1`c8~o zXqPoAMx*j&zqk1qYcuEfHn&Hj&DP2TeQlz}l)`kbsINtY-06NF{ zUQrxLT(xVN8cR2CP1_NVDdUc7+oqhw)vH2Q)f|aAuEu)%_Leu-qbNX+t95^IN74~! zQ3(ko;$h4uGZo$QzoQb4%C*C$skd>=I7}d-4vwrn>3A>Ak^OOPuFyMN%s&=j0(P zCEiIT>ZwzjZvtaR`h!ERBKM6xH~5iZs7Hb}zSB-qZB5u7uj692ugP1d9yiYI9nTxA z^Pt5ih52q~p=!=+sw}9&Ur6SSoBEsT*A6*$?cwX|YWM8DJnT&(R}sl~XS;v?bRNBr zqXTIFD0;tY+y^_Z{PIh6$gq?T4|X5_m?QVMfD|)8P3}AQ>CZfK zPfjB+gmhdN;zC~Nw5T+Ua!D+(I1qV?k~*{|m9KLC<*-}aNrUTS)U`|(Fn&-cRjY)%<>Q;B&bl#amv%5K@s zaY}C{s>XYXlQ@;{t^GLWR<`slm>+$cYc*3|u4~r+L=K^d3ztpXzo!dME7I-3^x?3v-1D=>ty~%_Wu+3ey}{5i zWU5nr0W+7xKTi0RRyF83IKn0uz<0%eeXPMPd`hZ>ahO3|GT2LlSO%^AHewny_%>=P zxR9@0hexeN0g0v@2a|EJ=BiC5i@AXJYln+63iO%jD*C3_Rc(i667zqeN@B|5Q1XDT zn)x_gY&4`rc{lAzlNwzmrV@~b+4ycPgxcy3vQ>>+C8h&6JcTgZ76c-JMxl07l_((eKJ?py10piXBC+5*#+t+-rfHt3f6=j}7bXipsRo6eQ>t zK2NRG#x0mX@0Gbz{eMqV8q5a7x~a||tjx`_rj_VBBb0qI^O#Z#Z9Lg^i(%2m&|L+3 zTUK#)2*MVh$Q*zZLWDh-=v)p*NnuGywea^V=ifee_Dl#gEV91>?BN!Rw1$d5rq{`J zxjt0)6o}wR)Qs}uh@c|C+C$|<2*Awe)@@wgH^NKzdW$TeTT7uh1if(u)%V$q525W`{IA zcX}o%ddG;%AYJTJikJD@DIF>@=S%3F9}>tO5qU}M1vzi&VzR8GmL!Y(f_S9>Lq;kN zrAG1wLTRBr>xCRiUEM0jTIu6uQwypr8wKbb2yW9@eA9`~v|MwlgNfc ziF_$V;W2~(!=8o*)T`szdoaHfc z=At6xB$@Ky*I$c3^%_a`(!Y_n)Z{I~N-$vo|21%-&SJ7fCg0_;7bDe;p${I8784;x ziFO3g5i{=+zomH^VgKoxKH@of2{r@@fC(&fc^Admii&xx_Tw^)Py?^Ae*z@}e)qW` zy^m#3(K{H>(!)DJ67yGb?~N_R8iR4G0R(MVEYh$;_~Q-ri%Tp*Fe`n=enfH6yZ>PS zuAX@E8k@UW)b^LB6ouLO*?FWu=B+UE=@3~MN5;{0Wzy8bOp-5ixQbk6axoP(&CC__ zqEvuRPa$$yx!9nTZ6J(-yy%zyQEY<@Y~Xa-O3XqvC^a1#EZoIIHhuuQ%>`KpBsxOx?}5txAIvg6|{%a?`7YwqxOxMj;M z1+gUwpuyH=G@!He2E!HuIVu-<$8h8h4Q5~|LiBb|t_KAi zCu)4%=ui!{rFCw|9`!Ze0y8cvD@SkSjrzij;%p`#sO+omNxIOURved*o}dRm#THwh z%rpd*eNsnEJy2O*Rn(-flh*1J%Hj}s@%GbVqdlaD4WD<1 zvMqFrQrIGF`O{ElAhlu03gNjvjfbbAzc5sotXQ%{#7a;|P9mpWCLB=Y7H61HeBuy2 zgyIvX46v|rO06yzIYbVj_=L4I#|hc2-f0TjjueQ{4#OAEim02xT_fC3M!yotk`#lwQ}@A2>X)A+qd*n@@1 zmB!|h`jEPky7ES~pv#o`;bpr7SKvH)x}lNOV*vZ9PqrTAQf#?=d`TMcDo|~tb03MG zHiv(4TrwTDo90AE|FTL&EN=tYa|O9~Nn?3keF;}r z(rm0uW@%qGYe^wS@G09RCTfgMF8s9zVvdLpF(Dg-c|^#SY)~K(;1c-{0N6=fNJNl9 z5Grp$$STG6lL9x;8?WvS7RM)K;%4g;tvgHE&DJVYJynJpbxl=C1!8lEIh9sf8}&6I zMBO_-qHl9ytioMmYRq5{r&d{!m0XgjPE0nW24pO?8Of%d?!=G;cWq|9+7~SDb4MWr z;9;BhbRj-lW2j2?aDFYSVwUc-Ch9}}AHv=Px{0f87j=Rq&F3Vf*aNnNXXu39OXv^? zy*r_r>W+Kwk}O-6CE1p3N$w5zPBCC=AQ%X}1V|x;l0Zl!2}$#TL} zU9vpV%qj+4`|f~o(jK_>^@yyB#woHZl1=Z0qatuWAuw6rYOL89{MYp07d-%(xL)uQ5IiC z95c-smb5&#+%zyV74{v{jDz}?tR_ZClotOxi!{@$v!vy^5YpOy;l2aM#@Y4CtDsXCqJg zD&4V|68Kq5Wz>5QP@-e#N;%CYkrT<%MNqW(kT`7{EvJ$}8%IJXc_5J+ zGdNL73Yt(o&ZR@4K9Qm{##@x8H1JpklH>q}zAu9)Z3$ZAR{Fk-__ac~e=6B2@7vvN z=<3&}t6$e?9JP5;)hE#>_O>%5X|DSpYjJbM@8Q;a_{lJ6G5p{?{{U~FILc|*Psz5=DbT6ld1GWMw4SswaF@+~>?m;0YMEJq%YBXiwf$Y8e$ z*vDQexh8yWvKYXMbhD(Xb5shtL5iY;5?HGZ_8GA|qISjabW1ppa46z9-7Cy-wWg_Z zl?sTat5l-+wN`CVn$+a3{hlivZX(==z?Y+a+Bfb)#UcF``5H1`Dq4q_NrG?&vTBqlK|f8Ta-OLB5er>SmeO+0U~j|8()}N#esIo=#Nr|$fDnlz z>C*GrLtOMM{0<&MCeBNjwNCa-6cK)uA{N9Fh=m9BL9mi%YzFwna(#~#^L%o~l}v_` zpbJZ*qpfb^MGMXXVvsy+Pm9( z0ez^9itqUtjX3dzbxp_m?Fj-JNfe8BVq@=xe0PDIe>3;LgLcY2nOg)DJ`nIrHe&b=*DZfc!^Y`Z$KO-oQp{SK1` zP<8J#FPhTn)G$C&qwNJ@BZQbD+Rk~fzQG}Wz9DsOt#$Qn5C}mG0yjL`4z!R9QiJVd zv7r@sg1?yjcnC)uqT^fezH6QBzT36OWQGQWn97CqOhzZiWvit#~JO|gv(QItqO$CKTVt$1v_R&(U^ zfsT?-)9zJQl{H)TTMroysi1;bbUfn}Q<&bMYT{ZBR&<^bOO}0b7*QQ>3$DYqhxq!{ z1-C)r1lOpU1$2qFUlS{mVc7g+?1rqXn~Y?wP1y~F^2}3-$Ab=8_hZqA)ca$b!>e-c z#eeGEvGeq@n#o2cJ;@NKm?w>w(jio_&4)VhE2Gv#`{@~feNYJ8o>*BxT?oXx_UnG8 zuN__2=Gn5dG4P<5bxr;{>)QNPM|Lq4xM||3eDO`t`LK_9Ri)aZX<|r&^u?pcFO2+| z==1&udSYiXewK9(*gwrMA!a(4 zyl(5x^{GrEb*BIudVG(ub*XM3Ml6;R6wNis;bnYb zY;G`iy`K#3Q?Ij!WI>_fiQ$UqM005>pPrvlf-b|c>$F%2U84=_u3JNV1 zMLcP{ZkNi0rKEG9do2lkPF`R1{Nh*fKNNqdd6M&8!jr;V+9z3$pO8Mzcj~)#kPh}} z^1iUd#MHz@j-Hhz78RuyDQXHTJ9zSh_^=&``+|ZJBe!#&KgeEgAtkK++6bBR-A%%^ z!OzImvDiZUHTJA*x37Q9UPW+pezk_z7U}l2$_2&ub_ZFsL1ol&NtwCmah8@9)|K-@ z-|y`yGV&vNm-WmDNR8%vRpGIIioJoQ`-AwclWe2EmjS~@gJf;>jit?s*6LUvE1w&a z8Q>{L>61LMu)&6yj1(>-MiZw>VEiI{;^1ZBSJD#3$5yEio{^IUvNPrbWz}3uO>4<9 zMMrDAe+^$6Zub62J`}>2GS8yO#>#^HDidck8Oz(`Pm-nfzq*F8p2-nG!AVueIN~Ea zR=BUep&-(eqdqd*o^B0G7$gJ2h$9#G)$;Rm%}hB$=G6we3br^H#=ux>PRfdPv9pZnJqmBFb&Wd{0Y4P?ejXJ1|Sg@%d7Ww_cvRw+P`T5YI+)yWrmSI(Dx#Z(hVBSbD_ z@|W=g9PR89TD*u9O9n|RR#mR7T-7wLe6blmS5?nRm5jV043Uru`j9=7axfPA817f% zso3rp?;p;`hNpOaBu5PVk=d&(jPtK=qPP}8W~$nll$(q=xXD!y(O$iR=GZ+_la0waYBzO`6^2GcBW*1~Uk@RR zu)14>HKH1oE`|6)xIZ7SSd)Ewq{}xqObr zP?%akzZa;h-e5E;gzB!Dxdj+!aYKS3qU#=sK!U-R&l*ybfrEI;#iu02hKj~TDvc=* z35`6xCC37);BT(jNCStoPN3GJx0=x5GnupVfozc06~-l4L<6EQgB}~{D5S9_jX|wd z+sAhMx?;mn)F`lr=BP1FXGp;Gr`y{yTVy;-jUkV1O0UggQ4 zGTd=3Q(2>{DIf5udH3{dRS-6S$mmaWKOOP2ggVHCB)DzqWk#b> zFEPr5WYLrB-T=q%S-ZH1Cv=~XLOLZv3hiXUggH-srU!&1@|nb*WP<{u_zjbA5N z4)bA!F1zIq@}|8@ut)&&$pd_Hv=G*f?Do${TYuPno3*u*$=&Uu%;-F%c;^7HFb9nN zg;?o&@+#{e8tTuzJS+7Nt!?3L1IQp*^6u2_+vU_u0_Yx63?@wg7=7lB)Q;qKbU6*u z?g28oUua;_ndU$+oQD(xhfP6B6;BU2WWwh`Gf__8K)j4fQMV| zfyTxIc+@P!hd^(hzK1O#UT{B|^gVR|BwG(+p~Iv}h%)e5MjgHf$CVr47>%0k_umr- zk!e~h%q9czu623f>ux{ZjdI(YPQs`C@E?IQ{Ah>cNkuP6gyB-Ca!0a5$P|gaOge;4 zk&KlJJ8VmY9o27Y0uYo$>_q)CGk87&$ z7}BSLEuwwLzfNx~D$6j_G_^&Kg@AI5H7q`}n<0`ZWUvnrliyJ!xR|VY_Hpf{ zHtUrGB={f+Zh@FDj%)#WexFRePktu_eQe*`#<6*87H-?vxUS0Zw6m5uQGd&8z5ISL zoBRi5Zj9ZvCUp0TtYz7gzJ333-s8NR4^@vDGG9=zf$bmWZOx^MO3E3jB4T^$W=+VR zV>_>=UeFMSWb%sspTY~d*K>|`Fo(O7+2}?2W9ILo>>@f*LkHK)FPL1l`*z$-)otZ1 zQ@(3{4hf`#$r%G&2?x8isKa+hAeKOVI-E`pr4vKY$a6=ScMMf5p%Yc~-Qp3}p|vwF zc{dnNX%2^zk-=m{92sT4a;NTW1@l?W7X@GBl4-?cRvMY)*%^N^^1#-TC~a_h1Vc)m zi+JA~U2FSvEh2l^z{Iu5JM;{d>%xAyB^QdwBlJlh3bSQ2HQiv~(;>X2=aXo^)ijox zCZKyrW~29pq=7pvA^$6fBYiW;fYS{fjM$fR486xj`VaORo59c~?O;%3hscF#U?1Y_ z|LE3nvdH=ylWR0(Who3N5z6avbdHGOMVr934K^$Xjj8P_m{o? zEjdUt=WA8DsPjY)aC`ua$^d9IM#_>^J(+D~W^$gI5ag~=odmCk%y&2EW#?ey{uEsD zESV@1x&7A)Ca0^8HRWd%Xe^WqE{aXC0m?NteRnAguS*MIz#z!vOstQ&_dRodq;L8`UvusgN+1Rb4 z=kxPNc|!?mtenm`MQ8m&=W}%aZ@*3XQ_+0Xy6+Rd^6UxgAw~OXb<_nu`r$uAKoaiQjiLRLZLX{z|Jhp-B>WF1uj_MvKU43%P zr`%nsk;X_c)49%Ln2E&TQ4rJHsQ3Fl*~OD5Kjmp+*E#k!>7R}LPtA5q%}U8gPkkRA zakZPS1|@8$7qK=X$rYcLVz70y}1CB1513^1b=Q-bPEi|ADIyYd>x&Zav>t33}f2 zlp^wWh4bb)D%o5!OjJTfLNf2{Aa&Th_84{2u3((q z930X&BzR~x1R1j`%#Doms}2t4+Ja_dld(Zps>x0@sZtWc{5=*#e4ts9vLe_2fT|!S zK0~L|7N%HZ7-xqw4#gowJG^6zzwgZnxP;X^J8p5fl54&ZSRYYMxj+04#g|5!Q!1iP zB;Kq&iI6WnJr2#J4pD<|Of5QUZBU=hIm$RQ^BpXo-y|a%^R_+y8|Ub7J9+BPV^Y<=2}mrpAJ%{MNEoah9p7>YR)+ zwF$<1hE!Ez*rLR!)Zmmr&92N9nMDnrHOaZzM&y%6P8&R1?HhKK1Que)W%%SYRGIVK6gmprmxwqpTi`dFDsAc3X@hLZsV+N zsjbSw=~_+Ux~SC9lz2;Vjip9?%_Dt-F7MrGC{Pi@KQ(tfz199)ByZ*jQzx2vAQrfJC>mz5Pw#uPS2EQ6ln@kHNj#s({l>YORG@oBbc*D zb7)nOS=x-))U>#iTydT+~t&p^g}td*0c4+^_xlqa=fqT zQ2BLmc%EMVdy}aGqQnWm#{IR5yf^zh{IU+JWw&;J8ulpauJU&F&78+u$eVM{Z)uxb z{(+wH@<~e!;VH8+VPfXc%+Xo&RqK%CtxG2C+^}waFzw?#DrQqagl?HW*0{B#@W#gv zs4Jj2+p!;2UXLI{FeZ9a>U(Xo%NLa_wC=Hn=c>h$RBhVuNv0(pisojKiJ%WX@&! z=I3G*Yb^b`DyaCoCS`HlhS^-Wd2DuU1rHZFC^#I*w zS;x>-!V6ZTOUX#lF$Ve%aBWNIXWVo5A%t0h{4&(*RPdBA=5ki@h30qigfH_c^(ppY z1`$5QF62hK`h)xH;tuhA!oAoIeGJw##6Vre=KwyasZDz51zi_VVP9P z)8TCrq|~Y7MH~t2qvt)c0C=E4Cn_dyi1=t-XY%K9{EG+)84UmH zHFTkz{4W~BJ`VbN^Ht7rBIopJx!?wQnHzSuO`FoxTe(xqXEsb$G&)Ugn0abBuil!r zX_FkDSU2bm!R_?v9LouA^VP3|9xI%8iVRP?@+eu+l?a4EV%H-!Iz2QhLSYCu(7RqC zp~oZz^nt>mXZS=XaO(Q*`IhHxW3}zP{tvf%CR*Kv#!+S!+bO zhAY>cO>I7a`-c#pn`e+)Ek?byf=n|&7fo9F&GCHR(oXsa*Y=a8jKR@|E~S0!*VMbk zGj$3|{VsS<0b$hxd29HbN1`}vUgIuA&Tt1ZQp}wHJJ#mXJ61&VO|hBpie4bO?qcyj zk}XRsQx|bSF1koA>{)eUfx_-0U9f8F+C3nih?b0rX|b{L4NgrB#kHm4GyR#QgStwo z!9E^X7M)57vKXp=)zVd`H-CzZvy^~jK&k<{SmK_qgHtU}4Z?T{aqW;HIq*ypTH27% z1Zhh96kB@=%GUr+UlEyt_yfYo41lEwcIHr*2Qr$sPa%iE2EX!hD3Ln}URUg17S zZun#AUiw<74|C4*tRoEU-T) zuE9*#=!ycLF~@AQ=qzqJ3lw#;Xvfd4I77<4}wVO_Dgj_O;k47}3#x#vym8EveQs*iyWIpI)0Wo zp8Tl5%mMWCb-HXa{ZJtyvP2}-5eQM~NZD8X(m_6mcb(;S897VO z3bOtCvvS%%c7MQHtF-m8WwB);rf?PGzi?jsY(=wsl{*=CS>(39;9+V|uc}s8MHYwX z8T+I}`X&9rK3PuIx|7pDa=%Zi$lCxniCGw6B0PEu6=qsx_;GsBeV4iMYWqMHKL z!x)I_jdi~=K%xQ?waXy}MC7ebB5HF!`UyJ)NcEr-022N4Ysih_^}4&8(jCRQ1+Lu> zq!eS|TMFBHB92*R7(rdoe-OPpBc+ttH>nlQ3EOE*WGIxRBivL4uqaiC)+0#et$?zs zfwjoZDUYjK^oUktFo_f0;x?TH>yp2u_m`jm>(~`w>2pNLX zdA7T#fDby+09i;8sJKa8M%IvYXbK2n?HQ7&tb`P#)8bP!QSgy{W6cl)H0o*aMrCv% zv!$`%C#Wp?H9a1)j|?nuhMK*mtLJ9{E$rJ0)o4RWvO zC9NaKZpN_gkL^h1YAO<}SbAJxST@`iX>EpNS7NNekeE;yz(d%>Ky=iE=_GOFn<%Szim1(vB93JVmvFhS0tUO@2ER^ zvAiSpcudhpA)d@L@&>Dpi`2yB#^q_tETxu`%DmFF($t(7bsR$$4rDJ9`2qy}BM#6( zZFKVDRrIY@)cGRl)k8dC@kQRnO&l4W4zl>B5 z7=Z8-=ua1%q*MJdlaD6CH_s=}XMe>0JR+?kZ~A>V?z{1o)Y+Hz!DN+hxp$kgO?jX^ zzm0kBeu_*8gbj=n>DQZv2=ZrfGCJad35tWYgRJ#7%(&-rFq~ z$t%2FGeBZy>C4q{{kma)OHS9_fU={6$~kx?_rsI>IQdE5)sI%O*y(yaYhQlK+2fET zh3eaJr0)B1u-KB{fHK)Su@7$B_W&wPPyrGav-C?+M9Ys|AGX}vhyhupm z=tIN+@6j&}^2}Dl*BLpeMkEMJ?OVx24iM}|f-9{w$aQJ7f7)u)w)zTN?MvwUT$_El zkbB=Cj~^U1%6HOYz!g`JUG~8UohCvBqwOdebsp(RJ)GIcQ>C5>kBJQzJzRLwYQ+7` z1Hxe+V+*2T)9xvxa|jPA1~}fsUGZnq#txvPmPx7PF{G?Gp@vpUkt3^=bRrvx(vpN1 z29Tpp!hP`{??@acKS2(&`w=pjlP6F|ekqnC>w5tVEj(M`Mg12vRDfUmS3(7Z*db2h zM3RF^;4YRV7D13jbQX5*jlDS@l4wmD5`U{^sNsRNcbKbdvG~C#-+L(k<`OSYfNALLFHc zp|Ee2CIEsWj0UuGmehwFmONG8|MCfN{EJp>{~(q_hbPLY{<*u{b#HcEc#{Iy2%@ov zNun+LlB)2~>d_4bh);s3W<}RCqC>vs^{#$wI(3*w-=)LpS_VRhqp8ctA&TW6UL>z= z=Yzz^6YW9&#s(nYRi6T_8Km@B#AO&b)Up{dFc{w!JY;t?6ACDQb>3sdPZ24_h4 zzvhpTz$-+;qzgYM00?vnC{w_cZNc%&isyxdM@~OJaw5xsZJGjfP}Xgyakri9gy@~5 zf-CIhZVIlVxCn^B0`{|qNP;XGe)zwnBb`>D1%QoPMb(?XBJiL5C4!0mzfiIQY@!(z zt|^;?Foo^cSoUbDR*TB6f6FER(0qm-}M4_>#rLm?ZLG> zw#c`H?${m7&1{e~RaP|bm+y~m-doAN{Eb$yyBCa#9Ht1C{%H4-G+#!Xd--ZpQxo6R zgcEAY&p$H;FhN{6qB%^04j3SEDPWub_$6}pUB1g8HPD~~RCAa^<>F@pKl*1pNT%#< zVw(0suT^1KZV2SYVX^;G6D7}WMm8})r%mMPj17ZvWG9}LoGUx=@g@2FrRV1)CS|1K zMl#LgBQjNTA!fs&m5SNRm(5PdN-!nzX8{ksJorP@11`pR99*fGwc@{1&Y+Js@gvFF zm^~X-$!A?!eZROk%T&yf31|PJ*XV@*PMP`Xny*Vrvc)N5&wN6sOV*Ts;&oYZ|H}0* zi*?1?BHn|{AeaCCguaI<=P>1~E7!g%&Jd?;fN0PB3zCZ!%^g?d->kg&9@pJUi`c>B z8oB(>U!Zs6%r|$5z-M3grkCwKghA5g-iz{CD%%%d8nrL+#}&V>|8WHqaQwXQ1>_%k zUl-1|H6Q1HyzjnFmBS?N$V%AW5T^xdU`56S01bO<|m(@ z@X6#0%&xi(7tYGJATYTjJ$GpPhoZT3yP*412qu$+koG>rSqz9f5yBJ$4EHu?2dr1J zb9BTY+DAS>!W?9O3b+<@n)ABibLO)A_SviVxU6jONpbger^~+(@s^cvVB{d>=+2jx z!1l)QwUN9m%Zc2NyuF6J%5_f@s!)^b)u;pQ99nfk3SQ8z6NkMTc90Dk>1f|e znw^Bb!d{5wi36ySx!CvO)idnz;;s@7k?KBOw@Ioyt)_000bTp?o6t)KAu~A#cuevk z@d35u;3Ar5l|u z`#bh$|1Ul1h#9UzC6!A0k_KRt7^f}|tnH--x@BaRyUedK_yEvj|40us*0(}s3>Pj) z-V_`S^IDmAAh?YyS|MfC8d&emt+fFP-E9`_kN)o=1ZZcy^Z;Aj33a+&LS&wMZ>zqL z03Glj2gKOF+19f5+aTL$6Oh$}*IuS6fw$i#%i`!w2_2*%C!lciw*m}~6FKf0UNGYX z0{$)8#J$A*Op;?_q9zRoBP4r$YgG!0K7E%Xg^Ff&X;X~W29e7#eB6h6K=mAEjSSWRA%L8D=OeC8@W6drT(_xtj_qf$}~NoEbRzLUJFZBjIm zS52LrygAQMm;zYhMY4=Nwdc^5&3pE2-g0Qqsgs8eorDBfKaAVFrFY!PQ{p(1OkV#|l?{b0 zifd;-TE>&EAhywcu9JuryNG(=H~>w?VR*4m*F0e~SQ4;o(lCL6OI1M1EVVWU^1Y*A zy{gPjWwxArmR_f*dzO9jB%hmW$WH}pqL@rziH8$;(og)q_fK|Dq+dWhmz|IawPs`~ zSHiRzQ9c4nS2Ddgvm~pC^Dl{LZI_=zHKV>p8B@mHJn>`WpV=2lg)1l-xfUH+x68Gr zpr)ijak$lQ*DgQ2{aX&}c{=alhcx|9-Lt@3TiwdaYVzw8oySm9As2-$B9Gw?8T}&} z`6C&HKk`E#+dsBd?3y~sSy@eVMR-_rbQnjQWdkQo9S9umBk~G|JRf;O4r9&NrD5gK zH8m9#H5_S^{r$stfB*f%v_Tw{7Sd@ri@B#ji^E~kqklN^rtD(K4>c0{rYx)?y1KW? zJ7koMzR`pD_fiU*eY%d@uCk>6YO?XXgba|81iBG`?<82;Y{C(W zpiz`*x=cLicb+lGHJ0v2jGcXROdjNQi(p{I+Dx@f(*y)+&Szv2LYQOSz0GU z#YSv+j)NB^-MEhS|5QRNWK;i_CHTE`(6vHR&N}$sfgobC(xr6r22>KRh zkFPnZ#KzGt0*1g^&I|WJ4aMw53t2fE6{>~4`*8?1% zu=F7Px_gyS-?bNNM098OMUo37Dw)BOUEQnbE@{_ZN3u)m914x+T{3d$J+^z5%y~BX z`aSwJoh~$VEtJw-_6D)hAvEe7T^@POZF9JUO#a|t1Kpz7v@1=$iO-4^FZCVD-GO_# z8?ll!Rk}(EH>76`c~S48_N9blDu3d*9@sVg(bs~ZsNmQPDc_41#$SivATsX&PUoamGL4nHa9+1 zos_Cf(`P9wnM$R)a;;)*Y;@6oOW(w z>%s@C@8H)^(f{~u-4!rx$%oPN_b@91=#O-}eW~2OOz1=J3S-c}{fC?sJmA^zE(x%; zK$E5G6OhcnfEh!lqIWTxjtL6dvSpTG%SpE_r}XzvowQnA#i>f=m>@!JV2s4+R@{qpKNc)5_za&h*H&j6- zwp-Aw>e>@iP16Cs#(5>dbnk zyc#Bsd{Ityfu$@n+mx#-VZbV9*?Dvo;dcSc7i7Q1b`{HP%Sn>tWr<8U`hfMpP2KnE zcKYhDMiMAAKMy3!x`#>Ze{@B$!Y#51vJWy^G=OHZM-~Rg2ge2^x^1D-X$kag#c=vg zd&fjRCwW_aibAc?s8Ugc*7B>rBOk8(Tk)N=zBwnSo=0--(AOUyTIPBdXCyh&^#xFo z$0fovSwTvkDy92Xx;G=0vws513%iSKTJY)^ojwhIglVZ68G5Z=$Gp5O(;M}AWVCX% zc?t_e1+=-vJiw#2LaImNUo@U;N7d(wNaE~+e;V+rqCpimxOd%wwxB2jdUd<}_y5np`Mq=z zdn2O!GpbX#$sq%SmrgYOL2n9jLjNOS3duuvf2Zy{w4I&hRX?c;Bh_ z^Q`|FI{z+?aY1LR$5doRucyeBUQ3ZHy^bQ_-%LZo2kKHRYGilt#o3jZU*7ruYl1AK zs1$*k7!r}yU7_s$1BQz}2fX*MF?jm`au(}qca+jt65Bh*&BxoYX1_P-pdGH=SH(J+ z3)F2ev|UBfhjd8j7i30?Q;)clt)lBBO9qZ2IJA^q2YD|?I`CJxH%ue!d32c3dH%@` zuyC z?n@HCj9O8J$3xm$Ti=?&Z?|2NkiI7#p;oi4N5dG2i+G%8T`uETTdE8&+ayW%TQWqC z1#I_fl56XE(_G}OGuX5KCpMRI-5y9ln358+5*3MwI&Bi)?EyOR<~aYYAIiJUvTZdx z+oL$q=})36tI&cmTw#LvvdsgP)b`4nBgf_FJ|o|!5Z(}F&0R+S?qr+aE&JW6`$zPm zNI6uJ$qWfClYs^tz}i=lbwbY@Cb~97_eS<~(6Ox*oc#l`8o)o<>A+*#@C^~MBsU=* zSb_L>T`IcZh_WTyq60lq^d2g+e?V9N_uCZN*4phyqs4@9q=am7$^u{^Gt(_IBU7KH z7e~5cq~vHtZN~|i<{?yW5I!QnlahvSNH((dvKa#$TM%g5^T=B=l5d~Ol6NjIpl?{A zASorU=iR?YURM;`zrkH$?n5%1w+)vXi;Ts^VAH^>Fbc7CBMgDPX)WCkQq)FV-@#BQMSn-=@?KZhJ&_^uo$p?nD)!r9-k)k(=8 z^fr6xXzleo>q}PgVsB82ZqH-(c4yW7`&*mm@z}Q@sqOQ4Xy>KINPTs)bkC`J1=R*YYG+dN0-M z_#A~Z1G9@Vb}sqs3t3-Ccm|MB{Rc?LAwz_l{j1~^BnA{PU3mrnp-qHvP^{TtJW-&$ z*KO^NXJJy=2QPl~jI&?u;@T71-5$uu*AqxSzq*k-hqk!cDDAPvXH&M)SLWx&ECk+2iV7vM&PTNlW} zlS2RFI8h5Mr^gE;#?_6M-$hSBz`Nr@S{WbT`QulF7tzju~fz|8Sp zvzh`5_Z9>cFe{s{?fe|(>W?480Ih3)?IP49UV4mhxBJP+Df*hE>d^6mQwodOpodLH z6uBoMn=`?go!!xQob+{fo5%{6v7 zGH}D)sR0%SL=L96=&|D__OQhvzB%9)DhHJhLpVeN~G=jI#aL6bJp zR}YOV+i_&e$LYe1VAssbBEeB&?=O7I+839Qfm0>3>DzuQkp}f!d2k&^)>E4VESe42 zXbVS1jF)t^QI0jxxfAHqb}kj=Y+w44#M}F5a3>+}nr`Q!>1R1LFuzz!sHD55YXZCC z=KH^lFmExfObFQlkdEM5rX;uM8VLy&{&V~i2p~h~MK)H2OgDu666~+EEHcP{s3xzM zpZ%`paPj3(s3#KPA#~do64vWeEZ_U$;xx`a(ulhFWSo<)1Ls6XPZg%ekWk@2VyY6@ z6o7ZZrxZ{%VdI^SIB{)AarAQ{0=?7wU94r1w?;fiAD--S?>0-H;$bQ!)7{~6EB<#O zi@@6aKT8@Q8;FD=W`$at0c=q6u6v97Q}-2OlPg{36*6&%HUi4?y^9^tH4uskN1Pyk zxe4S7tbEhI-}^Qphk!i7gDavX&v0Rcm@BSy>ix7CpOE@3aDNW)iHqGO$%$;1B4IoN zAL9P~AncavR%n(kmj~2_w!n}>+EQEFd{uK@cZC;rZ-pF^y6Y=|Y`ZA=iVca12~UPC zv68zkUX^Whgkr{fs)RW(_fF8JD1u_Es+-D+_L=yKpPm)`s=&22%6l%Jicl|5g~)#< zd)a`nQ2zu~ZjOq(OW&poPSN#>QPY!R7xU?fn)D<^Kxl1qb8%&pnXh{IxKvc<^dui` zop%O)tX;mQ6(F>VtcuSG*drT5A|_fYMPeQYJtFq*+h13 z8lR4SZ;rf&?4%+}k(y)?J~!q_EHKzMaV8js=j50&Os@~k)51+vo^StF^0J+bYo|Q9;#`G^0tIqsTEqZ>*ZAp|@^g^Ym$^ zR0Z}#!$(t71=Rt+qs`6DG36P#eMBd@4Lnnx9!f6?O=_x!kD{ z5WNJ#K54ycJ#2f0wP^BE)Tt1^L9)ycXMc+;MFX`lS7U)=MxF&|X0gp3!H2b`Rzx(C?{J`s z^{RXXR!U`po>$sc`OpGQH0CRd6h-;@MVPOUs1UaFOR_lwab-y{xn-rNWomIm@RRYW zU=rw47@bVn{Z8d67s| zZ=;2Z6|0m{9(WoUQtfu$j(;pNDZ*zefKvqde(uiZPpV))LTK}n1-xN8g&NXAUL^IJKo zIVxkE5hg)KeTGgC-3z3}GL*WcjQEV?j6@(Qo#$)L8BSR0005_Nb&q6=YK!WM>X^3M zbyv$iZCQA9&B>jB#hW#jREq}ljEox@GTD!@$%|QIPj^y}OA$BD?UvFlJb9%iR*N74 zfu1lkmpmmOxDRs25gvf_5FQt222PazW?znsKD55vGNUEg((Hd!&R;mLm3y(-!NCb%k!a zDoMIjqsNQONC0j<5%LakuHrm1Y$GL$#jd7{@YRcnFK)n_(Yd2%!(RG!H?lXR$ceW> zfUR1x&K1bA>K(FI8x`K=y>HpS<_*U z2*;QuMjI}6qz7=~bj#>DwoVgX7Oa>JAxp$0&P(5=kD^xr>J~3zB%liFFcbN|cZtK- zq)(|1YDk>(P(#$EY2*;+yp#^Id$Wty*SEHI*5AI}8SLk`K6sJ1qc}V+E3l$FxDVXy zIZDn0yX&bB3p+TSIt50Mvs`I^sA2SndJ3KOuL@tU2A|L_E70UCO`I^bdoi1oWU?sv zkjnH!`|6mh_gjB`A%Efb>+<_tWL@^5x_z~k?dg>v%(ugip)chsr>>rqoiU6{NRHFQ zB3}ebdSXJ3HJJ~u%4n~yVVc{@;I(@)_E* zO3I2URJon@E>x9gSqrgnayHLuDArirx*hDh*vsk?U5PcT)Qxbq&$3EXC2?79D=p}B zt8{U0l*#As z;}#_E2gW; zJQV5BTzD=F7n|Fp^d<{b11q6c8PYqbFQTmk%MhO1hf7Fczv|@b=t8dhqHsi#mz;>F zR$`)7lgxKtv>%Z~Cnbl6%k4*G;RWFpNt{g_r|Ci378RND3V55?s-m!WhTS|$Afzn>RUN83koZClq=u28@T^=*-k7n~iMhfdlXi)PY(bflby z5w}seTxU?%k#qu2?`#8)F;wxv z>a7bGe7f!S`Ht#C?Ry+@#O)_C2ZjPGK~NSQ`H*&;>m*(ha3}v@TU!uPi00!LzH_9?6A9ZKyV$n9Z5e{_Ar@am6O z7?xf}q9HSwh<6-{v}LwYtX-QZDC{!?gF?s`9EI0}eUJ$hmH@82fG#7hj3L}o8N(Tb zvGyptj6UED=*rJS@^UISg1EPn(9S;@!&SIWG;u>=t8N&$cJmC*U?P3*zTi;kScXpj z3W?zxD$@<*3`_o)e1IE5F&kk$+9m=GJqXz=o-V^uhk@w6lq`YS9r;6eTllb|oH1pk zWuOC83X|gDv_wr00`Y7(dW4J>DMVwB9PMv=IgH(H+->s8EqUllhu2e=&&U3=e7$RE zV|a6PD@q3I{0XG;p>Q>Zv})Y!KM6mwk=K$xyDPt&|JlB4+@!v3U#Zr|2Hs`h)jn2q)e4+srh-sw7aAa$8XhlA8JzhtUc z>Td0Bz1uPwY0U#1Y7DYIQ4IAK9aLC%|Ag>U2_8iviueP z0lL&c{sc{3tK1amv(pWQh-o{w_^*#z=|+-fNm4?!AwlvWQ-~Snaf!1kR<^7^0<}=g zw14O6pbJX3tu#%N*4Ug*TAi|U8u_gx?Lz+PhW$q{51n@8WJ_noWjC65Ut+E`)iuZ) zv~?-4&`Y{6u^YhpMPI5_1Jv$l9R29d0N2Xas^;2;s~cRO{X<+nC&TOFAG#jQYtL>s zGPci<^ddY;?5l{BTOUy7SK?jZ<@R2PWZ$y<_ZP?)B)=cIjQchu$t%Gp*4M2wKyryl z+fXRPp?qDKg?t$vEqaumTJxA?vUYuY`aw*V>?}fJ(p4W}raq zvsin8{T;jl#G&wx5P(qd18_+ON?a-{-JiR){?U{9XL(Z>?;xFJ=}YfbI;hyd-V@Xq#S#+}O=6n$Mw2tkS@`~Ez}$Pk@B9Bh#GQ7g z&zw2ueV?KxibvlQ_Q3wV{&oDZW7&C!!55ZaG*9G`$`eori&}YULU~*%4}JM~?*wme zwfSASN5bwz4_;K{aRDydqVc7(4tj~Ii?}By$|EBUQSh~m*F!w?%}XuvLVZCT_(B8N zn4O6`cdB2}H`#!|!~o4|h~8~acRX5FmX=e*)3@c&PhQ1saNg+Pu>DX=YvbYL#~Ym1 z11{1!Kv(=FVvQ@2ntuaOy1`(wy+<5TA-Vt+;;u>(e<|T?rw7cOGbHoTPe0_|`0`2E zhrqeTa#LJa*na4I>bvi2FaPpg<6Ju)AHlnv$DA2{cAA=%i}Sh_ZHA(OyJXl^D!kY! z#L8EDhc8;AURmsPY&Q=L>0Zt==g>ZCx|ytAjv($H0W7KD=iccUQ zH>Kt!;mCA#RrJ2Sm3(DtMOuYXL2h(T$dQ%ni-)tFAAywVy_4CeO0kl8U+46k*ng)#-B}x3xgkBQyI<&3J+yt!R#;m6%xadX<# zWwSs2xryy}g+7rweJ^gW{d36SQn^Do!D?9jbbZB!MTzUx@S{bl=b;D8Ae26&|G z$@JnkIXSL$oQJx9Azr{Q4wx4xJd#TNDiRF|iJE;$#pUr;?&Rz17D3KY#e)PeJS#&XL+F&duR%uy{BexMK;o$HK7%XonHpD z-&I3o#1((}(vZ3WOO}sc44tV9Nx~^Th>P z_S@d1)U=C3OF%gaIKB1i?MC+;7d}2UE;1d?)E81uoh>=3NJ&h}P1B^r<$n5v&b%Ik zeijp_PtfameN3!AM&lgs9q1OV*yv;v$ z@CzA}`S84uo(b84%)sBr#wP6Mh0w zL4YVaJ+Z8yvQm9!HUU{kV|gsmcrXxKBG`pKh;KSXw)$^zF75$M#ZXby(Z#cIF6 z@KxYO2l@s$?p6mF0@DHkJOCUM4I}Yx$0cs1v$Oq5`^Gb8&*ERBvpsJLGADD}G1u9- zv8fUNVXiYz!^LE&>`MEUD0ik2|4U{6A(h?kj0HVq&ooJ83nl&bql@WP;!g3|9Zc`h zG6cjOkZPEOkEKfZl^^FUP~+8``}gYu~U???kWH8*-y7t<7uXd-A->A$^SX)4M5OSpOvX zMl7SQ4|Vi+Ei|*t;h=_in)Y|T1c2x#g0yk234m>r5xskKU*G-zn2RfbDucf`6Qk>d zLh&^vz6S85L7D?A`{{s{{g?Rp{}w?ktP#QW$4cX0A zKTz4`HMN3kQTz{eYSn3d$EQrA;g9+f{zT0mPCuxtLk>Fg6DCAW`0&HD4>isqTiic- ze(;35(BPXebh}y)l1MnxQQ>@CXlO#1rgI64VN$4|&rHb3RO?AQ)0pr_Lot86=Gmr) zJsX?&QPjk-@28E`>8Ge4HBx%KgaqP)5QuzHmzMdItM{nf z$(y}cAQH!idD;n6J!Y?3I!&=`n)@gq)<>7v9{QL+GPP~V_gk;HedqTiQeloFAqZuk zC4;r}V~iqfP#j;DQphLgWo70iE0Xhz;_@~1l@|fwy$IfpB)s|xxrbLQ#*GC)5{R%( z!5knEV9tl7-dO4lDD{9YEWm`xo9&WB{|j^`OS7~_yVRlWDP^*>c)f17Knx5rxQQRT ztXeKmGnvO2G7VV?a3s-ZW%e0Lq&ch3-*x$3LmYJA5{4VX4B;q<9^2{VAJ#1@!PXLepjq1X@tO2H0{F}@cmDS zOo-G+MdGNXIgR^ImYhSH6~!g%HB%8j=m})9)}ob+O=(MkL5C%=RTYb0cFg5+T!OZ{ zgis5|apN4pNb?N$4&I}Qj7&_56kM`{o3iUJkRh-iQ;;DS6so0l*-gROE{cwsMC8yT zjGOzVXZhv?PfweL3z>7n=$m!GxR^l_2Y1cpZz?!Q`yh?ux1S4nbHxjxt*yK~q1m(C zMm2oymmvDYGTZ*iWoIQ6hh~lY*}BI7Dl9a?FDvxtagflFtg+M63BZ$qG?44DiTdD? zby&7a}2g!%4fT0_|mS~6lPT#em>a0cd4(yk_|M?RmeKOVb zV|)6+7;1?Q8=AKZ{~!NL?!Vwntv3-S3Y^U}sbbrCNNH#$S;=n6TRI!a!RgD7S z%$bnDbgtUf1hKDBbMp$FDn<4`)*6DfL`(4rcMTB0uRHTP^AULbdLADtW@gBnYTL*k z1}GaP*3R3m-YaIx&4L9yyP)j%rYu7z9=4G7z+w-LlKU>ahP!tR@H_%?ZN%6{+9eV_ z6lgi~G^ip+KoyxLcEULajdvV5(h1}70wWaw?gT&~EJzgg98ENJLQ6T+7@{#xLke>& z6hF-ESfLAE4aJ~$H6u$&UV(>CB(m4*DJVi~*>6BuS$kqi!rHawq2?jhV2p%{L&Tvc zV9>Dkgw5LHShCJM#5~lRjwB<2OR%N8>25cKTP9J14eg>`3_8E)(RJa^fKT%eH3(_! zwn0YQR$4NGXM2Xy2k`WDH8Pu&x!WAdWjidc+# z1U3$4^?5AKB0h8;hd26Ny0wHdDU*`icEsBI<@)9M7R4sT;V+=j-MC&)d&g2IAE3P7 zQJ5ykN#C0NShwQ|`)89Ql?$C?k&sQ{YFl@lT(vzaM*35j7RVoe`t^9oyuHhg|8)8& zp>u&eDkU-{DrHsEjy1IoZPQ5Kk>s;a=-SQ?O;ZMhlP8L31Cp78)djJ+vAJ;yI>t=+1AzxR6!@8;tT;%V^Y=Kt zXJH=1Qg`akpp|p4qh4!K)7dB|Lp$s^ZN~&Cq0>VE+y#n*s5^0o<2pgXd#pG|oWt~e zpk-F|Hsv5%VyF(-=aTJ`mGjh9f%Wt(Y+kq9p17FTG2ld!c)MNOihGA1@ttZc1g^@l0~z zR#tLWdSSM)IKEtgrfoc4@a{M{)K@x;2r45K7X@Q2%T9bzE%8N#MYN?wLMNt8mH==` zfoCJ~F-8_~tpC>-%mYvWV8PCIjx2yfv3;{rB_2>V=&T@&EZy(4qU4eibw~RaWmh|P zCRGAjlZ;hemJ$zg)dyYe#9PNpHkz>B#bF-O%IhFhkg^g5vOIJKo%k;9mN5anoCQc(PRjd)6(IXm@7awEizK=Mc^Y=%4eeGvxA(~fb%1Kf-mS~Ar|Z? zL^jK?+tPpS7C@a;b1#IK{?gFD%)Ri1zzpoXG(9~z1tM@xB#0z}qzwaxD{30GYWNAWAe-VPZ|DD~Cvch{Xt9nl0g{BaQygX*5-h-0Wq`W+Uh^d)bArV00xn zND+{)E-af37zG5$P4MEu?QNG-9*}vt3IkK2uq-eh;Qz9SA?9~N!LR!Ayx-tfYW8uRb$)}6by!FeWF z+cAUL6gd^rWOTgOK<9Ecq+vj-oBAx%P_Y(j~p&lJL;*AnV&IGWy(8B0EJ! zAwXAor||3h04M?;`^%Tay0`eOV?KvE+Jg4FxHomu(V^~+lN~2l54-P}tS2pW!fluU zy-gOaBYGzyD9G33Aa~JyNyB1|=bo4_FJa>59YYUIOpGPl%`1@vJ-hPb!hv^IDSWHz z_twK+xxA%LAm58F^oaN(tU^IMR-|x4EPys`>#|BgaG*a$TT{5pF-jl5>6|Jw-loMN063Ch^loXWB9PM zkzT>u3_ zY{^`yw^`u6+rz!V_rfmW_YFtwXR70Y>tbx_OoPI1R$jqY0dHtYIOBP`G4h(GWldecC8PY_o&z?EvcDm$3=GnXpXU>wb$4^}#iZf@A zx}837s{SGfg0ZSUXt?P^@j2(J5AyNWghm;&i}NyTgp|aDRE;P!a%CymIR%>9=$)~G z=;{2rSXg9tv06bjTqaAFijtcZ+(!Rhd;BAE_8lsyDlg0o@j#X60B1IPIx(J1WTvoA zG?!7mBa@wm%f$L*x}G_}-XI%X=?3N;dxYfTk`CaSJ&V`*`Nu`>=A)bvVgal-mZa^| zNV}=X08?8fvy{c@|%?11VJp(H#xZm(J;>m>`_8|@Pql#~*{N3BnQ z7eriER$RU2qJCfLadlN#!R~C{D?K~7Q!`Gc9u%tBv{P`Do5{7fS8rIcdDYCt zwJu*27AB#;XgtI0^$Upg)42L&*TChXH=9zNm>C#pa7+|@bgv8hY%^2$?|ey_ZA7p^9=duJ?Z*8_y$PVA7bgU$nJX}2@57+>y;Ym z9)NrsA0-$fq0y(2$}DzvU%j))tENJ_`hs-z({S|@^D?BXpHyIwuKvJ_oHtG&V2>g( zGchw$y&5O5cV1Y}2|xuTxx6+`kT_tvGsG>bKD|2r)9v*T>>harefBpR50=Sj)PPTQz0Q;yItM z`qupsCaZ^D_~7m==(N2dOOVeQOPS5|9~!I}OL!e#m^g9<88K$_oL_+YnQXUY1mx!w zC)lcIXMebL?bf`rwpGJ1xr_8(@^tcTRO8owAxty*hX$*~9?%IS78Z5VyZ7f6GU!_M zl|y7FVl9QHVO3<&;VZ_7@5rb&)qfR}tEL1_wNX|ZTH{^B7y0f<+oTDk9{KE{%Jc#- zmj0`_v^cw_R;^`UT;Wu`!fSoEWH}ruoca&BA%d9IjTCW>!>S zuGZqZ`9=5F+Vnl!F^GI3UIKW*_PN4bChz>k6wkdkWy*W}dsDuB{`_0%-<0)^B&Rn`=hM=W=ptGz>@y>t&c688jI5d7W4c0O;g+BayJ@@P{2BQ9;yN*M}h5AY684&KxtCR|v zOg8EI_iRZ)gqJ`LC37CWAVp4rOD7h{F5j0ImBe}qv5$#-Df4iNts>u0?}y> z2m5&Z2ioEh97|UX8Oy2qNpq--{g^KLh%90T(hOF54>9izlEI9^1(nJA%P3U!;VM*q z37So8IbgrmWC!~j-2ok&-^dPz?zk!!Pt*O}mk!0B@mK|QJ>4R$i-Vp#e(FyQ&8B72 zG!~%e``x2 ^C!)2uZ&+IMoRsi&Z=n;4v(b2DWd4>!>ONSpPqk-K=N!fXHw#v|z z(lXP`33v#1#<^c z!usTLyg$-BGTVpEFRf0&7pi-!q>pI|+rISj-%r?QGX=9o{xyM0_;j|!3Hv^eeILP= z24P6nv4=+ZxT()utg{EVT!JEyQSFMjs-dvUp4=+uLr*k*5B!-Jz= zb_JIU8<9Qx`|2FdjoctOUO6Lgh$?f==Bu;vs;kwsT6D%b>8p7<#=y|Bwx?goZw7B! zW)QGG)()4QmN!P1ZqJq;7FjR5s;vC#8nswq{u4w<1M~O2A9W7$L1n~EZvNQh%gv`{ zS6S11b3cw)(P)l(9TuBVp>$i;bV{4nz_7y@}-n1NhT?%_? zvXmK4jp){c%rlZ5OLsE6*wx{+$A0}h_)EQTagluN=Jg-g9^CMgaJ&00QL`1@Z;2C2 z`cmmW%ItdC{la!PSuMqFWORoclIX3(@?BGi2@E!6rEk;m15L+yAV)`VD!aqm5_j?e zY*b8a6p+OOY7NY(#;i*Md5QjhvvQwrQ>#>1+fjwYVu+Hy!G!DgMux*=hlDAi#AHi2 zU7|5DRoLz6804&(zV77Lzu$iNbbo#H&QgH{E5(tCTwFqYJeU{hW(y`7V&qYpkJ+f` z)U>P{zh>qNQN`1VZ;CoCH7$+5&1M**B9eq7bmX7p112>&EjdkdmrYBJiW0IXN)^j9X0+eIrh0&CUD604fKxMs#)ut zQRFG?DhobvUQKo{mgoO*EWH5d#uYPE^H^f1Xt~6_2%Br1JtDnfPk51zgy_t>@{ASC z!R-2yLmHz|9}f*pLEZ%R5f+U!yUIm3lE{too4eVG->}Jk?{4^77`35<2T4Q0O>v6Ca1?_!>gPZOk9h|AJCw5OAa6*;xi4{iNuS#1^%bHuY{tIkn}; zM&-z9_nwe}I$rg_m=+Z=?aG3C(oithi@UjB$frkv6ELcgpYIF)OfKXs74Ho?!HXVU zbCH--(%vJjp$dH)(3{@0pQ1CKr6W)YStuWB84s@KNTdU?4$}1;gH5-2JE9hGI@Jrn zMs2x?kOG^i>$Hd8sMY^<+}zyZy#pCMkXgt?F&~j!9UkmVJkP%(&Mj`{jFD-PJbjA= z%0EJwEnh^n9-o3&rbTE7Bo08sV61YVyuE7?KU)qQtC3gTCCdFe(n}8JO;*Ejq*XWK zuM84=o9Q-aY7QhmrwC|M{X0J7{!T9ns$c&n9;?S@ng4f&QBd7|)P11C$QT%!3?ok^ zfT!w3$3{~kM>hj;7l`1d)r<#Z1P^b+Il#+JA^mSpphI}^GJTs9ogjhpx!K7)6}jH0 z=Bbj#=WH_LbJCk=`LxvJbOX#ep%r?z!>8=Ag_oIfmTiLWDiV4nvAQJub;6IW8tGMnjcsRMcLWF@&#(_h%lg z9dm-dsiCEG4`66FX)yT*SXr*Pin2Rje=a1sWbQ8XQS7KW9`JciiX@`3JQaArH%S}9 zFStqe0JW8B8MN}?g-o3cz!mnVUew2W@Jpgq+5pzM{gu+@)gbe8^K-__E7WzTnmWm) zC?Pb{5H4eg6I)-KT~;OlG5P$}AfnU(wz8ePrL@5od;qiTPu|fJCu#FGTI#6nfIS)b zoUGU`wo7U$l6AP2?ZRO!0YY%y1|QcQLT7*T9cJlDm+4d0bQ(l4hLGtGZq}cN(r!O+ zAfcQ1H5slbYbizs{`ZMre!zDP?7~)k_EMWIA5l+*cZ6?s58&W{WG6YITT5b;7_8B(@$q-xDeTy^#%Y9R z_?jaPn}zBfK80(r*ldZ?a(HidOZF}l?V%WqfB$_5juwP`k&8K5T3B5#G&G+)@=Wve z6bV;i;?T(>Pc_d@Vxr;iB`2MBGz;zxCH^Pjb}#E_<}LuGZT0%6FHtFb0|H@11Jd!;Ccf175M6 zYJjqz=sJzykpJhlsU_IwupOMs?hfARTP#3~`)%`9^H$&vL!^hneBXRux@DrRXiGvc zSE)0-ZF*ZO#uWS3=kDvK98c<4jW^{HnJ5Vwn%cQ*XO3T~K5XzQ4ntHTZ9iQ)X`W(_!#AJGUkePisr!IZTlvR|Aa zn?*nJ633f8HMAM3!Uc3cq&IzO5jl&nKHoszd?Dx!`Ner5Scn1SB!*EAIU{YxR=T8gh+=ISoqnCc{C- zXxdz{CToR)v{=!}Y{*l`ALm_tMy#zNqh!K+#E}uY*W2QMY`k~=0)H8C5}Z;3tbjMr zggFa>b}!>;kvN3O5A)0P)u3?=C1p?c0nA~|b0y)**UHK|U~3x|&Mcb#yN>wcdQBzn zH3I0AMTJJmS^H0M=amu62a^Gimxu}p*!Tw0)UEIZJ_z1OV#GMM%qX#09dTH>md zJwC;il_kX$0@6s8#l9YbIHYqYcR%KGz&HFLaUDZ!{b}7}`kRLSM(ajVTYq7Qc^wll zHR`j;YV&h&K}fBx4$1pEiGtcQYS}DtRPm|)M9bKaPw*-nG1+r1+YUJJoy%E=ZClr` z-@mn0FfC_W_aA71-m(>78^`ETN@*CNh3}9hRL*w{z|#G#E!*}x2wg60@Y%?77u7(0 z9D{U&nS@I6{Q!^3`K|%j;x>o%`?s|U9WHFHefo-}Y7x;Qt`)2D=<1ODzi5Bf* zn4i>#H^enW?eX{a_VL_X9aa@yrJzUQ?^~KxTY2gNU9c^iM=kl1N%Zna@eg|?_c3t?pLnx^9v1hM`a06jEcya>U!Xi@qH6!Vr z5a9k23bRs#jLb3vvUUvFzk9~_!jUcd@c;~d=!Ep1jP~KF#ZXw@Qq-?o;q}3i)zgH~ zy0C^uwJMjg5CL?Cq~>a}{8L`l;&JnK@Ewgf4n&bJ#35vq7X+xMH3K`s0%P;tpAgvk z)&6Tx3@C5jMBi}YpYNm}LO64PMm3A}S~GPRPU3C)<01N%knZD^=B1fDZ0KaSe5cG^ z=uGceI{~nLJe&!r#d$P=_7bP_7=(j$KMoBYQ-xU0O^bA0G6!k`en8*J$@rt+-2U>= zx{uNX;`EmiDJDzeTquZ%R?{L~x{LY$tJt-}>pp_a{6-Y((^HI$A#Z^z5=!4(G?@?c z^N9=$Rjgk`j|KF+PnQahEfxZDeA7b;6`y?<0vJz;niOY~H$R67X?{sYLAK)9=j2j8 z`AtK9BgXgU?d28os}YoK}<}k&Cat#5eOsPx)W}dUtqt4B<#6 zcpsj$k~eQ1i5%i-$nSm(!X_z~quJdTj+G+?;J&1pqGd<7itk8emj(JvScHW&Z0->&;uJEXa*swQR*3S}Xl3aZFn49h3FpGy>x}$qu z1-g&(3SH;X zj(s^8D!m<$x3+xwl2~>-S-&T)g1m>=O5ZcLGLZVd%}pZL%qn_~NuX_Va<{|Ch!DoO z+ht^kcZWAe#sfQRMaT19_AK5~EBuWY4k)1qf>AOa*>@Ig02CqPrBr$XUL$Kf@BbhQ z%069E-Jv4N5zmkdXVLFxRd0vmUYj_s(!bO*g-0!Tmq|`fGG?f&JiuZ4$a!Yd#5j z%yP1x>A0h%v$#*#{CjP4F=r zV74_~CI>C{Dn}+=WN3*T+8KAZ@`=?Qv`j)96uvPd~x zt7M4}Z6GV?25Y)$21D}Y9jam=wWJI;@iFy6iorbE48-{t^c#AdUZQPK7}=J@LCpk4 zvQ2U^&?>+H@eT1GOo9P6r%5r?y3>OB6ZXbtnYl0h0?6O_;uh(sQ}i~( z%?#ut{7}{K;7ExCY{8zq!_kRLfqHKMLTI-IZIr_*wh{E32Uho?{{r_jm_wZ4V&d@^ z_wjwW9*H9PgdS(~m=UdxF~k~T_`XQ3kXgM=Pb@lXe95O*~Wjn5#lHq9*$an$^O*h!-~#5+Kw-{&-YvjycR(|6gA`v$j_>YZN#;Js~(@5 z-RU^9!mOn4n|CWZPA=nINxyC69Y^x^sfP_ubDl$^={@R$ru{Hl@kj2nrXSCeK91xc zDB>!GbR;bMyIT1+t%X1LEqV|$kI~7{wV}f9=}-Xr8lV(mAJu4J3NUlS6gn6gP&!tN zfMp8%)BWPcZ-w*d16$P-UJ{vjcm1#z!iyIKIx>SKBWtUj%Sk_B+xOr2|ElTa$$k!W zkGFTsqza)OAC$Kns7?dzTB|j)D4>$>bfhvTi3PE#lrn<@$h%G>{}7)1LEb$=253+_ z*?6oW7AV%0%G{uK)aoQOI1bixTMX1X2_IX^%(nRoN6XbxYYnJ@Hd`0dQ37EB2|4_d z^eH748hn7>av1PRc<~2ekCP!u-4U%l2o7xc`St%RNjg3$-;&9khqt!}|32&CU0Nxa z_Q>~@mR9n=vX!OYaNKI@+(U*a#eHP3jvh7dlg4NCjL*P0(13%1PmiN+9JmE4^cm+J z;WG{(}X z_#kg$ft!^}1sXZZvZ__hxEAu?mA@-VziC_(8KZRmnx%fkQ%Upw_mBCPsT`!BfEmND z9Xi7UaUblU3pEhGGcYxP*dcEr_TzqdQF8slAwSpXdZv8 zfu8O}B(-)5TLQOkS9_FsSMvMMH34qk|LG{iPISW{<|UYsZ#L~SKhmfk&6Kuh+!h?aUboBcZGtyLyhI?!k|2Vf9I{C0sJ)j1|7ScYBh8VMKXrKC}#@-vK(>b z#lokZ2SwnpN{iu{(Gh!=$LeMrm0kOEyZn^Fys@ z_jE4Sk$TyZ#ASY%ztIoTx^ULdKO!(p5>7JudnN8D_O|J;N82zoD?h40qSs_+2_5zw z#^Tb%2LCb}sq?%Sa!I%-Qv9@A1ws|4m8<-@Ns}gh_pR>#_cLxBu4=jGL68+~DwWKS zP=UC&pQ}{mwQ%P^3B<;hf(itv zXo|EE92JYmB%&Y)hx8@wPsJO*^%mQ$aLbP=7e2;J_HD& z7Mw~u6LUs!Af1e@J*U1%Kd#-9&ime8OV~9R6{UWjIc`fF7B5-i@c9yrn`el(pRi`> zTFUy`DYit?k6o9lSCFx;2O@brs6^pvr}T|En|W;Y5%pl`XX9K!pPsL#6aN}TY|$QN ziS1vH$;AH_y;42UDmukD&Ie8G5x^&}Xn3!1Owg3A5GJs*2DC3oIgAYqj0(fkk6bP@ z`_-N!9P*b-H<;{bU5-Qg!HXU#^oaRc;qC9`-b5Y@(#{x3Gqxhr@%GWiZ` zGFJU(FzPzuOl;%6>P9l_8#G<}zY=Z?V1|xeLUnm`w4wx3L37YjbqP_B+5m`zg}ah^ zg;qRgR&cK)WQexaR>wqE325k4hx-}4GW~7*vx>t?q?j9ma&Ahi*Co3{X~Jb4qH9ub z(y})ep~vskMnA6Ncci*_NAHNnVO*T7USdp|>;k=jHzi(D*(7dw$wSKRVly%`8 z+1%KWT3Q#~5Z&NXx+7XaKi);17E-O6&Jue~MP&aMvDY_fOqwkbaUouajj5T`ijq5wX{8_Xzg>J9H4 zZx~XK)lqMf&7M_?ABv!0A>oGwB4!fvIHu5wB(t14ha&|4Xwp_?$zb{kDG}?QJfxB;-mSD z^$m{YAN7QoM4~s!m9u{iw%?`I|b;=GeGT`pMAiYnmVy2I9 zfa-=;I`-wdVjSlLr78u9tBy###{1|VP)I5(=ztvh?)HJR2Ew?xi4F*%m3xqu^YNkk z{-5_wG*WNu{Xgy@Iaf!5Nr@-ncIDk+|q? z`8r=ACAte#_jm~JykLg!G!4>15=Q_J!*3Zs)ZadFd+iT9f7`2QLpN^PjN(S1ZBicp zae)LXuiPRZ!27^JR0uX_<2wHP@7*oRj#pQdAKawOG5SubjnC(9=eL}=p}VPMRAwsg zz9|#@X@wg=PW}P3(wBY>JbgL29`plEB&n!A4jd$L^~kWSI7DL4AeL{om3V-Y5iNBE zO}Q|>un4As$P+Clu62B(f1uCeyVY3VS6> ztmU|_b+=C_2>S^cyq%0LCDDz@DB(<_&L~yKJB?jWanJs~W1U8V0Dz0`wy$#=?$kx9 z`yF>`p&jm2_g(z9LrOnPvny^~DE$7%MckLR+qf^NEdSSQ3uyaJQix2r5>08l>C^u& zukhFRz{eO!*6Yx)9)KL6%m03#yXzQ}Wyd=l!cewS#bHY(OVaFE$&qY8BLYoER35rt zeqnIKY*EeFO5UgETws4uQck}r!HveNNJ`xmrFIS1dv0_LV0s_d)*I&7GDi zQ2U_@Y$3mD5TA*|T<}&!L32n|*g_>5}7^JB(sGpzN<}(79;IA`kR>{jyc_e2cSldR7DGK@;aszHEfHNR{(cPjy%VD$!0HsEH=F)!M!^^ zv7qmsLTi8UMzG@3;!`wrg}+n?HPfyV4l!ap%FCe(;76uG&1x^5J&Qh|fs8 zrtdY7@&6DAhc<``9l-6ohB(R3)ZfeqefN?6T8m#v|93mw#f#jYwIki3H<*+hC9K%D zu4==PZH=4G__QeE5ZOy9y?%JVI%5sdM&NRA;E%!qu2WQ`HD!n zeopY-YJ3Wx6-6gL2!uxgbuvR< zyDxpa>Do|%#(aDaD%I2f+JxSRwVFIbhOq&^7}5s%41e82SU_#JFx%oBe#Wn^iE3`p zHwCISk6^?JM9nNlWTU?;QE8B>{uvPZTuc$CmI7`;T3JPTM&Uo)VeV)TDHy zIz28uI+X{~M#})EmL!RZ#zlk2lPLX3r7$xB1my0STB>EDqvOEAib#r-%o)2&(ZueV z5zx2qp4nY0l|(3w-~b~%g3U+;p>>uXCvk_nXLj!pN06=t90o_w83rVm#N}kX%0lbv z)vd)9b+vr5KfVI5&-Ig0BR0@}8rpBfu{)!1uDQ8}#2jJLcik)0sq3@r%F24`b-b%> zcx#QliF6lD_HmH7vm+Z}l`C}|Mf;tY4kzvI;Ju%wM#yM~gA0pJsmY!tK1vdacBv~0 z19~FCCGT_^8FOC@O-2UO#NI3k_#p&Z$(}_ghTaGGVJu5bo$bVAYG*{C3Fv+HtOSFp zl#mguxgDf1sY?uHFezbUk6O^acZ80%OM>_VCp`Rll{Xk=9n#Aa4(?rQE)_wAnFF5>K2aBIciI-YX|h#?wy zb2|2&77~&kr11#z_5^O+Aa^fu-WS4)+h_$Mj9I8Zs;5+n|$539BtQE3xFq(|4NhAZYe>T|`aN*~UtuYa)Z2iC+tGZzcCn zWu8i|j;R0s(&qgohrNGPwY@5qfTyA-6}Zfb;8xdYm*|gIB)TaQy$*XfWR+)BRb>=Q z=Jg=OO}7fK$Zf5Ou8aP9MVy=7%gK9Z)}D-ART0ICR?>^}J>2;9*(k+@XwvV)`Ra|! zc72x5J7&!~9nh%Ic5JdLIqdwkeUxHZH0@q|Vb|q+{%F=$rwbYtrd=@g`19e^;ln3P z9XRl#Z=U5QW+&wco_W;)^_r8-sL@qR-;g!!sojyuXOvc?RB900*~NvBB1-qYkA%eJ zM`XGyK2t*#rU)$rgkw^}5<+6a3xe~5^HTElxyU1=2FC|Q24?wY`DQ2zqH`is`0!Mp z*nj}vB;N#oP-(-W!XgxgvV^j7bxNASkRn{kym2i5c1pRSBC0z4#HOk(d2uD4H6E!R zss3Kkeu|jbgjh{r{H~agAYf!cJMv4!rV=yKGEy^>i|XssAsGd$!X&k7mP~dt@rR;= zM_W#&{SbLIqRr#B{Qb@ zaft$S99etdz2NJ+Mn;Tqv2|Lp>$7beoYrr!KAV0j^K6W>pR1=k1h@d&-lgA_9AFGG z#$AZdk3F!iz|GfwtA}0W0!769blYQVq%w8~9Uu9($15cKzCIRCdFq4lwULD`nXwts z#wfpd-#EW`eIi6Y6H(eu7MhPON}~g05JQdCL>C8??T+${@^Fvy*%q{MR~WpAfO?PK zmEe);nP+#y@k$tAJ1L-ic_w&ysl$w+X`xB}DZUB5aRCLs$zjoo$e5Ur0JXGxpS^xz zfnnJ816fddP-0YcbaX;+a$s;!NKlx6NJ?lzY;;UiYCuL{Y-oI_J|rGmYg1{Tzhbe* zMp;{YTV2gLabkctDM_4^TfL%fXIm1HB?J1=2OPuht>(nRo0eDgDwbvBrxwJ(C1qd7 zBCe!7z0!kk-k38Wc5Cnnm-7qD70H>%k*TM@$352-B$c3_dDFXoTJp5my-`p)_VsZN z-U5BtUg5I5d%=$#F2M0v+UE9H0LI^uopdT4<}*$a9~`U?1J)LM`3?nkXD#% zvvsED)QHK7j@4Vaacn-6uRMCAM_$)tIZHS0#RF12UZmDyjfF9E+@f z&u}b)?2sas=3_WkApV^yE-4_BzUvpgF?3Me=Az)tc+%HUh&_H~xRLOc9@%p0z&V5t zjCUyZ%E%z^rPbd^ypeFzfD*}W>GZ?E2nFz6%ebRS#}bbku;+;7@q?pWV?DzX{ESl? zeSa%zS4ey3U=xuXpH!7xl~k3K>Ya{PRH0&JvZh6(|D5DMOYMne#;KGGDb)#?t;d4C zG#pPpl+>WlsY&)v^2+c(IPK}J2GUni8&?-w7pLgf7S`jkfd?3`k0n*g_~4wdf+%FS zW+K8qiYCpXp?C2i91QKunMG-NnehdRiJb~AWd1y-`ALddNy9F!zquDU1v_H#ou@(t zcFNhH))B=MuqgoO<0JSa@(CAF5>^pXj>pVS7Jnk)gy95mUwHAMfL)eamYtrPmK&B8 zm|=i7q#+3_W+Z1Or>8(rrJ$x`zEM#9e^+G*x~q2~Va=Ki?~twr%M zj@sO$y32IPVKVR*>GuMV(_ZN@#@Ng_1+;z*@qFOku+X&N^pLWUvKZsujEKx=#TxyZ z_%%>t4)F^2jP$Vya|v~f+oTY+-rV|6hb@^EH$QIPk&vqjgaRSgQ~dDw(=&PBm!mIa z5l-dZ^xAIQPUe*-_w&qKAAB%l#s?qVn)&n3?d?DFoqMf*o`HEYF|Qr-Zb|dy#B{Z5&?u`uM%rkrq&C_nX=gw@1D|Vq zX$+bR2(ADPEWT-e6KG&3{JtKFZ(=UyOGBZpN5aHB1Wid-=-ukf-aYu{+Wk7wTVAXb zhb-hAmFp`u@ApAB6fpr-zQ3fRxkZhbmdV(o!2JXX;AxQGeggSz@ofEelY|FVHH1WpAJa-ZdU->V;hJ$rdOSo61%O-@~RYR*`w>Q3|01RRBGkn9cUYw z!qHg;(ygE6@L4a zTA!lxG;sGr0CfkE+0hY#*_Pz#%*}FSkTAW2?^!sHSfBdsrZDCvv0hE)X?ixZgUW7` z5rWi`LqJ@#l_QaaIXlo&RY@Is{11_Vo)P@29K%(;?2rxyqF1uom8%BI0KrA;ah;ugrIWGjz9<$rg$}GJTl)H<3>eTYmC=1g zUZ1^mJ+Q(6S*Im>2H2>Sq(BP+=ZGCjCy$31<8Me8?+vUE3{V#e;x1#ZvR9D0Kb&+*-b;TKD zt3ryT_XLOh@c={zMg&GhNx=~7s3?p_D~N#@FRROv7)H?Z^Sf;=cW=l^2N(T!UAodn#{;jWB?N zFa`mpF>H#_U`Q6KQ_CtE)d6HDij?h2;p3vD5)!>lU{lf(3`u}5R;84cHmJ4GR-DAq zJ~KwrG#(1D3A9fgya46Sx9)m>t@-8Tx!VG{O#JC(xyg|(;s$sO1GApK3VILvtwYsh z=yMET1@Q?lV*i2ytA%`3<%06bsR}wIbHZ%;j+(yna5fo|$=^@CT5+mU0S*WwH+jOA zQKgvj>FSX@0_-2HmI%1P&r~9qs#-9qnY9vRl-pqy0O~ z^~D^R$4K9(o=Mc&melq?3R7D^dU4;|Owfdq9#czc3`F769qo8gJM9?&v%4%!_WzpD zS{y?4Aci4)ZVqE_d(1vPQ8RJ&DmxFs9QL6O^9xrVaXRCVuGXLCSBM`9O4R@qeWhjI zV$T#FIZ}8=LFWfSm0RiL>=A2Mj@?hgDI-JMOP~RZ%6mg^@q7PMkzX%vNs<8@a4l= z#dW2t6n1zSiTA;B;o;Fi9S`s<5y z{(OImMU11CmEF=wwE^+2#qZ-iGi?Y?a z^mM&GjXxdUxNeo2_N%QWYjjjE-xK$Liu(?zD6YQmrOeDSLx)w^WoI$5M6s9H6}ypG zgS{Xkh>EDNiu9!;OK0iWutdcY6?-Ew(HKiCq{l>K5)(}f7?ZopEav;&g*ADe_j%v* zp6`6;d@Qqf=Jq>#>%aW|>(iq|j|-B_Jef(4%3i--8O33@fLS;^a_^yIDF-6K^81LK zV>awa+Pfe0dyeemJ?>pQJNHePisI_lFp$fcr|w->&r_jsPx~oTqn9kwR7R{SUJ1HY zr|yzRnkF|hQ=dWV)lg)7V{gEjB`6SfYR^IP?u)*_GKQc!AcuD9Ym0VjJnj)2<7B4f zP~kg=l_ZBF-kpF9r;Lf&oViK7zGUo?5vrw2lQ)EE4lJEpGh0QW#?gA~KPIk(7JIDm zSI^I%s%h<9XWYekn2A9R$j*Ig>M5EtxtPr{*_*`CAR8`84Oz8V)jFQM!QX!WgFDBL zY+AijB)z3zhG4COIITf#>dbj0pv`DnzajI6Ez@|I^Ai(u6VV*=L~dvJywYH58;GTb zQpjwzX*^40KYjkkR?TO|*O)>F1#eX zYPINh;>#t!1DVCNP!Y&YJ~QKbq6p$@Zzer4K097Db^iIQCwCt^wnak*f5I5oO6iKA z^&ug#BFLEonaq^X#bmX|Ljn9>!uSjnyn6S*#K zd5BV4z)6Xn7;_yve%AYUG#J@3N_W#XYdJC2`HlI5$V<=nLSfm5f=JAG9o=eYe9`)ap~ zFzMzFGsx_22!{0KW`xX}g;qU!ok^NMCu1(&vxkKn1p1+xZZMNU1$^9bE<)@ib~=5E^xF&NR*Sl8Of28XR(mZS+kk@HRi^=x^I ztv?d88k%^wTX!&5h92nJ6#`LcVmkJJj4RdMejmf(!l@PWp@=f1breH9SklG#lsR91 z>hJ~CwX^f4rcjX#=uVhVGP^-@d}{2;oGU+d^rGtOh51vdyhfTvlAEIvXO_-PnCack z+=W@H3tbbWYMsKaTW6@*pfMLf&UEGO4fQ9Kw?BCAmiYFb)Hp!5U6JA#62p~93ge!X z6XIr=yu}WK2n$5+5M;few3{ctPtjOgA2nZe6;3`}nbqt9Ah=6Q;I|o}AHu zjOZM?6rv0#x!UDR$`@0`G8R?zrE|+N_TlGO?r+yTf-OCdgS$&X~J!TlU0F$V(Rk=V499?Ikx+x3ZzMu z;>OvC=9!+Ez=mo6T- z06c?EF0z1>M&??xHP#Gt-9_+zO4qRLi zy2AO^2C|+9o=Ht*wc6A`E^swfF#FX~3%jb-If)fwODeI`D)GN~FCI9UTlhAk@2FUc`bBM=lF82hOP07nCp)2?NY z=@Ui2`Ev(|AZ{HbF6^zh({K*elsZ*@fAK@?Xw=_&ae?5}yeWzhI7w zRm&F}Fcio~C!($=D5`)wsyFlqJ#27FDUo;&>Pc$xo!XK&5!kZff-nMaHAsDCQAKZtO1$!TC zXnQ@L1Mc64X-(z<2_W_!UpAOD#>0vW!N=##4Gx|+_jvHd3&)RNgwS+quHs^F{oJ|1 z%jQzwi`4hUt{hl49R!&D2Y>$Y;JZKnpcYOccbu#69Rz!)5AgJ&AxA-a0f^TP!@M_y zY}|0V?2RWk(ijjoa$RqPQv*1NjaaTg&;w-@F%d?3Q^>Fv^Rg9E2}D^# zq!J*u=pa)Yg0pN1KGZFyE)CO|`WkO5q^qftUMiBVDPbZMOhf5*u6TzGAxn>vU<#K5 z?UiZE#{qNF7!7;m$afh{OY^6BiXPei?fKIDEnyUr46yPaDM&}iJ8iosT~-0(;>b|o z%feKw4SQw6$zEksb_W`Jj8G!*iPDiTQWBRz}M25tlQUa0FI7 zCj*Cq(1b{(5F5Qs+?N6S__4+#T32@cZPR$;EE3<*0@7wOWi8x@G}_8Y|hU4O&31^}YlTGuJoUl@O) z*BH58^5`lBO;zt zypDz3(AOWsF>Je6bC+Mc-<(u$@hGqGI(AHdBcvWG+uOXx-u=!%ymmhM(3`NIoIert zgPhVs2DHpjJRE;#z<}}N2Mo9~{^7$rcOHtchw+!9E?`B(usIWhdc{r6xH#7f$}zL{ zM(P(uMtY~FMn*2uNAC4raCXA&agEYj(pz3_KB)$;$i4bAd-t9@d;9j?yB98cO)K)N znRs$o!;1ZN*R~wKu>a;9x&Fs-5F+mS<6XUYv*AL-mKE{^)IJdz&yu%`f&|GkI52P_z?u_N$lNoHRkKmK)%xtcRa8$Dn-CCa$Y z=m9CaXwg{BJ(zTRAgpb_IHy>%rhNNGjk&wgi_z{#0;1aWhKB3=_9kz{F6T2GxIV*r zv3#LC%E>b?EnwpGF-gj!Ilsm3A7Y;RBF}5%c}O!a(tbcz8mD=k{P^1w zU+2ruaZ7WgbiFh%Cnq^KIwy&^WuJ~*Jx0DzVqTF}#4LZ4cm+32BAp{{+}wRTPkx3o zm*z4X^-1x{J2{Ut4h3B3MFyE&&v$tf((}EgqqBWS0DbI?Y3v9xY2~NH>Ex{f`FZnK zTtaS?PWf{#j3xK2_ah_CzGQ;g2d+k*(*PNH5t`dEICiIjbr4I=wgz}%m3d-XOPo!~ zPwZOWfXSRg5w)wsqa#+W+#h}5Q0@K$V%1EAZj(8{+*gk^(ld*SOX|)Pmul`{ zzt!=Gq*Up-B}+2Xf;3fcz_cltaj;{WSF%}?a8nu|BK7g@B6asJPit70sDypf^t6Qs zic-Y!5)%q}N2PL6;bOyL@#89h1eIo`D}g+ewppB*a2!Vm8{iT6b@MJa?7LE_0(MY( zT4*3lKup4%s|X_i#n#@x1V`6t0@2sQpeh2e3sYPlrPopkrF-|j1BQIU*FFt|A9y;kS;#=IP07Oj= zM5A~pW~?H6%_F>SVKrX_y@Rl1Q`~Z|(Li#6U2m!1kJ2mmq`pU`UODpCWOH{#AF0!9 zX(U9R&4J`=GiMz02FNMKxzh6GkRoGylIh;SKlNjL*#6Q;g*k6Me(r&JQasMc6THpc zTkXh*R5Ior((gxaqZf|6{eaWj&-j|W_462oG#u136~2eV5V#8bRJi!S#S{F&j%jhI zGj8~`BiIyB$yb29r!dYk`e(pgmOu24w@Xi(KsV|BOe&6%w4qJoPQQBU;n>fm@&VG= z0n#|B2?of@0GTr?;rV-C5;yrzsg>{Qm1U<^o*h&;urO$tfm4`WMb6iD{DV{3KaV~;uR{j*Y!Y-#$CnUY;xtuJ`XW#pijbP%hL zyZJ8oGMMZ?!{+Y_l=M5O@Ya2pPkb03Pz<35v;2Xy3EWCR&8y65z(?9P_kg*|W+G)A2L*>`ImslNPlNBzedz~Br)?*#fk&X!b=YS>8#`N@p1Z0!?HRBsSL zJo4b3-=8Q6tms^Yad97M%=B5Xc%7S&pifYl1z1KYH`@-@K(X2xYLmlAuN%-w8;O`O zw|#wT1buMI2CXHLjlvN|-5{m}2U#GAvrdChw|@*Anw>cO#ZEsUDGCLjT8 z;gh@4;}g^0g(TnYnEP8u&$=Uj77;t+$|kQeDcc_}A2vAUWFmX*;>BwaSM=hp&Ak{P zI#>Qqy8r$iu{9=Q9(Ex%nH3(Je3)3BqQp>Kz4`!n=tp22#un;yQ>J)LxxwUTWx-T(YDxz5CSqbT6U%fr-tc;33X_?U4K-Al z7B9{a^ENZOva(EwrWNMrFX;i^vBm|Uf8hFi7~O7))Cx>Jqf!q#Phnc>hhYrJg=>L-oKoiEC1mK;&h%`E>{r8 z`Tc&-{Mh$Aj5~NLC6D=%Q@?(q$MgRECD(b9r)uDk+LPln#(vy;JFgr&C0;!J(c8CF zH?Kx5KCL;uWcRcwN=bycv`o^7>lc)7R;?{b4$VqRSWuf%xLKZba&I;iMdpI&KLF@Q zb71PCzckOUU)URyHB;UUe|_^{`DQLfFXawX=CCX3!>&eOOWn00D>5}XDd8;B zq2Fn4M_v!UJ5`=p2;=6e%8E+pSa@vOx}##trW%|t$?rf(_<=kmHy?mC;c`XM8Y4Y3 zFCnL;(_~_7c|_u#2p9nP6&7cX8edl#Uxy&#repgx`;TdB*8uP)1YDq)-CYabOn)=Y zZ@ED$_qbn>YA85SaI%0nSMOf6d*u{qVDkFp_0{P+w#c{F967oBBl+%YRSy%kL2|@6 zU15B{HFXDT>UU5)r$e1|zDUljW3FS3>?{Ks=H zm5GF09+>$fFWVA+{LSCttSn=s|xi%%z)$LN!iy`h_r4_$9~K$p(|uGRsh8?$x{7jdh&vjf zg1)kK#;a-wJqBXWLZ_1b0#NUb85*t+-r7|0?vAu!T&uaqAjbNETX|X5edhOa(x&;(-M5K6V zFG64VDa?i#h+c3I|HRp!0-zbBK!`m=MWw{XYN%c;(AKaW=tTUmJ@6;)0Ne3^Wb!qL zxf;O$z*_sg5A%m2wtPcgOq$s&<#?IRBqzQ&ULT+C4IZ?CiB64=rVQQX{u5{(gYjYw3TUahY#_6FtB!0a?s@7%47;JNL(ZE@wm=rn_(2E#RRc-1_$ z?GneBpSK)Qp!hXyUiGjdf;FEkg=i|hwf~c|1Y%2LG~h=$gbVVXK<_0D&D-%p(ykY1n;rI&H{7An2|4(xl zaunMkY>T9$;EK)#tjSoM{T#&g(hC1YZ_Y^8C8rd`Lqx40p-NYsw=aKh;hsX`{|@Q? z1-5OhJo)CGj7F6)&4_%!N2U7~2&aIvV!%ajfJlWB{nar2(EepcS1VDIKTz~Ba~hzv zETse6DqD?S)k1p|`Bh>59&}pp!;B9(vjM35XvtYHGSSYnc((W(4J|+&pbzGUe@A|3 zk2rs)bKZW>hh2n@b+9F0QA)x`;9xMkP}*1wLWjq2sY+gR{FvdW>fYhSy;C)rZ><$A8}4>q6u4 zUFE7v4FjcdX90{l$nrl>E{(hX)quw;&`zdd-*gPx?$`|P#d^P{nDnQIaT2RG&wcTm zLb@%z4>HC3WW7m%uG4wO1S#qD(s>4i;d*?Wj$))eC-ohXpj9q4Dju^9PnbHk!H;>& zmap<3!gw_8m(b09-}jvrwQE0N{l8&ALg}D*bMwmSn&Dhpayo2F#Zxs zd&_2#bWdaknFAkkjm6BCyuzZbN~1eh0()uVXz)AlvSiecx1rVS@O-V*3q}SuGS_nB ztCp#Zzqf)?^ZWsO+kj*x1xUtnl_`d#0&&QW+9rm)ZLVQsQa5kS7T--}oOki2i2xe| z;+yST^R%I`3Fz~)H06r4xafCdgctd43^VlR!b!q#>>jzHW`~riu7UGNdZr(&0lZOtOJbB2_$v3|dO&27h=-E>WNT02mEd>-m z?x{(r($`j1R#w*PD--3@t`Nn>N3hPQ*#6-aO`B&`f__6nf;^i9D~2Es zRRoBHD=Kq-u5{S!KG%#+MI}rugRah=ii|br)yC&O1c-{B;5ShD7>EFwJ*jYx0sCZ_ zvEi0t1@tlchk<7dItM0nM;?@b9X`y|T^KV?re77(DDx}30KVzN-fgJ+{F9|e#%e%; z_)Z~hhjpQCm@jHTrXTP<8Ssb<`tE5%^SP%N(yG1moPKkDt`aoUBaoSEAQPl7|2}+S zwlH@wrjaL*DVqy)m>z(>Ei47)wDp2HNnwsLtBfjR3_cbY6uHwtHrNOHqjZ1*u#D>_ z1w50$viT4cw*q{BNbx-(+!6-1kpr3jL<2N31p|`+-7vCdN#9}atAoe|bc#w$9|Jeu zc#vs*0_0{tz`V3-6fN;2-bV^H#WSr>0aJf$tHP`>zcB6vM33ny2eARU;zc}8)kgEj zjOht$*+C4vMh5P~Y--%4xX*XE&#xwHc(R9=>>(><&l%DIwC%^DK{mlA1w(3vTf6whXIEVT26iTyA zfW()TdQFu2N#azE?;_|tPEr98$TqUuJxNft^RS8V+dX2t7bgGMkIzZAzGpO&c=Z-k z0eh*Q_)!)KHZ7!a1}`=C;Qjo#2@5cv$rfs&FRi=0`n=rq6yjaUMJc5jVs;_$id03g zk_zqyYRr@tV*jr!%P31Jq*M{$)taglpH9Ex4_T!m=%*FwxlgYEdY??{fFB!%kEF3} zA=2a)PvZo1q_NZ-k~CIh43U&CN$PrP9lMeA`i1m*MtY&kt}#wgy!!g8N)zLNd0XmNYpg-OGeq*n)EM#w>Q=>3ao(g-Pgh(?+pDfPr44_3k`cYqW?Hj2<^!+xzd<_19MO z!#>O@iWQTD^OD~$I4U{z=z(wHmma`lbA0j(2oFFcJ*Xg4e-Jm;C!akBp)iom zI*^{*L}ybV-ChL3^51uAV_*k-d17k{OMzw$c9V6 z1uu#%PxMYI-;%aP1@Yc3TS|aPQC?ZJ1=8ji&}n>K*1BD*Kt993m`ZuhW(YD`ZlGGW zYF*UoEX|h-=!%k33TZNsf4uYOO zuqvkI-=B3yQ^gXlwFfh;tYOJjRk51A+HmT_G7aHOJ(w!6U+>I%e?0bzp{@0b%{ltb zs#R-uAIR3MHV(`_v}gaJeD6c~``6`%*O>=;<%h3}2+x)q`&?6esouNy(4oDN;jnOM z9{7((^4vUBu_}A*`c;<9!t>Yd&p%XWMB+pH_W-Lgdrw4mIHaou1Q}@m z8S)idg=qPjOGKMrnvHsRTkFwQM}(KtY!J>k|LMc@uru8=#wc>Iv%_rGopfiU?yv%* z=W?a<;EKM+NOdo+D2#-o46xomVb=VFG85ta^b>&>gCHY?48AN~Cb$@|#4amL3xL2p z&8#w0nCfY*3tATtxJDKB)j-!mkZFMir#0hD;%8_4i7-?c@E48%DTtBAK=Kq1@Uc90 z!j^~_iP3!6_zu&$kVCc3f%YLY%FPa_34pmAELsilrol!U4SUp7==kASY{1UL!ym%V zhBJ6H;k(7qYEaBoUjd?eU%!?{g@>*;FAW5wOGBA$8L8nlIyNOmyqfP|LbSn9-QNVBjYJxRCqc%L1xd>hkc^h?O{`5 z3v(GxvJNt(tgEcIteAYM{LjAadsYdDm&4xi`_`Ov33*frrFK1n`^hwF32v)F3awM-3NA8?QYuL zvHR5SN4v*%Pwji!PqLq8Ki___{ZaeV_6_!r?0>U=&Txzq(~(g#W0^@z029K5Gf~VY z<^$$BbC>yw`Ih;C`I%{E{sbOtN7je!!uDndvBTKKY$&^m&0~u(m7HU5vW@H)?6>Sg zwu$S>_2&k2qqvEjmW$`oxNI(udyl)peFcjkKXQ-dzVgoU9`Zr*FnNT0oBV+MqWq5h z2l>zPU*#qT#zA!G?l9XS!eN6$wZl<|%MKqo+;;fH;R}aH4o$o#@6C_oC-ZOei}~gJ zYCeHa<2Uo={1$!>q!f?vxA;c>xxfqEg~7rb!b%}ph!Ii+y-*@l3fqL;!u!HQ;TOT= zD06gl?BUqoah&5c$G05A93vgqJH|L>IhHt9IBs*?>G-x|o#O|NHyuB7{L1lxV~dlM zQ&*>+PJ^9BI!$zX)9Edz`A&Xy7Q;b-#CBg{FAfE zMR4(U>FF}SWr)idm&qGr(2!dJ8mc3 zF1THCyXAJz?XlahZqM9|ZhyJkx%2KW?w;=6?w#GcyAN_7KB1s zc|q}tS~#FSswN$=Xlc9fQ}KI3h)3w)%X6UJfPzB?h(cerD8wcv#tOr5!@i~#U`0TI zKm;kk_P3y<5Wp}~v=lOyuTo2a9Hfwi(TF|_Zg^y5xGw2K*Z?XX4Y+F@wA&nN03GXX7oJv7 z3}9muLA|@iZKB3@&+R3^r1NTB@`UKqg#^i~T|;37=NzGR460A`72PqnaIeMtC} zpN0ZK`xE{Jw7_V9p3%X?1KL_qdP1H6WY6IQAR%5+8et=vSZqZ9tF35omV8ejmPnpR zkICD-KuI1JK2-Zrh!RlnNfX#N)dJg>7ic|&d3aB>0?-T3N=;Ly6{JF0T&St4su6HZ z@M}|XdU8Z9tU|#qMuVBj};1&6+TRc02L+l)<%r>#*mc}4plTByOrsRAz zsU7HhDN81_USkp?7mbR*LIC}nQ~ZmbZ0WYj?X}9<)LmISMA)`*W)2kWe7jERTmXuz zjI&tt6cjZHRdJ$^$)BZ7M;GDZsuF5Mob}M6sv2m5+goD1X#Cd*EsYJJZThnVz+`J+ zCqSo4v6;6Vfnw28$a@kfZwbAy>C=N4XD2|he*XEHycw@?JWpTdH1+xONoryItXboQ z%ET=KP8wjkb`liRd7*;8!3$W51a1K@Ku61dyW(TD^gwz5ypVyAM*{g0`!zhDPz#iM zWoQZXRcqrmY=Us;1^{j6jAf#-B9hlAV=LmylSHFT`g4#uo5@Mf$w*hOuZZ4TSy5PA zAsS~Boj`YXOL&3n%?oUEu%0)qy_NK!(#u6`wdPc1Cr#|w&x7m@l1RYF2`MxrJtZtb!qpvMqy z$=l0L#)%n~kor^Y-&?-DR%4uM9ATVl9>Hv^-K*QLs;bH>s??mUdAt6U(uZ;2POYsE zsu7D46Y>*O&SB~ojXAu4*XY?xEqtJ!KmT9Ghf!_m|HK}>-WUdWh5|#0QUDZVpkjhr z7%*;~vrp zWepAp9Y7B6)(L{KqSWCrit2Lt^7egii+Sv;o2GWdt~hdiQE`k$m#-^GEm$rwUgepU znbn!{)ZOo-pHe|>#ujE}muQ3w7-QRiP_MMm$pxHvH}dF=Tn3LRcJCpL0P4Na4s9pU z30a`Fbu~il*0qJ&6z^z@o?lzb+V%K^hvV)J5c+}UZ1#-gg=v;|iMCRc%KLbsFF%YI zNQ4^j3H8ST@njC9lzG~3ZqBKqgze(^tEzr>`5C^qs7q z%_WRlpAV(sDi~wgD7l3OXf`D$Z``14jpMZC8@DBk6x5+iRaTx~RH_j`w%}yKo%b>5 zzxn2yA;-{R%FBy^o+wx}O9ANXJQno%XYIPBAj1bJb|i1#R4#5R)8@vcq-W_elG5dt z-RfR+oN&Ntq^SiQTRo90=G&D+f|f52(j_G&7i0+Wqs1 zZ!XJIE?v&}Pz6cQk0G{j7(=f$@Jrqlh^33t|2$y^0^c6ng_0~ne8a_%2@EZ^GmA@09^CVhZ(QDVtGEBm!6+ql)f|A3oCgcLvmTvl@lsJuhL-X z+(-gPrAd7G1*bC@2nOD1aoUL4DwsoSjg*`=CX^kiZY5?7nl}!MeT}74Oa?DK#i+Wl^F8!OEk5m)wR2o0{1(Hx7pxD z)YvD$J%{bgdukyKP1vNyN-%(LY22h1_K|T5$l&h8#q|xGsRqU#ez= zJf8NlfB(j63xYtN8iLiQu+Cbb-UNLJFTBIkHA+z2#af`p@7|S{o?DRYK(iBo>|-%H zBJ48M?A)W=6Sp%8R>hWl2KmKpMjPmDv9Re4H7{w&Xwf+sn;`*OB;%RH%+%yWKlv@&>7fnEY7RN0$adieZYwh3QYha#SNLO#x8~&{noff{4Y7No-x*oV?#A)^>L zIGEVbiD0M;q}9~)VuOZiNx@#%6V_s<3tCS`gJAcQTHuUo;>1)I8pEm0gf$0Wx^J6TrIqv$Y@VDBwwa18^3!8uW5=4it-Ecb%(RrWWN(!97b3WWkh@0(P;rhE4cI3n8ZMML9TJ}fU3k|@fa$> zWC$bO>EDVI<~iJeq4=mr7Hs{#tSPzVDM0=w{T!UFlsszE50WtrYwJ3b-Bu9V9U3~>+*qrY+{7TYBH4r=v}72_3p3T&F$hLO5JoR#D4}5{NcG$Z41@02 zmFnySCU(oNlwB%;G~zrXfNsPI+)^|=$NumKEO%#yWU*(Y&WwL2 zQco8Hyixko(HEPmzWu?>38D}c6{3&YB@`7G00&FhwF?NkQGx+mX5nuzPsU(?#KB^c zj@Pa#j;RW&4yp~Q&95!qQ6euolp_Fk+_M91Pzw0vyGnO%*#abD(v_*%f|`&&1oq~K z(;NTXo(#P4SQ>+_a4yOt}0y^TAYza9b zhXSMO)xr@RviybY5>-I~)o2$sLod%llNFSkaau6};{xj}go}_y4-&he*v<aK!w;( zN&IFIb6VAVkf762Nd5Y}tswJDmE=)$#IV}$_&vIeL& zN&$KK=^7zu11bzK9|A)u*a#yq;VHf%xY@&(I+Yi|JQY}x4DBXBk?X7ko0|J z`#`#{mtB^9-szQB#8;L!IX8(-qnf5QEolmCTG-5b3*^FmPpRIeQdsaxx z`|APv;iA80{x#;WzTZ6hru3Uxu1>CwuDq)Q$j#`RuJ*2WuC}f=t}>UuT>fx*?()0K zGnZzUCYRrwzjk@*@~g`)E>Bz@yZr3(lglFzsef?!-sPdocPJa?j;!m#9Zvc+<%54O)UH)sh{PNwWXtZ(D?9ETJod*I$3{f9IM|y zU0S}q&XV4r#-o#gJzRQktsjk#eBk%jUzmt2VQtTCanMFfy)E(D@BdSKEq*i~#Gz@d zF7>z65n-14;JMu|&eERtxHOJ6oVB&or3&>~K=b)uUjCMNI@uuPHONv%TUsY;dg^Cw zH@&w$Tg$elfxEzR>Hbl7+~fWE(>TC&ds!#?Y`G9lU29o()@QiX&mQi}aNM`o)#B1R zSuWX2|DLpOS>w>(!}_i)WuYGEtADlMx8-F``|qw!rl9ex?WTEJ(^*^{%GAkR+kf*g zYZ&6&Tgq?Guif8;y4HFjoeIyWOS>Oj2V68S+6U-mtCRWTqGi1Fqy8`RX}f=|J%5Y8 z9pYNT+g)pXny>X;Slfem{#HL)59)6TL%Ehb@r<%x))9I2!sTSIlTD=;>edU_%V%pD z2&2EZjOIz}PA^&(eYV!k;@9Ti=7%s#d>V)Pw}sJq_#>_po_kr-(mK-gv~AQy9q6?T z=^1*_w3cwVi0fn>o9*d*E&0g)E)Qv}zp*0?v)8qS(fBs)_cRW|23h0MvMuGqrGEe2 zWsL{7mt88-*rBYpyr?_mWjdWqgF0(ahUJ34#&YS9H@(`*P+8j0o*r@i;V-m@S>jm3 zQQmm!kK!yBjf>0DPMTkPJl2{Pb?Hg(Y2B>tLi`@o&r*&~=F4H8qj^~3=`3*-*7Pr3 z_|toPxU>v8E^Ga1T6)nrfcAC7TSMbo^R(RS+R|I+3GPo>cj|AwtZ`9Kf0{4aXK5GB z?`4|y_=xLD{o4I~X&$s~?Pb5r)0+2x<94&wnYy@qak1B;W^ZI8xYnj$`);iMo^j>b1&7$q0&;RK?(Y)yIPt#l5ZLRM=(^>QVch_1kYdx&x za>xI!Gs66><)ge%OCG1%%Cn~br%Us~a|gt8f(tU{-+5W@X`ON3r9G~teKf4yf0nhL z?eQmA+k$6b>Suj!Z*ymBe5*_QYJ1+k@LP?1U!!3(?SK87A+z0R@$G1%l-ab0_kr7X zZ-bp=pZ0q@Sx4Eh_Ivw(_%k@`&20AvWA}k`M$XeU)ZDbv67PjBp%A9T1x8K{zdfOzo-`oEq4kPPqbFkf?{f9p% ztF^h^?k|^l;cVGfmV?aGR^NUv$a>grYrl7vjj+8sZY@rjD_4YTea8oH4E3E99JxH! zw}0P$gL?apiHPvE1V#Hsg+_-)Z46!Bd*a$i?UB)4M?>{_-(RBUighoZL zTpQ^-u=l{;{VX}nhzJdi4n-bep;5ltwZ7W$P~X3cjSdab()eL(5r~j5l;Eq43SJ(% zCOB%fZ?IMywQ|`8OO(j9+La-p(Wpd}*0;SDf7d!3h6;!E=|j^8x7D!s%C-N|vrh!F ziHr{IBO51MD_bXvl|{)`%2vq2A=%|C8!ro%ZIp%LZW8VyWy=xnE9)=o3pubsmZRes zSp+`5|40>Wc?y+9BVCjw^>W0Vh}DB@(IVQwU;5x4)Mt z`1tfd4H}fFvluf0(@T|3?3R`#<=9#I_>Z@c)?q zOW^<{0Zsr%fIC10;03S%xc#?s_)h}>C;-*}v=zVuU=J_>xc-Mw0yO_aT>ta2`JX+c z0CoW5|4bGDDS#Eg3}69p{O3pg|ADqn49DF!An`ilxr>=A|?`Ne7|ECWR@o3Shq z4=fR~zT?A7B1K1mtmFVZ}vWI<_%EUx1N z-VuB1=Y)C8rIeJnB*soB7}lI+^=v+DtI)8suN#oL*oLO=#L=H?p3`HZ8#M=!rA(1x z+mo^&?u+k{qG{vIR3S%;NeiW#Lo;Fr!w1xX|2=AphPlC{NvF{mb)sydz;TeKh@TK` zOtM`}_qO0GPkgg=@Lr3-Ck>4h9)e9nfJG}w2Soq&B#!i}mydp=R~tvqpY;d)J{qHOLYB| zCUqLmmh{alZOvG+8#VHrNMNPz?TX(yib%TD9pB1X50crH;lp8-9wdvT06MC2s62Pq z3hJm=U6X|eF5byj=vrp*yRERvaTU&|52`XTnF!alAf~&GwNad~(y;K9ko-=o@=5Mz z`s(tbjzMpUv7}VcW7M>e6MVFW?9#lDc??ea6_mSX{gflBouo?3|8ZZ1NbPV4hU)qS zDPgQvv|KueLqh6a6vfwz^WJ59A3gD&-Q$WCZQa9kl$3qL{jgZf{etTB7*DeNyK9_02&)phNsFCRbML)Q;i$p^G38_|f8;C|fggVX49xtK+dTUF=Uu$V+)yKe}QszkyF{ zF$gq{^HC$ChqmuA^(pe9%6XQ0kvl|B7pB>7reH~Ng*!s zk4WlGz+keFJ{6_*B}aOZDd-al?UpGCv@C?=rNYOBqBrdG^=-JVPZXLI-1p#x%h`EK#4x0YNw| z@Nd1N$eroPsd0l}))bqw3f9#%BRTa=0|XN_NFgko(WZZ|uVu@R>?l(HlC6SYLw zY)G##!XmBYgU;2r&L$U(S((fle-pkQuv#P>OnLrOo3zZKe;!OSiD;yOomI-VH;qTE z!agoYCvK|ar(yY)5Ts;Pr5Xz{`6a@uR>)D-ut`a*fXE1IJ=SBT z6~3m1E@y|^FwaapzajS5Jj}MWDak&^MZKk9490}MA2t!DT7HGS{0)vXd#(4Rk4)zi z?7qwgX1q>zNI94-ZbswGoco2Nr_b)uxw49P6F2z#jl(7V2Gbtz0+^ z?tt?R5|P-WM~dLnZcrd9VtL0f1&o}{i`V$ox6|(2G+S8TSaa|ym0-?~&2f|ZkxpLP z)#-0Ut3|in_b6*+YFWm@#=|t1#!s`vHAhSXg6XIo!}S!7&Nik(+Qt}0>l(+GQ(=&Q zf4KV7v`*$D(>brO( zXuDmsKrVVmkXJ>+KbRwDxkOt?AF6N74>f6)a}wip+%u381sw6P}c!E`x+S1Ot(~r@l(*LpDrTvvX{?%3)@6 zCM;q4)B5KqIbkx&>ij?|vboS~?7B!jkwgH6;OpI+UGJGVV(qR41U_i(i@0gH46p3G zE$vuquK@VvtC@*oQ_bEAp8OZ4*HuhT(+f@FHfhBG_YfxZAIn8Ko-k-I%D3raJ^k3M zWKxl>LAwb0o8;uf_)nxA@&`X6Eb4OlA&y!yU-|a*6`hCRvOScM{#1- zMY~SwG*>svuPk{&`DsB8c1<1x<&JyCx5=Oa%}bd<28}Fl9$=uf`(=qh6&1}UZnWbu zXvgYc2OXY&@d%NQO%lB@izfKY=jp$DH8hk$kEv!DSJrL7?8gn_3l=Dc5+D5u2&Yt% zU?H6i(IRDTErb)KV-e>HS(uH_EX0#FEywwF%P^BGB6mz-794>6o(GSZ^jZ~FX zHlymrW^dqgtj?WJh&zzv9&+ik-vpGE#B;aNiO)e(d-_mxAkrA3?u$|DsjX+NC~bCJ z98<-BL49p~zI{L#VA`BAyXAQTU?+!=81^Vh3CWe}P7+Tg_uy3{)Cp*hpng z7JM)DY5KSZGpqzxhWgxhC=P-oJ37{8ve8IJ^|Ht8`IV$w> ze3UO;yC$HBb0qvP9+V0>dZ^D!H@S%Mn}Dv&0cWf_%~1m3x&0pC?*xnzncdJLiGIp= zv`p+TS`!q0zOym!Z3EXBume=33pA?zH~^BLF{E4326vh9k!=r1VpYK(i`5^q3dg)p zf<^>bjJFVWBe>^+KVxAr{uCnvbZNw2+wA5^lEHceC9IL)GI<!$FzXbB8i5t?7^w5~*(I0K}B>Ns?Y)yhrYhUE029rwn% zvq6tyX}<6(Mv!6QSokj=@0A&}gh`W~?6g2|v?S|%1PxIhtauIR5N(+dA*_qgJt=BH z3U1FsVHUhwdl4iW?hApR`XY98e3D~Q2FbZk1CmpPVrRaT_MD|5xS_YQ5;R^`UJdQb zUA<9W_jDUN%`3rc`jwpO?6+m`9=xw&AvA|Iu*)od5?jc}gbWMBW}4`6Z?(;;F_Hmb+o4k zt$BsV+x@eoNf*4y7wiDZz@H$b$P9+#!dRBGl^b&08rc@0ecYrR{uVv`C(OaPDa`Ss z`%TK_hcp?IYK#Eamn(vL$01?8!2IEli}`ZoNyafy~}xL zT^qg;Lk{MGBu+{N-GozN0Jg@jvs94}df~T1=#^>jEx!a%b~7D%B|?>Q$soN1+;3gl z&qQhs3bjsbp z;hUYly`U8{TQK=5j2Mvu;eLC`#AM-n!>6y0a-nnm!rqh4>P5@MX>s`>0~Y5~8NlnS zzXfN1<@S}Bd)tOx?5dbLB*fun)_FuYd-9fpW*eo@my_pIt@er7eZPPe9qc-m9b;xL z9XiN3H2I_bR8;m~`szdC1OWoN=i^;A?85sES(?Vb)ai)LVS!vt5vkEOX?=`WQY9~! z76wX5y}JCS*yG~997z}`fi~ZY_t2^`)>Eg?oxZ6a?dLr)V$hKKOseL{x0@zjD($a8 zJoRq$h{LIKjW;0=BFw77c>D{DDH<{2#LLUH7@v!5gi(xF#n2=!W`syt6Qi9o4ntWZ z$LTXZ(b)FwzuncNH=$5+1hCMh#!i;(FJp*L@iMB6+UZg*@ZWv!_R9xSlut?0_XzTS zW4R@mceF$;Igko^hWM#BI&4XrQBOH*xa@7h?inG3b3=U3Dr;=Tc^b4;t`^I<(Bglh z(?4dzi^(l3oD(?Z0(qjJQN>;trBM$7tX8}PljaeV29Y2Y(6ZWiJR1w1tz-M7wD;-Q ziw;?HmVFgH;_mTa9$uM_vC`W*|GKc0HFFX&t(-{fRF+8} z@ebGaElDMQBSx3_CFek0K2OHaCD=wOmaHa%;8C3AnI`+GUV)#+@F?(X2I|Vq2b8za zVVe(xfV8=MmfE=13p)=#Cfj6Bpik*YIKgX@NmZV>Rss*dQ*vk(tAJ04e?jj4yfjVE z@@Ohk`p}%%t1&+t+DNF6?MEX)@p*8N=uMF0912L017sAHQJ}^ICZPwY>97d*!=}*Hzja^qr4+d7GR^6tFhuvRFlX2{ffuaqblOkV zG)j|x8o8Ao9YDnx-%o0obsQUG9mJZ5mxc(&YC$bjcp8U#(GOmCE~8|LATTcCrzbAh zmaZi%(}@x%jwj_UiO6X?#M`H&6B8Dc`hmm52GND(QMx37Ng;#>F~{kxi5z){{IUF~ zgUM8$pd31nO=qZ>^SQ@Gx$fCl8S1#Eod7!fhaOcwBhtXB!Vu<`gz(`8qR@RL_-X4e z5nUpS|2~<@1v8;y-6Lr{3;+t7_0`sN&5Pchs9|FWBqL;0F$!Zan(ML#_n{WZe~#>t z7>z4d*!3@%b|B(N#B_>~ng z52C8p=2PPGufp`EV^V+-85DkQaSM~rxeq6%s@i%;*%>h`8>i8`SINNCbY^X?bgL9v zVRg(-v3Hs^Kw{18XNrcbLwe-7C2(eF<4|pOsx5DOe*(u~;hs($q8;Yh;0dOB%D>cU9#klLpv8bV!S|xoF%fD2++NC%APUprGMe8H{IR~%D8xYX~k z-~4*a(Jmhu>UM++L++!rG~T&IHhX`=scLHzPMQ{tIaH$q`o|?%$+X>jITaf4b23Vw zinfviMLWvTdJwRh$7HWKi}Ve!u#u*31Al~V8H3Ify@SRK-A_!|;h*%k6~ln^C|u>m z$L9nz>BR68`do39i6ZlSOCgO1(%|0_FbJ5jMC4)7mZhcHIF{mNQVm{t>jsZDiyu6 z_Jw+ulcCFzX?5p%}fQo|SS{ZuAbsWmuM9=4honv?P?0%i7Z+ zx5^2x-cV%F28tQz5h`P9UVl(7*~?-{s!}59WyaP(u77Kcpy15);{43sI-OKSsCdIbtw&Ue30(YX@yCRv;f7WJ^5<50bwO+B~i+C z;&Lmw~QLzA$$?W*hz9vT(al7&?9e}yIvMUg=1<%Yj#mUXe~NeX6@l7T+wa#e7Ws@Py6rc4MZ+4thjO@ttq zgC-l@ihsyZE`Lf`b+~CcIGqVfZj!;uE~c>8_@SypvA=;t;30(5hTm(x!r-y9GNH#? zPtP7ebC5ekGSL#{^h%s0=3oS$p=H9GA;xNakfDwmKdCWXK%IxTgda7M3M(cordrS( zNnLykJ&OA6I21(7j{i=msiAo26FdzOCP|jokQI;mEh?<2>?xrY(i#pd@PEo@H!Z_X zC&NoF=YF)-m=1t^NxF95Ji1~QTbE~I;JTYjaK$@b@=~dW+Jha%s{3PNk&N3tR72sg zU*6I_{I?sY6E50{k~hSyO6;r3lF@`u7phc^<8_k!!r9@fR9n9}2*d|ft#;Vl5 ztBb(4TGy_*yr}iOffw%y2CK4@FbLRJz4qX;V(YQRM$<@VB0}qfTi}(G5)6orC^E$8 zN$G?|A(0m?p|IP<0j&aq(6EB*J}NB6MD3tyBdgl&2h2Are`Ix&DwS5qkclZbtEejzr0WH;eig2#=fR8;0yhN}=mMe+j2HJ#60 z+D)(WAPho%;I@`J9AwhLL~n9mBhR7NK_J30&SDowjt4QMY6d!Qt>ysDma#=xf8~!C zkFpDygoMcF0+HtUhH_Nl^3sxOGVFBjd^t!`n*?r-?ydQMNNGB!oK0r=u~%}i%FN=J z$u7Mh$StZVr|Q|pCrJaxPl@@(2yA|O&8gBQtu4s+vL5TA*kBdD0jPO{mnYm~l}x^# zNOvN2aZ6opt`LZ!4KJqC=DC_u{?i2#K!nL@s@uhypE?n7$bbpS3zzHG2_ZfVc`3v2 z^x4{))KUZKF5K+~*DP}x!9G4ULwvo?S?Cdlqvl`85eg5esEuOCritJdMj-`AP&;K5 zS=ILEVDv~pEOsNMRn!^aSZFj)nnwYk`D2MPpMlLU392&T;gfgbYVli5atT7Bl!}~d z72{rJSYSQbA~_RFdb_al-qF{E>^8mtAIjH|CRC_X!WiRe% z7q+P{R*+6#)G}*{pU~Ub?=q=Xs#ex(J^#U)C&EoNq4gQ_f@YZ0HuvEjfk_>4c?(c^+^1(SO zl5OSLJc_WqYU!J*5KPh1DB2g+`?XEEp;jvO_&vmWqQYIt%a8a;UJQal*mj}BsooEv zi>UUDIvE)QIF|GTWO(H<7D)wZ#ec6L+$kJ^=U?n90BtjxI9(D6MvLHx=L`#XYze}| zSk5(8c%L8hCyAgJ<6!b(F|ecxg&io{Wy_n#^+d4MTp(B&AYZJXBMqRp_$w;0c$Nkq z-S1>;1eef(qk&Z;oN6)ot&x`Tp=V$(%EiK;wtK#f0cZ3YM{6Svb;&vWcKDXzNV&U* zQD2;*qV_bl#cOEd>B~XyV*`(#ok3}L9{3pf` zh)4RvIzmq0^9-Huy)P9^Zl|6wM3hrLW+qbi{I z?KA!AXh~Y9PNJ+mPPrCa<&E&q3+0pK>(D9f=X%+Sni#(-@kMARd*bpHbCs}B+8705 z-ru+EP+9uc2z$Xci!CuR2j$tr@K`N(N|8Ur`f*tqSL0fTY^swG{wG$qvzfSVHT9x0 zifBn5M>CmRV!I&!i)czSX0Ex7RvcT~Tji>JfFgzZbcU(Lr5TFln>`-9 z>l8C`V}}3ojE}dNWMPoi^aKQJ-FOo10>S;xcPxH=rtwaZ;@`01Z4mYL~8d|cpYYem6(FAw$o~OV1GQ7LVsm1N%>RI}Q$__Sl zl!Qm*Oc8`gP(`Vad^b1u*x`-o0R=>M3A9TNzVT7#M1`pHgY|{K4-C@mo#IE*md}fv zn%#)~t7krP6&~57-hL6^-W0&2&`?!EscLX@E4Hx-*B#ZsUDFQBlzW<5R9Y1lFzNhE zr;i6K->br~pwT6nrghMvfn*-bk!FF0!Pe z5E8s|f*YEYf)(BF06$P1LTjTi3Be>!uEkK4kKSK{Yv#oC(Yy|A>m|@fh0UUjmb0f? z7PN-hl>Yv`yspwQ2<&CWE~x(|qOPjbEP-DUESpUk)9qkPo;5;2Eye1OVM@ub;>t0i z<0+CJGImy!hDq7WH2k5Z3P#Hgy(^Jb`qdu{(L{II6u2>CBut5)*xDM~==<7L9O|94 zO(Cu5H|j+b(H{xw9fR{ednAoNB@yBed(DW;m>bC0>F2;+J*Ev;j=FKp3Ta1xc{}Z8;nf#d~H?sAxxkm{np0{!@XK0y_tG+x@dG!r_NX;cAb{!SDykswTwM zOu|ZKt0`csLaqj(5!ay(nD)-7Hjhg%jmJ^%_7shEO{>aIcR?K6%9odbQC3$dTWEsHw$CM2@?pds7}zFtqUdI<@5xmtOfDX6uti;+HngFcphCE-8(_w?&aKQ zfzK`3&=II9mdn!3ZAu5FO>}eRU7J?}Eg@iDOq!)A^mnh|6lZp)6iYCk@eZ?2ER9}D z&cxwD_*1;L0Zb=*wdN|5=2$cF1o-UBh^kX6TaE1KM5-?fir3%DNhQnO=-lz5sIqXJ zU{i4!1h%tUQZ)M8g=x3J=V&o9@JSkNfH{miR#}QKFlT~x6b{b##+?yoN`P!;Cs+yn zgnp_Z>XkWrH5O_`ue9hDe8Ir6KsGCa^-!)*qhF@-pCaxIL<)VQ^nouINQ-&u_@!4i8N|+G zac$xD1xQz;D??53a5|G?U~iv8CQ*odfL*lOj3RgLqUhLtcXk-v!afZ{BU6H74Sf}L z`JgxqjgQMPQbIcXoKoU@lu#-+MX5q!xZ;NE98<3$qsYK1Zr`N3vS39fyauxFUKK{; zL#Nt3xPYmYvV=*4{{diz?1O7F`$x`PU|{5%XxN4hblbc5fTey0nO0&`LlsZ=LNWlZ zDG8f9k|1?Pd45SQLu>*aMch*-Je^yJ80(PZAiVuH=092}dO56;0CcBQTe{28Y(`&F zf9^nh)*{r9+Ndjm%8WbSo;{7{3Nl-nfa$YY+vbIzVGH}>NH!sHakwG0O6}2nTgy0S z)`Dm4?VU69c+Dj?@oe(wF!M zRtQbPzAQ+2oE^17q6m=L&?P4@27M4`1m;cWLN(@6AO@S1O=p&UWnFa2vx?X>l>l&g zy0DN8#t&CD?x+A++~gbO>H#v{nXOc7&qLzsbHO1wmAiW#=iyh^Z%Z+ZU z+@=Y<2Fso$>X;31>cs#^ucfOHDpA7DqOn|wM^5WF;?QI%n(t$a1r1AB#*HRhIpy;7+LcrDC-`p znzsaxHE=Crby`Xfb$bZ|-$npgzQ)>dKfElMQBqUh%U8B2ZdI&R4?Ayo?ooskR#9>* zCp(HPu%WZpmz_daj%=h^J~H6SO6wX)=;URDnCh=Ycy>}2kNa&(oRm_g`MN%UiqYF$ z>qyCN6*iPLeULwc(;by8o8_%}^sCqbwUu6c@o zHNDFGBkuV~f4^CFlgaFYWn~Jj!UwpaoD5trVZeaiO8uqujA1Hx@6o) z&$MnUqRCy~t?sHYEmrzJV|1lZnX(W((M0B$*YNaAot`U|1tMccGZW-m;oHm7+!&b> zP~Of6*|Jy{2myptO}{9Qq}(+N!BC%+o7ASca{1&~>3OeGDKGn4N1cz^1X&%~CM@m7 z6*jM0Zhzvp<(X|~>Z6#fCvnbVb;cY~xY9HImJ*lbxCZUVItSzc=n$m_n)o`=}o zYV%oQw~mOb$85yb6T-h2n8T@nVW~E(;DXX5Q$)1(ts-x;b`S%`q$`x`Zudu!IyxU7Y~>g1sND_2CG9 zWshrRVS13TSffE*W50>}n)ug1|7!<%u;=R1VV4L(T^U^dm^F@4e6|)X?Kmg*k<)u` z!L(GfMzELsi7oXJ;;K6LLkz+SwudZw_?o^i9$wukXig{?C)+^CQvjdI*f7;ZGD0R= zoHK{gxlKqx+XOaU3mju03d~~Q zJqbvb19g_MGn(Y_a~Dc|Rld*_#|uyLBvLuE@~5wI&1{JPuNVf&S=?ibjYFCEi(MtG zXoiGirH}BTvI6wi1&ucUYC+O6H-&cR;3=Kqzow&U%i;KrK`^B3q-==Vx1X%$n2X6e zRZ+R=61R;a=_V+DkA<^9`SGS~2g(c)IYXQ`qPKq%+8QlYDwL3s)t^p2G)=cT@Y+TA zRL|_}0BkZ-&kq|i(UN@^OD^&e^_$eo539>HFEB-&6)jIu1~T47IZ(XxEzV|Ll~*}) zCdxO3%CRf@l49c8>-+Ot2zavba{wA#S<`kH3!J+%E~}ygc>96S#`XwiU%efX4fW}n zENRum1%_MCQyPutcbZKk7oFP>L7^^4KYmWjr&F>dXvDe(Uu-{fQ-34sTz$Jcn;wTs zMWHvewkQ(9)-f_9v6u5R=x;D>`qz~z2w7Fp8$@9boLGPXnV_uICMP`G_swzNAFGfgBnR=Y%&@LgG14TfP z{##Z)gG6-Q$6tD%iRuclOh<6$cIemg>g%;B3_>cXch{a-O^v3XpMO1KELOmGPcttL z`c#g^-}2uy5*QII^lDa2pCY|SykuSnLTHzi1K-I1~Lchn(t^55=! z3H#SM1y7jH-hQ~;$JIn%kQ{FcDXsF3L{rP{mu%j;Xzbjy2v1`XYjcfz8MjqE<}V;x zmULc7HjJ8Dl^rA8p=wPDK$;e}sryoj+`7?;oKyh|h(Ebc))GnoymCW0zX6g4G;?quKjDV`9PlOo~ zth76n!syqg5!Y>yVvNjx>QvU5yV%sZbQwhW#$-iL3D0~+p8yA$^l(+{@0Y8w>C7BU zqvBC+QOVD@#)v^nq+2H z!+42V;)votWB|RpbUL19#BvLF@9;WMCDMPa<&tX($63tEmmlZiO7f)zIVlSA!~AG`g%M%~74aNO1mdzc=KVOg7#_XIj zGb|fus@QkLL67~f%$l+-`8&)i#+Vrn|3nJv)^~Q^)OGu>U8P+K-3;=0*PP<|JW#vb zWpj9D%-G~x8dP{Wi~i}!Wk`U5htOT2Qus2$hWOJU{TfnR7UbQmprs-z`7dbp3Cn z70zOk88dhG^O=_kT^Au;UJCxPfKO+mxZ{kW*TzQKTnpn%vi7^}cn@|#B00-&=xXmM z=HzT21*ULxinXsX;G z7Ou;#UZWTzdcktnx>V^Vo5O=N*icE}h0Ob4O#ytC@mn|Uc! zUo;nx-FVCg2VJyl?_m%nVU<%b19oA=0?(oHj99WY2h==+=#xFFNg@5l)09u4FJ>qT zQzuG-QIv1l!6*acRR3lhp-tPQTDKIGuc+Oeo0!cjL1L|nn$O^w`vaFlhm2*K(WDSE zE>_hea2WnERCTEcWn*N-C&}h?0n3lPQNH4jyrm=icW27{vTw-{X5nQe5}|5*$uEPK zW-CeH$*yCo_Jm7MHU}k%bqg&2zRraBai`WmZ6ZzwH;i2xHE5-HswWiBs8`#qrN_*x z+FdU~Q#cZ1T56sqIB7n!GS^s$H?M0Jub*DlKT8OKIsOye0zXaY4QO@tWV`a=Uw;tN zSi0KY=vS&^4UPKFaDNDk&11&s)!cvSUREpehiVsl2NoeIcepE)lK=Q3>XDCENLJR! zHgrM~LNg=wU%N*L+y!~6DOH6HBb+`l`vp)sdc>ZgcT1vKco6Os9ibu1}| z+Tt!5g?Y$v18OT##CaA&UEatK-MPc;ifGvP{e~o$!ZGS%%0Z=?Mw7y;IHuMEk76T> zA;ge>;b51eGJA}3k7>byo(b6F^b$bGQI#U+DU*(ihMP@YQ6P6&*aSq>M?l0`=g1c` z`=yzFs8!#+Q}co&JdYL4XTKEsYe2S1RLT~VXxAsfWeM;`fQ3<8>=Q-%H3Hl=bo2oX zs6+t1vz{Utk7xpo*iZW*2YKX#5l~U=T?<4z>9RA#%2=Yh%-Ah|Pg2Qq=l7nkjJlKt zsLl80Eg};+g%cDym`lZ)&{+1mN=Wu7R}=B#gTMVrlL9NW+E@bp8ik;NhJ)rUP%NL> zy^HM$UL=bN znkhNidTaBC8RYK$qcZ%lc=(O{XWrH)`Xu9;^N~hM8uUtx$l1l%DEePBR;BIae|KMK z9ng>pjRIG7bjPt_6amuqW&WEqA$|7mz^u9Z%#U)t+rfUuHf zgMhSz0nuQme_2v+K^cffjj=eX=x_mDKHUW5txlJRZo1`b2N)Fc5aEUG-~&ssE1%c2 z*gn*>@01A`jaZlj=6oGO6c=0pSv*M8RLKRxKUzhE6C z$|}tTWC^|0e{P#i5^PiP0XwoZ#|-pu+}hAHo!z8EG}`?TbFLqcv8p8tl@*}_A?9)C zvSUQw-Wt!eXx;Tsc8hAvxSP3rOem5>H~$%;77Q58nM%FC=#^XMz>&6mH6sbfBxv4* z-T!(c#rrrmI722zSFQ_1^2)o0FAWl_Rvv&)%}>>1jFYMwySw=H7A4I-Cq^->PHMCh zDGNpzF>4n&*v2p`e6?ktu{f!Jj={uy!K4e`pADW~qCU=8#<~sg z*T@y`{a&E2eH`ApEn8@$i2q;H9&ns0^g?)jo|8h)+f9zX-jLMzT9mefyJk*h0d$o$ z5D;NmAqreWOT4N*dM&^_3`z(7a}ojmT;jyY`XyD8qal?ksVPc2Zi|PfLgo!-yV&(y z?yj~wg=Jgllc>b$Kx8vspm%SUhC#sqBz zG+A^6zl$_{oR7T7g!mB1!%qPm!uT$A*VP&)BFtf3gvSWH&qDH>G9{rXu`jHA9@j>< zTjrjl3{GrNnB_wd*Ttc6f8~jgF8Y@l!9_RoV!r47xA+WOao88=+d!1{Ts%{5$$a(U zezX*>r`}|5a(ZYfi9|x_6}!~{*2!_PZyM^aEPK#{-;E$w^ijr~zi|z#1-MMoY9B`TqMgzRKYqk=I?x?AusFOliN?qB%on@ znQb~M(NOzfgyhWI;7-)WbrJujt2DXXoeB4yHm=Goo-wcpcl1D4djtvKg%ZjBsuahR zS1k9Y8)a0abT`RR^oh~m|2MRP3Fa+z$Xq<{^NIc@mYO&U+I|ofG>Po8`1B2CNv^~| zY+WP*cQN)|`PKiB9h4L+5{T3clY~Kf2rb$*c8x}@mA-$x^wsiZNn~#Z)?vdU1CZLk z^`me#C0h|MEWKVB#Q<-3I(K(jZJ2-sy1q4rKdla{JxC(+!z3~MjkA@ia174F^Cmpq z)w`1T`>t<+s%8@GV!WK|m4+nWA}|#sfE%I{Qy5F+UFBS{f*`bCMG(S75OhK+^~Uy2 zzjwwWA|B+aToy!sqBU(mY<}MM!)?Yc4O4i;cD_749kcXbUM!{peDaqySYKtp0}6K8 zMw0Q$zQ~@LTbj9l2ABD`i8PBxAx<8};22FO2ep9uh7`jtabXeBSk`pxGOIFjEk9S( z_gTl(UoPhWcaC|@jEg3?A&5<9BMq?KqQCrCI-;WS9Nahs{}m5LX&3uq+~8ovHHp77 zp+5H1BMg*3ooAAY$X%dAoJXHvr4$}yL)$K$ApevokHDacQ#%QY4pY56e228JmS4yg zE6%|K{2f6I@4+20hap5#7Er}Ggc6+gZ!9zcD5n#r=^1NX@!6!$WN0D+k26A)D2t@7l2mQO0>(eZ% ziz0$*cG()YO~}3hs>kGdL=Kz}t%!YZWUzF7f!@J2o)hbe(>~@nkgP@u?i8|54+*Av znAxlRL{RC)I^u3a%_Zdvd7!?s@00Ls*<%S5~9r$1bGk+(oP zg6--P*-SiV>n_LD66p_)0wumON{0@-H=awc43Xg>tbd1!=;McZ0~GH)W!P13+FCsP zzC&`%`Y4lH==_b&;xY>-+c9ejY%zZriZ@O*#qvSGIEB5-) zCz9~3?{)peB=yEba4EHZRdvpdaoB)dTDQhPhY{zQNu%;b!U#QcV{xz-e117hHt-E< zy(|rhsR`WwmolsumQ(0EbSZ^tIdyWU1?ZdA6msm;Zps%F$C>hNWvxd}a1&<^2NcH5 zF9*w$k>He|UdC~$**X({7zt^xf}yglb4nExr7){$ubqJBNRV5Lb5~^}mU~PohqFH* z`ccyongz)sG*CaiOWgh6nw)ubh%!3fttRL9$$!fsj>%{vymYFXs&xJZP5kZ-z{*g3 z*y*W5YRr(}gQY)IKI0t~+}gq+B}po4FqEQz&qAjvI#mzG#(p}Tvpz&acKY9cZ)s!0 zm$SRvp0V*Y%XW@sk4#Q~o&?<;vcL^2mxJRtC#`|8`nQA%Z6h6FJirDXXMXz~%-iuSjgX-ov2 z25Wy(yPV>Aqk>gD+3jyi|sukY^LlzO4jiG}Bv%7Ik zN^2mIMmLmyY@`o~pSHq%2wk-?fBa2mAdbHN<-yD4&SI+r|JsO!Cm3hU-N*`?#Jgeh z^xc^YjracpFF?@05ZSzViz(2BCj%uf@=y8fdV{KThu=ci-WMd(g@$5UgP=X##dycS zi{*MZAho&$(iaLJXaHyH-Vz=f+O*;iR3M|MlAJlYlqrT zP{t;ds1#WCr)cqPh|k)!%YH5%l@vE*!8JFi)qj?3w8%@e{#=egpq!kPu#xq7oG1JF zQk2XXEHIe**eY&Tq5dHnN+tpMsbzPK1J$?qAjEX%bdZY01-~QHLDY^8p1>JmrgSPR zm)Xl+lX0U`SqfF;0>IfZ6EH!_a3d<0SZcay1DuI69V)H;p)mcLpnPQ~uIxz*txWtd ztuk0Mh#LvS6(bTb!%1QMISv4aFAQ7iGu^MmoiL(14h7O?3q=3`-k@aOcN)GR!-0p-?DR5_l1&XLLCD3Oe>6x*!Y2Oo7X0EsHm{Wp((-KAc&spz`t_-kSb;9hntB z-8=)q`_~=%sv4uS+(rvy@5U=B2>emye`#5M0#!Vy20-#U;GoN2F(ZwX80EWdjW9JJ zVsNMtop^@2F~&n7wsQtnrgC-^(6T8e4cLV!_UCE%;4KiCO)TdT7;^=thBbtX>_us? zQQzZQnt=Ry2n*g!7CB$ZkO3^l^ayQ@y6tZ5LHd~mvne}%gZE~pw_+*lKymVYL!ASh z23~MGAM7u>fYu)#gh7x~ChxDy782;vI1t9iW zU;`-m*kyY?`nck0TLi<%`qJr7mAb-U=Xs+M45k> zYmh;=-Jl0ZN?1@xBFZ-{Ru}S~7h^_DekLd{p(&R| zZMQI%0^fyJx&fU4`_G*af@ENmrqJ(KBpD+ZK) zd19YL`Ahh32NX1u8u3h~4c|=kLL_QOD$K`m_EI3zbnX0$B+*y26jh>G2_muLsLpc%Da06|H+BvI8sy&L18B=cDa&me;=;R0WDzEA?m63Y1 zQ@(y=lS8KV&@)<(Vm*s*QH5BxYAjhrNJmcKdA#srT&#XnfHsoEj-HunTk)aYgBYkU zDjR|)up5F~ugP26#Hw-a2NpVYx-rlch-WC8*HFcI6`o}(+f}4q`#g3 zvmt||Fv257>3gK30YI}6fMaQqaZsa~n6@c0C};q<$&m=kEl2QT;S3j=QD{GT6tFk) zyhU1+e#?>K6lJhS8hC{+)y+aSDJNlnYQ#&*fT|R`--3M?77>XNj=WL>-qS9JAVbGI zPJz%eta;D^zkw@%hi1_+%-;A0|{_QNQ@+Owi53e?*@!=n6k=+ODg~!;t6}6TUupc-$GcR|7{@S z=+HQ*H2O|*wp2+Uba8$~_+w^vESuL}7E_Z9K{Sg*(=pa`u^+4Q3MS8^AdhMd)GuhaBR3 zSocc6%v7GhIQx07#2zih7=0Rsogw0>5WG08c`$JGEMcG+@|p`n4v4faLmc1){)y*L zHyn&A{A2~_nl%(9f-v~5{DVwT1T;A%rg6$~{V2o|#802e4aRnFY*vY2i;4;iJTJ)s zT3Jbe8gxlLsk%$!P6p+ahrMXHAYDLLDcK6JS$Amz75n^N4qv_jNT23SExyfAW0H_o z{1T^Hx5%pCVjpo1B(p7rOWDCy^ryA7bdN_>B-=z(Sn8}(E0cM}F*o(r+5P~4bvuHC zHSP=uNAJ`ujL8wD5mNxWRUNB4(>W~xXt(s>L?_=a^ZlJZ_SkcHtf950pK z7GUgW#NvzFq?Yel>odelAnm*y=BQMY803O1M~ozBo|k+++E~3~yj?>HfvvWV6jS(s zu_*z@jE2`u(&Q(JBP^^_J>EKyj3>j_V1G#OQ~5s+?R7IUF+>eh4QOtK-!Nd^X5WNKvO$3767OvM)UerT<|;%an4j z1@ogI8GVjT5Qg)~QATLp3rm#dh2w}kq9K8`kOf6swnOoc0(ZV`~+ zgv3P_!h0bS0GC-z$X@`-@o~JlEdX&CJGLWdL0JIR+E~&V%Z0M&kXQx>HZy3DmJviw z`%hK-$JnP}H93g54-*K;2lT}84+ijpO0^>9ogsD4N)Uv`mpEEP!pd6!2}I5ei$blm_CgJ8 zu*R?rtlp>?LJ*xRxWvt%+g8L|cA*eV3S=Drro9TQ(-o<(tO5aT#H&Og z)&Vgpx26Vlf($cl;^>wZn)68#18c|076OD4rWjjzN}f}%v?8a<)oxX7t1lV+cSxoD z6t4bydTpRDQtB>t$vi*cAz?+?nEdXDyx)S?cY}Dslv%55IFv$ zU!WWgZLy&wFv(ZW7=c5V5y)gH);a(PYcrf5>^*l}DiiFBm2CzK?y(R7of(ENdmXf$ zl!1r?eM9Ei5{Rj2V!7`Tth@^u#+12^EhyzY-YI?)4LDABRt!EDe=a3(MC#$Ge$Mkj zl-rIhJTxtLPzORStsBP)ezL7CwpZeHLRj;QOJFD#jR6b_%N`_;lr--Z@-6omw|2GILn&XtqIJoYOP;Dp4P4t4J7&r3lKn}2Wg60{MbOs>SM4L@w zOuLD)P32u2pHa+0d>zp-i3zfh%=8n=B1Il^Y}6Y(M7S<_AdiUxu;c=%^Cm(U=jK0} zHBQwdn%9Z}=58T>*lk1^6xzT6u3pd9UJ0eRYRQ6)1RtNr)ALp$zpxO6u=>^{4^L}! zeZ`bOj9f?CR(?Z6`GnV~5Dcd-QPpnwu)%hpWmHc};d`ozM6#UbfoNzsqn|Z9U=4g| z)}XIR4Hoq7I)NCX;2*#`+7S<)?3ueg(aLV>*PGb0jrpmYn6S5rho>GH=Q@P3fiVt* z=5sKyKUyu^PVk9{P(2tdO3XAnnxl7_ekkd9@e@5T2=XRaTnb~mBM*Ut?h0D}DuL$o zA=>>xCJ|oZjS}4C4&WRbVQeI%j&oH7*{w-;VY5iaFFqf}%)HIjJ;?M76mnpc`DCp7 z2@Dc~P63`u7t{S)eej}?v?fv&A9A92q+j8w+0Pn_Jiv67pVQZJju@^-oCAR5WC@2h zl>b?08Mq0sMuM0aCmY+vpJ~zlWQmETDaq0Nkq$bP$gIn8HeHIX(*Q+o!b|p@hKHsR zvsz$CKqM8F`f7nL=$u*r?Z)h^HxNMNIf~6-%R$ttF_AfCa~s$e{oEHZh|?J!D!XBF z34SSBptAeUgSChKuDwHOl7uaQ0K3}%#F+ev{GZ_f!RT`PD9x@Qt!E(;9L$;W=#&5e z-yjeJ$1tB4@qrgm0>hwf+mS%D!5UB=FTUvYA$Mf`q?bnMkuXClNbO2MfFO)Rc% z!wJZhJ12kD$M72fz)CChJ1=7-H*-O3pep%=$$tA&F<{b`u)G=@m;Q{2JxefUNw@(X z4n6P^urqFlWTW!m=n3Q!95NdkDb{6`<17s`V{rCD^LE!;3p1I%SEuPN?PsyOh_Vf z8xZgxf4xK!-r_RoocMq`e2kwqGSUNbBmsW!96q!(zScz%r;%x=#ddiS*%HtLr4?0^J`)i=YV! zo;6C&UPe}pB&yy6&C0<3(z8X%Qh4=Vz;HWUS;PAu* zM7zsX(9F8Z`RY9i<=B}rlld!!czDT^oZHJhv`_FHzhF!|p8uB~249oL^8SEf9L!5g z^rQp6j5;qpnRdwmLBni10qoeV?WmjAft$RWylK~kA~1p$TW3r}s2j6QS` zPt-P*0|jT2K6C)7H6U~*PH9acI#!3{*Y}RYVL=T>u^Rk2L}b*FEXAXVY3*oqJ$k>7 zL^|$AhE8%B`m``S#fB|L;5D-gY9Y#Pj&mqf39f^jfL9bNFz_VXf`c$Nw{2ZHu)VzdSqC5G5OFB|C~qk@$iuBlppuwBcc zDPdy|0=jTgQ?Q8bV?Y)@tSuicD1uP$1*U6ac20Y;4oIlMpt~ zLzhFnP)U=Kn#{ier0?tgoH54{ps;F5czOMD9+YzEf?;Ap^J#?#ykSqzaf4VtJl9n{cpoCLaU3jqHZR| zg<=ooyLoP~m`XTW7as+CZY4QwlD^HR&u z&%UNB?qx$E+$2j#-~ag$q1kn-9$5)bij>`!%Bmsl7#%cd9F-4U55;GW@E4i8*lzpkb*9q=QbxtkB$!LG%xJJr@R z*1(<9U?WlKWRe#4Q-yeiHTDwRDI#~Acrrd8x9&(_7=f%7>}NiRJYeur31;`B2Bxdi z*^Y3w*oy{{;`F9`YhH(=O!5E7TIOBG2KiRP8u2B6AB1%~(2^ICC;u**T1Cg? zPGDg}1aR7Mz8VSgq^5ieipc3;*QA`78cY^(8G&+Tc6IwwPSx1VYAt~)VCMdiS~e?3 zAVi&!kzeb)IY-6J!6%U_JK*kgIE%j~B}e&-J>8key2R;CLQK7W&i9gbWGnZ`F0)6Q zf16p852jQq={wF3mLPY&D`{kZW{ZBQ2b_DZfuwzGKb$rWN-yM70LM9b7(HgJGz2L+ zv?ti%feJ42RGi*oiKdRJ5!Wx5HseW-pm4!Kl)Yg!Q8+&)`qhzvD`o{3GyB}a;gO$ML{@?Bgn81mjWxuY2GI-(hUxx|XV)&_iBkm-=pO%Svq z_Gai3flE!&0rO;wP^k6EHt>D9+0(GFu}`l7iA2{m3k7+><(bv6@9zx zfW}v0Y^ujVyVlS>jZcUQ<|QrUMNh;<+?YXxPO5YpeTxvpO$7lE-4e1%m|f5%+U4Ol zE9dq+q1J;7aQBHGw4z2MXhLL<=6w^Op-u9R{qUbRs_ZKDvVqN8jJ}`^BW8djzpOO} zt2U^ajBu4{w*vUk`_6{&k#QYr+A&s5)P*<4S_8WlZ6rKw^W`uVL`_6uv4cUo!hd$D1p1?_W%62A)&(!jYrc;k+W8ba#p z{hWZ#=Zmg}qHpu|6q74MM`0&>6dLK!1R#zLR|4~?E0K6-H5&1B%$YryIAhiRTc9J> zlgYUI5CG&JI>x8u30XY)FTm#Z5kk=?B6s(q;^#^a_27kW_RE93k{|p=_xL|DlTjH z+?bYi4TO30dk1eErcgbwaMqIP>SZ*ONu@WWbn$`$yAjjZ(JUhoBMoc--j@Jn96Cua zoHV!!p&F9?TbF9bvAk+`BC$Bs1A^xYj)&jl*MA#?CO<2S4oPein;t>kk_6=**_h4?KRhOXuc<5|v=v+KaR>wvt^QI#Wi#5v zOf`y8jeJ`g4-Oc7eC%vAG)Mv#0PID~Q7&wN486kg2k~`=qxl11VVkrRP)}@A#_rzA z;xWKN6Z^~a4_F!tR!R;GISjsLwMy68)R||UMoUUe9^`?ojP#kXCf|sQ(9ab_iKg@% z2I*hHFzQ5+J#uf0+`T-3qSp-)O@ZY{$9Ygog+>=(oEyLpIMbD=NvxO>APf_Tidr9$ z+D{Eip3sRQ>9inV7BQHZhku0H;?OCNcubF_1e=J?-l7*2KYzq5bnhDvtpoD_lT~BM? zqzj@;`)>8>wAHLMVH);6n-@=G{>wXWxex$U=EaDTjDHgpUbeVP5pi*>I7Xlx#H~e? zmAd?P=7#FE4gvS*mF0zDJrG5^U=bX_y5a~gMzrkVbGVKyw>Kmr{YV!zcJd5)yi!7F} zZZecHuOlL-MhfVsG%q9KoX89&K_Fk7{sL?@#@@5=Cb~FS&X8vE+%wKc76Wiy21d-K zlu9;0U@>u+?Zt)o{+K89CK7h|Diqk!Fb)%zB-0Q&?e*kW_s*_u`&4rprV!o=!#~T# zB>7Xpi=?@FBa1DX$w8G^zo}SVB!&30+ij7WuW30Fs*D( zo5MbOVA7SD*RTi8>4|HP89A_4;^UvaWukewmoU#Oen=1U9#B(Fs7dGDv?$@t=8oa5 z2Vli!zkNdJm8^_4-vn&v9pv-3YezUg=C2aM2xm2@%8}C{ zv*OsqUtj{D`bU`Xkb~j1NHTTz( zHzGjc61O^3q_h0RvaEl=zLz-1(7FW(wYNvC#rBh?<>V0)h)3O#tz+CPj!4;pj1hA& zX4RshRFlZO7w4wM#x<|uZINGvV5z_qx3N-Rw6cWUm&MpT&TD|3Sxj`5lq}DgnVI48 z(0?zH-j@!Nl4cBi?s8<7UT5GYK%Bmab2`??N!Q>I$qD+HMtLP~Pv)(fE5@WWFnSaj6197SRF?>Y zt!+86fg$t^?!XvQw=9Ab9>%j2)mRXI92vHf*iIV(E-K#;Pzio*>IVU93OOuu4lDtkO41}nRM|O7L3y&Br33spVbQIrA>mIXTcGw{TMBFu5(ql3Pfi!-+VccJ z@eSVBH(P&SoA_Y%6D6(Lkzp0|UPKqPp0aXc>C)q15R0o1TDty;qwSj4h>YXTne>*ty|sc@lzUeeVH2poAkm2Lxg=j zE<_Yr7^hZ@bSWKNd;I?|&7D$A$aBQo$3FB0duULX`&`<7V~sbM<>_oXO}LcNBA?R% zpICce{5^$p-|ISyfeSd~0iL$o=LpV#2TolA8-Kq(?f%o5mjNAjbQ0=z*GH^=1~;0~ zR6u$2^t6)QR{=_;^D&7~BboX9jUbZtB#A!KXSNC%;_>% zWooMAX^I9xCeWhtIzwav&@{_-{|8t0>p)^S0rv+W_74_D zi?Dp8HQC0?EsrWSVTCh>e+-Ndg48IPfQ1Sw+W>6c5wyn9D8xQi%`paoq#2zORZk39 zzSg|PLtHbguEsB+a-n&hP`%zI z;%a2nx+GU~Eu!p-pq|k6q_Dk-N}}x=bYXNYGv~P3N0=&lken6+Ve)^xyxKZDrWL*D z)>|H(NGA!j2$TWJEkzRS-rcSehKYYwwY^>>DO^i8NvZRc)C$Ktpg;h-A{8!K#f<_p^>cmqIJAygU4YHHP7+EKbA~2&7LCmr@O$i-FdHcs3SsnjT+MMZSp=hUpXnX;gr; z!c!0<1R`&w9ux*JD`-AByX0#-tsyr+#E2CwQ!$WL=uYK&Br<~Q9K7Lh z4-oy?;}Tv2FS$GoY_}LIW)z?!kDRKhb95ap7$78+eY@J0`%J88xsn9OzGpzj1O&EQDUk( z@1E&#ysPtSRZdK`6b~|%xQvT(QxE@<1|31hsO-*4$c>BxGc@jCHI1dflH9MuEXP%~ za*|ly-bzJ|>z!qEo~i)^7=IRMp=PSFXS`vTq2{+66KJK5C6d3ReY~@VBJYKzOTfY{ z77F?mR68o;$QU9*4wHGPp17=Y7u~Fdu${JoBS3imMX5@HK|$>lV{5FDi;w0&Os{+= ze<158+n*qfCf@9RI6sUtWdM;ZGTn#A*(=-&9uC^XLHs&(0Bcy&GVw;s4;LKrOY~nM z@D2gq8gWZZ+kT}IhGqbrWXT}{+olsXHI?^g5a%FOV!R+vKHDQhcp2MzP~YAto3Yui zh=7XAFuk?Ej<96Vm0>k5iXZ8-}K23g7!Q{)`dJO-B~=os8a+T8*5uy2 z9Vg2L>xS2AT5Sb#RBeEvaxZSE{|yi^gh5k{pr)k^fj*Hy5zJnOw3!%wnwVLTmMZG7 zM^eQhG5GO5C9cxcK zwgBeYKCtSI(gphnK&ArZ#+IQ6wCW#F5Qu}sYG6=bq{=Ufw_lM>QHnE(aGhwk`QrkZpt8$r zJCw*E52hG32@TE5njnHP48c?23btvUydA$~)rMeM?UY!~IU)uXV!B~-=w@U&UAO}+ z4iXceBz-8Sge=3f^F;tI0PRs?W!+|N29~^(Bq;J`lPf_EJ)5|DV@iPV)dbdLT)Wy58CY6=9b|wj=%A1i@7iBV{|b zO;r!@6MMY|j9jQ_5+7ZVcA->^9mW8VVaw29zGInup$z< zloz)_Y!~u93Y#~92LQ&xPbO%%o%z}l`^8E0&0CbjFkg zaD^IjKV{g}>JSPj04BXmcF8sn2CtU&&I-D&lx;u29@~U0DOg$ZYQELHmXE;=Z@}1b zb=-BiaOiiam;Vl@Aba&TWIa>VBRgphlKl8t3&E7le!{s$wlG{zW$?XJLcGN4$SQeS zal2G0@=t+lf_WMQ!w~uRCF0lw0siP;n!NPw>fdA&5jC==jpWM!15M{nRUi@kkVHzA-FA zP7Y{1JhKr6mw0pUxFRbxfgPksj+39is7R-=o57R!tlk$dWpu{uk^mqV2NLUXa>Rbo zE0v5CWF8PWsY9uEDD2>bG9qDaF+L=+a1Bd@0*s^d_2A4J0+uevm_$F^Q~_ffz>Biu z6bSQwBIWVnjYbzZBlP;c#4skOh~8@dO$5XmwU$E4#ltondFGU)JnQI3Z>fJ2*ho@mCm% zC*!qm6u>$#7fBj3<4KlqQ#rwo_^R`0Kos%>?q`0x(%u2 zJ57W@RNRkd>yZf1kg>0ROoq>f2P}m~Oa*E>6Xt0{DloT($IFu1_(1#+RWl%ht#XyO<9${45Q`jMZ5Y?c@1h10 z(pc@e4)tC+J?7Q`V(Sq#Wpi2qL$XsfaRAtKYcag(g=T1d4(gsCr7(6j^ z)D?FM3g`y9WH)+xmN6-l8IZ`K5|fzhc$Q9qh6HdyUK0YO)bTvvEqJGLLmbxY&`Q5@ zg7zFmJ)R5>H}W~(Od!+ZBmW9)k0CI2KlgS!WE?=JGtQ^qB{6zjM1pbYG%8Q_5&?0>4r+yULP2ZWOV*V{=Hn()JK@J4O$hM*EaEOu^+n?S3R3M7b|Rwb`{E~epdDEp8L z(xv&0w2H4fNtKRnYg@8Jz2TH`Ewz&nCF&7Impt8^Hd{6tKxvO8S#8`|9~Uyz5# z%2i4D&%hCoZlY@21=vkqa8pZ~3d(K7(gh2e3Qjp2`29# zs*n>~D;qrYF3sG65g424YVSt7v~}|9I%ii@PMn&0?ONAXu29^Si=L3XE4IyrP&Whn zR{hqj49<)XhGMsHeu;1DGt-x9q{57B`=~0hv=VwjO7)>1f5YT`bZ2cXVcL_4j zpYptYI+Hs{y_r}wq8J2b1&msB9v1P0)ZnbDd+K;UVc@AJVgaVyT0o#xMfSuKN)XsX zoUs+p1T{Qcoz~wMcTl~4V?9LfC`bpoz(g{^Azzw3L4k{r*1}%$>b&H>t5nF+UanxX zhFJBTX%aX`@V`>fuV<;6<~s=9lJIDLdPJ54$E!>PQmI&~@t8vZ3H&3LdxbH}j$Mah zFht?Gg#o43Y$Af|9}6HzVIQ(`V4ThKQfM&Ee}a;TyO8*CR75@e5CWz{vf{0JDQ-S9!k@cG*dYEIF^t?1lOqiA#{}sFb1;IS_>qht>`Aur=j_Gh73EJp zX0}dE&q#{-{-WIlY9Tfz;DqtS1cNTB?+gp=7J#pV(iTj4M}X7qF}Orve9C;w>HwRwa2NrQJ_s}OqGBs5t%-#^4EpR&vG)8yH-VU%#UENhXnG%4 zaR#r@(1KfkWOJ9de*#n{lpANl6Q*a6M+t@Op+Sl`OAY(!8y8#T!R2PMl|UYS$VA%Sv9JZFp$Y~f0|L=lcC>?iM}zk0L5T! z;ll6;z(AT`#J70jT~b>ha+klJ!UMlpb*foumz^W*{;?=4zl>IZ(p1nLGXqh4Iinx!?Xn^PjUr26PjM zCH|?1A;__TeT&6>t0ilTOm*kTAvQ-%Z_sc^!q-aQ9|Qn`#QW->>&Qt96tWTKoV z9>WHYPVbC;kw6puKf{JapumGg^%Jzk1o$bKoFN7zly&oAsmu$&)jU?02P%q)B_|p+ zwh@Xp+L4PV#D9a}b>aYZT@`8wTNnKYP;6U`tx5t=U<^(%7<_skhOjZC;X_USp`!lzL5-5Cedm_z#Y zRV|b$kSxhhUtt75GZ}BO*$yq2N5>_dj|om%_LeLcWXqSt+3v!s?%? zv0J)Gy(<)AxrnHi(6Zsd342-ihu!RRO}k4rh;@SF6Co(5IGHT4oWRSCqA)OEt(8{D zrs5s5ZA}8}O0Aw>|D}P2a*waCfU*a2yM))12d=B6D`-DC$iOvhT%1&RhwCQ-(bT`; zPm+n*<8E7c51(~E4<9l_a2SooMQFR31(STm8fW{m%vbV)PlN`JX@RyC*tM<>7jvk9 zn6X1IRgAOmq!|8sDAh_j-z1gZMBg2gWm!r5?eYDC=4xH5+pO$6KD~B6` z>X|Wxz$+LLkp>SE{K}z^uPa!iTktzv03o3MIJi*YrXgE^$`6gt5e{ z?yUpr@hTHg5cZhglA%ibfW0hswZlrH%eOWMEy_Lac^G6$2ysm_4af^+nuOO!D-ux= zC0W0Ycb2=zvWcXOB-Jk9pOwQm384hOvcXm#nTiI!NNF#9PIQfzCN;UY7u&4HlS14c z`n%GUj`I(Ua6>ENP8wTV~BlY(|jt7En4llb+>h7WCo*fH zDNeQCk0wI5_SMapwyhb|{a^>HfJ`fso*og#74MqV{Rw3?je_o`ftbUB!%^R$u|587 zd1lzW2VSJ{IJedyaOiM+A>WTU)SWPg^b|&*Hx(D+#4>><*ZT-4nw^J%JoPu2i53(p z3VIyVTv9~>#=pDHP{mLrhbrZ_8FN`t`!;0h*-2L9>mt43Ig;V)9@U=4 zY2Kzq6Ye4GtJ+OL0uu%)#DlRx9LpuHI!*JNK(=sAl7;wzxk=>%E3)zAN1jg6#l)$Z z-;_#m4@)f<2*TF+8$eJ=#>!PyQC%KHa@^)5{g1;pK0bv*^Yiq(4OlSmMn7V`Zw-En~tTviK* zwL3|12C;B0cp~Rml@`N-Jpx=mB%OT0gW(c=`(%3mocPSkraZtZf1g0GiH7*&$M-8=zJK;M6i{o}70E`WZ^7p8Ogu|7QR|OW#@NyYrUIL9T((z9=SQynIM51lL`x6!EiX|KV2oj+E``v zqb(01iqU5Ym%8eDc(OJ>2Djz9jnAjNigYyD@(L)$7%02&%#B~iM7ppr1>2Ufo_wU4 zufJ2tu(6QVnS9)WVsI5llNL)CgJ1jZe94CxNNoZfYXjgT6iegvnnx_P^5*NcTq_5@8a8`j0U%^nY}zEeYd54QYG)Z7R%kjWVI;A+X5BnJY` zq}V`2(FR*pJo`ztS6`)6HlUmW74VNC-|b6`k~MmG0>`(q+){8P@xq)9J?q*kkDI%mP1Gj z>^yv4D=!H!5VGOJ?4v&B^AJ`-LhZ80R5ZVGpd?MkbPNiXF~h)w(q%WT;P5+k(oRb)*mo7+$Brpjf5wip8Sb#z`yteEvUK=+n((?f5(%ItC#(6Q2Y4JuWi^^7B zL5%<27fn4}zq0p}*}=f9laezqkgqTfwh~{CtOL+~F9f)Yu}6=^fbrnRV5^4+1=%+| zr~p+1lqQ;O=Yi1iil_~~$D2viTi;~QbcW@@@>>S!)4zDTA0c29#_w(g>Ja*soV+O8F$wir{%7EJWMN*~5*W+w%U z5!`}irWl%9;v+Xvy?iTZ8nKe(SsQMUCFRBT9G<4A-8Kw*J%i3=?DNT37^XyG7vI>3 zOizb97v$ne%ZYk$JvV@xtxQ?Q{0>%^HDPVOA7 zWTBD`Of1z^iZc)*`-N*fv6zB7IzNq2o6?zB?7|fkENmB)FK(eoVVXGo%qE5igku)& zeIcdEb+L;A&OW=0A&J9HuL2T)un;Y@$Y!KHI~&bPo8v(0hBqN?elz}HDOTq$nEt_c zn1*8uJ=NknHjK)4$gMslJ&w))jT(K0A-_%NpY0iB|#MreO=4(S4I zipn!&{cDLQpvk3SES!iiVr;5SXlM1=yIH1pQG^sSgBHFbEd(vy!y4^+Y>Q}u#c~Pw z19`Ctc0l6`f)NbbdJZrneas+|STRX9zNEzszyLZ(ObfUV&_wC;FsWBpS>pAGQAgM# zF$v=>iK8wS|KBn4)+td_i$ydH_K_sylh!T7k4{EL`B-lRC`$#Fl14eBMlWzh>=OqEPu%d(f0QQ!Dhc0RUJRh+)v)yFP*rE1W!H^ zaI|jir`bEsbfkO0OA4ai%F%8j5~unPk`Xuseip`Nn? z#HC+Q(q9}9z8_U^Z}2?x;m#ge`F)|(WqyWoB{QLnM#~c6E<(mPno?Onz!-Y(r~AOT zMz#YY+CbiWZ`=(?Z2c?*$JsfKAhwdcsD2q)EV&!r)=z>ZN{N&aDl)jYGLAbJBQdag zX_&s;(1QeE(yo05j>v0*^e_myC_##w6qH;;{*2Fg7#V0*EhA_G%Ye;Kyk-$$U^@&I zDPVUXn3Q9SyO|yEO=yFG@{j*GuwDaUerD{Ztz8HI8i)ehwOki84O3QDIh`RRhM4ov z1R_Th6JFTcZ2Hof;?dp;#^39jraUQhInAqvt`rmG1kerrkNLk25hF{agfAFMh@a$< zu{FYjo#1SgSU`h;R_ReBB}tp$BSa1vL61g&J_*+if^Rdp#LKaCu7HtJ!BqgwL@6iud z7Q=wJTsW{pL$w@_qHNcY@f&*6P zB1U5!-_p_Kw8O#~`_GE5~bki=SW?xyQv6v-PTB|GWXvcP-_Ll&PRD z?~{mCWwyiJX|jg-moOC)3jI%WnN}Gv=t}d zq6I)K=`3}$g~dp?T$u~iTG-$VPFfx=C%F2YOmAAl4wU@hk!c9;ElNfvXwM9hLR{L& z!kTvwg#FW#khtRRe6kY;f006_ z)^`9)ap9U&2EZjkTH$`z*}R@RvCS-KYF7pW`kqLZiD`*GM9&dT*v)?J(pC=o)wDnT z(*)kJoU^SN|6x(0JR^mkIl?$+7UB({?HAhW5Bxx$E_g)y2+` zINMfk96Q#AdB|)g#EI>rG*Po2J3Rg^T4PAsCV$}=~O4K!?90F<5~ zs~P1<^L7TK%41Q}aG*b@i?CGa&{u}S+SGFbDGNKaZmit{j3-jG6VZv^xX@)#JZ2CXPYo6a67|>s#iH@>L`PczDl@9HbceiF~r}@Xl^2 z6&;e{N6UZCo&)f>%K>&C$aFw@iarz5S0(7N?%6oiiBGInN8zl%(lu+^H>GYO#E^rW zM6CLS#)3xcbh;#kJZJ^F0CcmPU*XA5{5lNF#%Rr$D~m4rH{)gp{h;QxpV4|EgRCQ? zn6j%@_7x7qvylX*RR_T26r4zZDEHihqm@#fG8yGmd=X0!ug2&;!{&wz4Nc?@8GSa% zK<|w39s;~GT=9<$4~NUR1lDav^SCojF{Z5TKB0-@oP0YGI z(G!fP2mVpy(m7Y3O_K)=I~#7y#KqewBMrrnl4~i_kQjvFIk!fSH_A!q=%zK{MvIjk zfgT5*agS^@0BTCgN+mh`LT!l@(n>fvW1t!%2|}6>7l96xHgfeGhNAp~KqryeGxZQR zL{Fl}qDgu0iE_3!+g5)vqh)|T0nj&ci^N!)|2Z7R=^Tne&ZjCidHteB{La#@gaoV< z;w(`lUk4n}PmSSWwMKV#{WkdU#$r8qO4T0aw@5mn7W0U)#YLo3dXb>qj>SlQG>0+r z8Mf5j*}-~elw7j)L>4g+>^}XG`pgvNy)_mPdsNx^6$u_<|4d#xy25tusJl2eMelKx zChOOFdOd~l2C*JV&Y6;%#t~QxbYb~mv$xNDVv-{dHsc=c^CN(b(Pb5dRgSy3SEm)? zG!cNCCo(GF7_8E|U}Cx0ds8OhKph9`#BoY`?OFNkBf6+(KvEMTQ@8^jxBTx~s{x@U zW+!H+x+n_K`-A30NsA;RKpKK3@8=fdz^|b~6dYp(TS~a$TvbA)JR4<^+3IU{i6fJJ zJwbU(^h-Ky%y`;?M)m^4LsE`~(R1Xd)px60B;$jhMpW6bo)FpW3NHluN!IJDV<;6g zTzn+7zp-A76i*QPk!+Ie{(flGqxh4CW1>vBTa7f|r3z`KI$sSCoCYMFAaLPrqL?)T z-rBf$-568-PRKw|JtH^gvT6jO7(zZy2YiOvJgQE^WP6%2hxbNnn%4KD5%*3*FcN{2 zn<4u2i!Ba)nL5^*!#qAS`Hm0rCKXxvM-)!B4^Xw(_(rmOb7rmQu@@w4w&-YoCVQ~BW%4n^J1NhrSx7UZ*K$r=U3xX zsW@pxc#k5f1dIqERY#wiI;Bt$jmotGvc#pqKuHv&1uLNyQ71oWm3hSasWgf{jz`4* z%<;_qoW%yMd;zcq48jG3UvDGW!76}iV`PgQK$=9wmhC#(+VulVTSB)(_R`-|u89xW z%A!I*2W2>c3@fhi1hrN7yds%TU~AR_^EfuIZs1E89I61EOD4Tn*lBG$maJUTk>0l= zRm2a-BAe}UbC|-DubzZ+HTwgKp(uvuwN8xTPWXi1GglD+p~Ef&$d0feKtm{;-Fn+m z`{hRvWb?Y~zW+em9L%r}$(Ay30wgep2;&faZsP@aV#2ksQgZSNm)1k}p*B9pUC(MD z6UC1y^G8Zk1;~)!)dfW4){^5EEpDsxL%Ur;i+D5l&I-Z5^7t2HObf6Y-e|I_arwZ~ zC)^#Ql>l!nq}KJ^iWonRdB_Gi0gqjITES{u9bj+t<8&l1z_JpJjw9l*ca69W31JPU z3Wrj~fn@w|;vQh;?a6}>99RRV7=OZ?DDVm>ZbHe6yG|>GZYpjIf`)BsS`x5|H-?^62B2w410>;M6GZbodT&( z`s{##G8tX>4n&*~ywX5ksV{J0%aak9V}7FN{9{N8QTdFS_KdF?hHzwQRQY%YkEDjC z22z8@7FS43H~#9Nuw5eZ&X85s4Z`lWJ2~Zkin1&KR|Y9%OmvZU*^;fx08ydifEMv2lB0>U$lnwJ?NMf-sP{11 z5(=Ib5tVHB$vtDFX)-S7+G%e~cz!Ovh&?MM1qUA5+qer7m=$L!;u*!o27?7sAoQb> zse!zW=fZkmsN{b?`43;z2W!xdU@qt3qWKNkzH0&KjzhD~8DHQ<`Od>g!Do;vad;Jh z8#JCE2d1(%L8J=_90um#JJh|%8N3q9u0AwIPg3uZ)g*XHP_w)0+FZ-f!-`g(Wo2Te z+3!2BDoLlENR)%81w`)z^R@iDy!GJ4cIdF{m0u$Wa$xj|_aXIXh$@vMB5kW_jGW>C z7=`*?2=gAu$kGUDKQYmWbCGA6HO*hjKzai^(i zpQq6bB?}lCXjDbyUfv{;vX9sv?Tz9CE*Bm{nbqci$W*hqRjfb{D4)i|rFdg^exQaH z+Nk!wvk+WCo2hW>mvE>yhDL?{)>d%5;@UOEwh2Rz6&5K%@=w5a`Fzo5g1BXbVor8s zS2#lbycy0b5_M$e1<0$g8U`#%yIHIl9Z~mg-`|T>g$rMRGIgWL;OswV5aD@{S}EPa z3tvL>0ob%pW%&%7Axa3(3voSN?;y*MS5VwEMjeJB_YhJd6k-X`3DT|QOi$~qdn*N~l{{Kau9^Hy&n9gkU=2LQs=U)hQ95M$s9y@x6nkIKH@IVmS<1TRof z4{I06YprHQWn^;aX!A`MDc788r}0?k(I~?ekS9}FYCI~*eGv?6X{k*3e1^MTY#sXu zr(w8pD++Yr(S&Sn9C3;eKpbUg5sS=TAh*N^lpdbf-oA7m@5#2F$EXlNkYuzEW)+*6 zWG)}X1XIMyIMmxFKX#*NOjY5hQ*+uGRzfpJeoaj+78htkAW?582^mIN{e%4ngb$$E z`g}y@4Y_3W$80iuEK}jcdj{}x*7Rq#-7p~zTiqzwk_sF<(VEc>9XCpjR^<%;p2g3S z&@d}0qUU=%Q`F7fgP8@AAcw72(vUl0 zEosrl^u(e-y90tp!4DGC7}420YIYx!r3>*=M1wK|vdHGyplvnUWhfQXLdh9OT@IxV zQgDSgK|VyloRX!I^d%A}U8=c^4ofeM$jDbd$;m_KMh5NFuEJ#SnKG`&sa=H801$Fl z`7;&pH5gd2G2^-l1^3Qgdz3BlwKP>THA9464zhknhvtfmj1ZReQXc_bgJ+6arNZ8Nh zXXhCMuzgSeCPP|GP@rmlXp-R%@Gb0#zgW^VV2ST}D9Jr2`AZ*=YWCd~>silw?a4*# z_Eo?8P>9==lF745$~OVs=M9m9ZL^dz$r%|7`?@o~9B0nj3fHsvo&+2) zUcrIDU+XA}sSFvx7MLA@=~&q+pOamx6|S~4Kd^j7Ete;|i&47Z;Ef8?EtsV?)n8ma z;_b=y!^3z!k&gyZJ09cgayqqoH~ZN4B@=pS{>EYNCZ|o`soPQtW#%~r!-Vx)28X)e z=5FKH>5e(R4B^j}gCnpid*g%^jacuhk=lcenepftz14;}PGDKlS$ZWiW{u|snZcKh zZ5rYvxG+XHje)~A7+^1kLX06+Do2Mv#l328V=x#P-19KLHFdFXg4|ZfkPIu`+32|qoE!BzA41h#L=O`{F-g~Fv@@C2msq4 zY*5j9F@t4>^g#2HHzjg1WmQ^R?F&4<(6-PKr=Q_*r8A`KO*T#i+{| zUzfr&)B0beeB*AAnPzAgNLX^jRJ0Xu3V*8o_rRPgG$2AE!g6u%=n2T|K3fAI`UV00 zC*%klP;w>iX=%y^!h$FMMl{*IQq4UflQ|P1zJnA~kM2*dB$&?-1M_SzEXSAiHZh9z z5sm$3`Kfp}zbtPAte4|ryiXxxB(ws3zt&5JE{Ov{;5uayJf0R$#B{z1D7WT9g2}_? zh}=^N&(xy9X@Ng5qW?bGfXC4r7eWSW2>rLS4Z4n zkZCE(<8G4%r3j6h?^lN6nLF<<(9dCy!W08f0J)$?RPzR2oKfT0zqIlQz86(okdY}u z5elq!mccG5$itZ& zJ(8NMXR5tqVZIk6I!Ay<3Q` zo&YrOx_+Vo+tB<8sTLri$bP^gSUYh1%V^;0YPh^m61_kzu_$YZM&3r{VXO-v@Dc*& z3CsKDVMotdG-<6wYBG2eM_ z4@_AUh6$44+@fzBUz%nrO=)|*YJ!6;sc?x%r@{>gm*6pNPrzoloL2O#F(v{Q7H^D8 zEcH2y%mRuKlUgAjCL-`56f;Ksjn22cDYEtE|Yh#w2<@O(w?&#f$t|LVQv(9{HhTmZgnzx!p8W zV6my1VmrW~X`+U#AqmU<+B0l6B&`Tb7+hD2{x^mYFA0KW-UI|7>*7&123g2qRr}XP zqWtLW9E9e9drKTu=3k|4JXcSHc{|b{4QUOi>SvZ>2tJV~#yv*sbwc#qzBX5|ytZ3| zB1eq|j#3dG2Ww^>9e=h^)+T1ox^#dq!ben%stU;?OPT#;ZK>8X}+r9mf z78)463Gjj;X}_AvdV!#_oDhr(2AV#epp!HiL0NHxx~O9G=2~TXNN6v$&(NS@hYI@( zMppOukdC}5VMbDJxlGFAyC?W100mvJ$Wi${*lr(rvM`6%q)UM`-C`xt(swu{;}SHqF@>?wX4v`z5^_A^k;Ut%oxS@IrNukyVrRe8-*3R{BU`r8dl6e`6l6i5XSibD`$Z3S^t zVm{|3H5=_QUZssclnlTJl*^zH*#dEfco5+w3_-p2U#uqcT1B|69TIhvvqEl-`JbL( z6{_9c9QnrC5as|%Mw(|HQhqNJY`3gWZ$VNJu0C*;+WfwDQIan3KMks^8K*|HX@}9` zjf^8dJVVig>@qOiD5ruoYDmF)G-fvEcS#yV6b^x!WD-GC8a&j0j3~v|ATi$p#}VR0 zKkZ9lIU3YR=q7M)P*BS(ohSZWtC|P*b~<}m3toJDm=p?X646je8+2!*@)BB?P>l{{ zI3-7w5_JF=&2FX(=oEf}#AJ~uJWOeM)wdQ(QNMAo_--N3ggmjQR;$ z9b~v{F}T?a=K*Bb%4%g+oyNp+{{TA?@~886R#j4q{?go>;_fP)+E-NiY!IFy$7PtH zC}c0&(#LgKfV``KYc7-{z{TQcrNp7Ppwq;g5cb*7W+Q?k+OGvjT9EBbBnjQ%O;D_F zi^kxk*|TRr2A^Irdvg~S8*%uj3DM-I!aQk+M^t@4wF&CBHOFLA=puHYc!p~{SMNGo zNdKUUdx^Yh7*FcnB&i|NMWUll2tcry6a}(Oa#b2{Pn#^YH%#(IY^`*M4GUw`9qs~5 zi{#XLfdG>NT9@Y)cfkb6%?ZaR!?ke4pVxRB8Q@juX2r1z?`5lA3EDh2Fb=m7$FJ}7`e}R?jJMc zJUJ;=EJ_&@uMO7=0P&aLRZOo{yaXds<=}4`Wi3BP^zx54smy@)2aVPHC-PFSn0!NdHNx5)n!K675GY6AGI`mr*)`XIuX2Ku3Vy zx0>Obv^}pbr^_g~xi{NpZ>H>36ouV&Y0ntKJZ%Q|QxW25RgwJi)q)F2`F)jBvXk`C z6}`$UTCZqI^J1b^Y%Hq66&8@qGR{ux^F=hr>cyTi`DohBm}xIimFEj7OwJ071541v zk%dVChkRiINt;<=q6+db)F3nn4w=o_f1(Dk-T?`al=9wL3c@=Wz~ERT2PXtM!FQ&9 zopT}Wh7pD;pW*t@fOS3pabd8n%`-)vZ?zd?;QWX@IYLBD)H5B2bq`x>ufv-caR_Sy zYCC9?db8Ids6)XBEf~R(qJ+4~@0)69sJjL!W=V(&l&c}+3`rt_)7L~tjpelTgDN?!3IY~3lRN=V*51@=+_hMyWNK>jPCq{H#( zGamfw#uThYDGH9=V6;$3_JtUc9MzYNTvbuD{uf4pv}x)3)yv&ADKDxuXvl;?z4xqS zI_0Ih@&WE{Xm^hT7B&NzmpjUz(2iP8#P|T_GCyxJJTU@H;0CM7Y?H#i+XWd?;L?M) zum_uA2K5NPRx{MQySPN@P&)sAV}lCyeJ<5NZ~5@}V?g9&@@)zKx(9kIfLhmcsHICVIRN38*D(zDs#XJek+%MEPLW z+hoz@q+l~EKp0(XyALWgzX)f$^bOD(ffK#l2l|L`b<#t#15&%N)7qU-Od3$2YP(mB zv`jVCViRc`CxxigY|!(h>*VKdCNeq4V&fPFQcY5HF*$hnY{MpRIr3W95VYz&8%mbN{$Ae_Mcxn#f*UN3gIlJA8Ar+eFno?ZQHY-dUxCz#gNH7>7pslAt zE`b*9`g9ZHMTYJ(LW86QqA_K@9p6ARQI6g!ITExzMH&{NY=|$}y-?N_v=`|z<;6SY zuV!Cq0)xyD%sitJi9rew0~YqCO7;5;Sve?;Fy4kzvx+2yeJ5=t{TfsnPccH^=+^hG z6dJ(c5A(oi*y5hcB!Zis_#Zu&5;U)ol*+dw_53)YyKj3+D5*3O&>30P>hDsm@XB-LYUnLe%sa{5ij)9fu%$RTQm515N7AV zI~FY*&h}Sm%(*T+zI9k?4lvSE-#v0(ua{|+o0KilU@;iYIU!d8{BnP915-BiB}G`9hNq&PJmcBQ z;4Hp{g3qOknI@I1Yq367nx$GfOPGf8W(?&XQPG#~hS8!~VD8FwK9mj9>Rr7Uf?e8|zlYHwI%XjoxBvb6UFq9jliX_Q{YXSd@AW>a))@ z0X0W2_hHBVdaIb=l2L<7#xiEEtHc=rLlWYyS65C8j*SYZumps>@FOP(xGSBtk z9VJR3G@}?+h+?_0-@wR!=OA?7CdZnXWy*rjy%Q+P&cyBNb_WwqLUM1|M>pzTow!`p z!b(6S1sORZ-ggHURM4e5Kp4#uNVtDozZbY$AP$`f&ARAHjw772srG za5P$TLwhmD`C{XJf%Nbw0c$8<^d0ALK;DrGmSE zgRF*;$b5NYC8(G=O~ zoXxXC+72N|gOCf;l2mlhmw)-t><2qEJNRV{n7~e)` za4sD7))#oijlaV*TYvo5#)sfhlMBQZ1Fc z=>fFpMSD~VQP;ajsu2hRzVvNI6&voMzt!MuMy;9V*(k51x?CtGZ=6zPh>a^oux??*n5%I zt%bFQ7Azi;s5rzwcfcjs0j+X2czHM97#!BCAZeBE80V-0o-*f3l!{uZ8IAECMHJvb z77*$Qq@jY$SQ5hi%SK^D;-mufFS5P&dDceWTos}9VKvN@j@yq8v4;Jj3$<_R^7YlA zn&*=1Nj8*EevQhQLPYXY>?hUnz6Jte`r>btG2!hF5P0=<9Ashgi1%NT;>pJmGUnZ0 zA{rtm361I!nuBZLN#i*IvqIo)j`-gFEPDget$9PFQs1O-Smrc0o8?NYSIk|n!wc;= z3lu`qGalk1jhS*EbQ?)Wqs&`1frn#~WvRx2p&1;#_Du0b43Stl3 z-P=^>Z>x2DiUon4DYTqo+c_~uJ>3lmxO@huvUOfToF%h1-e&i$858~c*h3CF^l^9R zVWc$lElgkCAqFFbbGn~SNofZ$lvI7L^bkVSxB3VLCfDpFmUyOVH0XdQ=cNb^%%Gq* z<#CQ;R7yu#VeXs<^fTc+C-CEr^9HUjNtIam%|qA7UtFcQu?xYEPIl212nf32fPm{C)#bzki3tOcil#sV+qI*lrbWx-WSJ5^tldkD<-O=>fTaxL!IY#+tcdqie4%a2 z$Zwk!ckev9$} zndcOOXtKSz)q6lFE;n2YvgbjS;&K zf#cyt<6@>Zv0@=I98?3AV}n_{O)JL1J5&a16a34w$@bZc;<^XKe^h%PGVzL+dqy)% zv!8Rcmsihk=;zY$)nxSp5V|pPyChDOB{L$$JOpE`sKGZI{(xyO!0n&I_#Q##O`_x@@fHd;!VBq$Ik z3mNB*iUGrcu^9&tJ2mcxH?(;;=x@|&KZ92n0V#^Cb2_kyFo+e@yqDL}UQ~L*pNawY z;DPGU&WC@p`$$;g(mretpo7K>?Z|ThQe%BT`d;`q#RiyRo+G8;q;+UdXh}4ac72!O zOuOS)R$4)k$wen%aVZ9akvRa7N8Ls5VJKf!my1#ij!5jAfRv&VQHszfEO=z^PTnzW zXX|`AXeBBA0vd*4UKW@sygT0=kqyy7K>@%m4qq0$zoZ)p;ZQlqDw#T5qXmFt+n-VS zkZ&jTh#)PUMkxsjC>ARTEEdUvLG&$3}H8nRFSkUx_gd@;ET*Yvbe9f^G zDd`k%pC(@XU;I8#Mh>R}qEMX?YP3C5o$-eYty;`K(wswCT2vd5)w}~t`DF;&#p=@> z$PrzM#fhFjx~fx;;*R=}cOac0J|s9VrSDN!D|CkT!=AZdO%>2TV_fpdv6k z))n^{W4Mu>a!^ov2il++7}i$WB5Bi7+G@P!X526E74B*^p#HF&apnV3a^2 zO>d~ooBA=F`+hMd-tD>xywl-K21ka}d{zRtdSgrpk>ZV6u0x0z;)e0{0al|E`YkG(y>gxlaqUV+Oa}6=8PTogKD5@hN(-IX+>zZDnwnIh0Q^l9qtyy7bWEsJA*iqtYcKSg=AB3 zD?2ldZ(-2|0=qRKT0`iHLiz(%qb#06sYczZX zvtsBoQ2%2z-=&0lIlm5?olG!za|t?RV=l9l5+96^$5GE&U|Hj^j7rL{qI2EqZbxf&h18*FE`oh{;F(jPvD@|XTeNgc z9#WUALhKr6jr3%u%PfV+o)U;ZPvFdTNdIYSWT>;GvDZqB2dPCuO9olj7O4c%Fs}T3j$lkAO@q4< zz2uaK?%J-kW5Z?Z3Q^foJ^a?t;_89q-@G_a=!5E|U>n744`nj5*v0>+@3iGL?R+XEW7RW4G znfXFZ22>g-!s0b!B1yf~GWnqcGve4w5Xg#P(K~qlVdZfWhYBNMt6<#&!fBKlr_&!E zJN^Se6dJgzn9nvJyCCMA2SNnZYn-9oc4xMwB+;~h@sU>d9!U!Zb?g>)6Oqw?9;q!SMD6M-9DxV& zMFBNbS-(#tv-pE8;?WyWY#@yXoQT84x}lJMzAYialBs&OYKnSg{+a=5Lf0c*rqkt4 zf*kr!3M_f*W3@1fW{ZqqWB<@oD~Tryqm>KA1!`UIUkS%S!FfJ(%jQxmvGVBcZD7m&&isIE z<*!7LXQ?*~ws2$C6~AsE zlW7*TgA7@dFw7?#l)T)MDNJ_d@lrOz>KeAiEF2#YFxD;k_$Y_t66){TO-NiSJ)mHgR=@uS9>kE zlmq9*8-9}TAW0>*7$((_x zQlfvk$RGvt2}BcHu(Yc9J0L`UV-#z$xI^#1ld^*k_C{8SRcU^xIO$PQ zbBYV|^YP5REXQGaw$rY1lj{M&p)o^Z&Z#7Mxq*-=7vv`T$!IYfgahz^w)XI}_G2l- z&(zbm4i_dAGR3b>apvp@ra15W*oC2Am${sF~n86AR0da`4A?XRC``Y;n6(G@MXBbQAb zHb@E=hYcS-H^Y_!tKca;=g4HGDZ4R{5F_wiJ=?|ii>1=WmYKM27UC&kks06;_i;E- zq7w_uEsF$pG7Awx*)55(b)A?Yph0!qUgtpIvN#oVRR`0Rv9T}+k^0vQwm$;a%1&X0 ze>ymHz@!9R2Qe~UG;6O5#Rv}#JAxFg1>${~zFe_?gV9)*O;2cOPyJS#&>)>sBanW)IZkPavu94F*pbYx;tfU;5pBML$b%x8-IR zW#4s_N#DD*EP);tN9j$2t1?uc3Tm+^vRT3|BIZyWD*#16y1xqO$VQ3IQoT$98k(=h_;lDCW8*nDBZQu|!l`nQ!Ah%hqRh?2b4{7L3_;@HfG z7D6^jIFpG6*>5O#AWWwz6@+yjv5~=>E0P>cB2?6nbXgQS9ny+cvY?lZb1=XKnBr%P zT|Z8xL16#$$eIWx*4jxp01mVlr|`mYN@4Q0M{HK$bk@EN}>lcRr6Af z+i*W@OAv^_NZ2{eXOS6VZ0&T*aM3v0=kz=#ik>$@xs9Apz!(NUT{*^TDI~(VUYh;I zkopBYr5Nc&v=>qg^`S8a6PI5-mZ1A}O6?>CNaNHlVEf}o#{OzeZ_+*&`0TuwWSEBO z5w!}3fAU*mi_P{E!4&YbSY9D>8a*8l&Peb&ADbFMAgk^m*qxNH<8Bh=@^qBNnuY;%yLfLC)er>QabrP>!^za%vmN%0E|A6ETc*YtB z+M>Vqm;eVrQqaqrAyW|w>Q6YNIIx$8rc5Z-xT{4Z5Lo!Cjkf5X@{9s`DRID5uNz*Z zCKHehk|y)|zE;IFKhI*0RAqMsrK+EyyJpi-z~^lDnZ>nrsHB2{gVF{`wls3N!UUL^ z8t@dPR79n&%D?3#!p{eXf>9uB0`2q)=m{lCmZbDD*DwKWa$x6Y85ze(NwrjLJjw{D zC2TGaIXBjhnRy~vIH0ePS;Y;9O&6= zWB{MT^N>`G1hp40-;D%dBY=U>+fn>IjaMiIoIZ=sec}6QBIXX;{sOVYd4QoH z25$KBS+jh=H4-zGy;!R;2)r<5OT87F5i(ef%-R0c zq@+BkJrWn=!omDngZcVRJHC;ZyG(-n5tqr{pZ*V0&rNyKo5-go)*TV|2njhB9dxxF zkXBvd_GhaWJcC{qXljqK&p!5N3$WPx0ADwjXOuEcU@LmYk=V8kf=G^j;3}-u?|vws zD@w!8t~!Q6?)jIR-FT754Yytq|3BGA2g+MV*knpjJm0Ffv=}`p^L(Z&)g$WAriwYa zCtu_4TjYADISS#w$l}T-B(acG^L$fZJ5kXRd6p)X9$38%x50c!sxiGKc?itttbLfXqm6S>|M>-NT^A=#e)I8D2a^*S@$u) zSB3}Gg1|Fr;bdDyy6kh289j{_WiVgFfWb_(TYIuBz3u{x3#vmJhjt3utMmcosSbb zN{W?}sfYlsR++!CvR>z8E{~H)fK~tu@JZXQG6k$#il%KrJg`P-=B=8GZ>4&PP46&R ztSM&~0o_uzJZH$YP1tK2B-5~FphU+pH-qFElL-uHxFxl4@C*sTQf6h#d48{-q7cCL}BU`n_&nc`Nq9cBP?bfL?_<^Wkv)HAP?vdiJRMN@2S(d z#-=tJiG>kRGTubFynz)CZHSe%QBduIw&*^^?Fe@Ka*0Km`Yqv(V1_071a{yASu#h7 zcImkOwiBq*1o9)e?-arcwbq_^U|4|rQA~$ZS^G_T5R#3@hS*@!_db%4`F2s-B>6n^M6EI;>SK5b9dN zW5o+z(CUq`0y~K45hlENXQa~$P!9(cE^Z{k3=>)LA}14%%n~9dsCK z;BgDE#9JU^p5BIAy&yP~BA0AOsv(@Pj-;3sg8|irOHWxU`nRD_hYz&R^JrXc(%g@Y zNvQk#iBwW1AM@7TiLi;Og9RQtj(ZnQ_glh^WEtGmJ;^>kys}ySo9(gi1;BPEUNAr+ zZeh@8H-GR4Du5yxOxaOcN8yseXWs3-A?c~8F5=eAB%9bU7!}A+9LW;MiAvR?NVQuN@XpAJ^XwP-?T-WBU4if^GC!e17>Ih_QSg_&Mj*&|5@kiz6qMMr(E5g#+U`b zh>!shDMUOhe*AW9IItK4I>AJPVZ`RJFl#lo@e-V@I|r+L0FYe~KZLNslsc=C0=w9a zX49v!l3KI0ZpR>b&KM_)>&A>#iyts)@wPhqur82Tf#H^_Z^-I;_4d^67qu8G(hybY z2;ejpIf@Ng7VH8T?7*%@ve^|5G91BJtM1H<3p*I$Nn9N_x61jK7?32F*h2QH*rIOR zh4z(erND!6NR*4e0^N}^gMrz1&R3!OV65r4<8&I4`V4qFuCrtm4YWi!olMdnWiC&6g^!FV+6uh7t37bm%1Ju2ZlD-oQn6q_>I0&ZI ze4rxw7raN>?jAK?afC+{d=IHFnH4xCDjP$6am3qW5KZe(c#2Rmol zJ<&i&PG5siRgDmpW8kt~?PM@cTt$PzBa-4xmDoa_|JL=;5dtTMDuLM(tB0o!5jnp2 zSie2l{d(OZ^#ufx+)x+;gu^{csJb7(E#v7+3`R3(>*+6{7Vpat9yESk zs6tEQt@3f)p4#A|pwC=`)1MD`b6TjBMm156_(VFZY2=8epVIo0(K;=SF;K7x;t!!E z8#tSr2IEpbv>HoP8tL(1&IJ=14TzT%{+Hm%>LNMklwmj$Q?X{SNCq}#OQdJh0E9oi zK^c*ZK}uM-kmI6T`cND!2n)FZ{OsE0m=lN`|tMI4lJ9}B$&fWLVz#RmI){ih-R^vFk+D$OV)HWvl%cp zr3x?-VZ@u>P6W!8x3Y>3kH9gWpb!n9!3NJVFdHXPYtt)@7Y~RhrM-&Fa8y;-ik^#| z0T&<=VPFN|c3wV?Cwukjpq>7KB*&1Z=Z`;bh_UGMCD)B(^F+~)Mb^+EiIK2=S{jle zuZW17>H?cdR(CJb%oBYui?u5FuZ&=t+Rz_)_14f~gX|!UImck6Sdb zBTH(F=^nXmWmQ@-;ys7425Ac{EE8pkV49{E76=!42RSS)kr7f{8X~Q@W$3D1J6Ks~ zOa&h>f`2PSZXe(~Y{_TP!I_<^?lwhxfFRJMzyW(ZfLvk0b{+vI+QX%Um*HnAK7#bOUQ5HeezHv!Wed<9caj^o27;zQoCJ-K}-INc9s79^(xbsz!UvBLp%9VNm~1wW6Ly)W;#oJA)i)}U}X#hT2T~SmlBEuzY#`fcE zLm<{!vPPJrMqDkBrhvDmO}((=U;O!Q#!KVdv|ga1dB;KzKfj0S4f{iwFQJjBo!H;sLYs&dgbC0XG3KhvFDbgn2=N?DAjYR+1U1u zSr5~z%#5|k@(Vhdtekvy2F*Wyi%ZIn0M!4ytc!ifxJpKkhF&6oET6n0?zG2`>Y4@~ zO3JW$_-Hjn+4xm^R-uWv?<1_hX<`|Qc+1U4RN}bUkm0&XZzuLvHRo%GAe9agq-<8VnQ3t*j2iRADFcs;yYGT5r4T5=>qvw5KurwIAm6 zyCW#k${>8T0G>4jE6tiKG7++e!dqHq)ft3vww2at8W|M%^wHVD+0)4spxL4SD7`{WWbq(8t570$Q>w`n{BDPE~=jN>KYqdUMR%Ah-I!Cqh(E+}`h%n%XNIz(&e2-Nt} zeEuDnz(fw8nG^HOtZ_N(PU7LH#1~kisBTZi)N0Z}NRb#ZAgTbrQ{tJPrLUs%Mz3LbdjTu6NQV?!w2Uhs zKo0}fI6b#~1K>~TuslWb@kgtu^&mhn(wKV=DB$K$cw?tqkex>5A)JA^UHm#nJ=u>5 zOcE5FXJ=w|!CnE82W;u^k{*`Db>F!~i5(z*XAB?O9gcKP?t@UMLUEn>&Ai1T43Iv0I?*O## zp*Y!+UlNHg-cesH(;OOUR^bb$w;qb3#=5I+Hloho zf)$hRiY5YWpsQlSg=ILn2@=5ZjdCQ3IJFp|=PHd;w0JOKYavPIMhtOj;sgrS^5+)M z*tu1%Gza)-{qd; z@y}><1gS53g&c&vNfOCwd?y|hX;35mrpm|@k@qWkATFJRCU2KL7D!C{XZOQO&1}v0 zatk1(O_TLr82knW=K8Nsu)Fe33#sZ?mRXS;D##jr*yWGB=JA}iiC$cXpEAM>uv|kw z$Xgk;bulq9CP#>Z_1=S-;yu_tBViqheFl*ARh z7J}2KW2}JgXH(x&B~r1PIskOgg;+BG|1!}RtlZG=yTj~IfF5LsEV2_im35r}^F!x| z7X|mc&`-|}`-&+S(jJ2Ca~DuwHywBseo!!~Ij|!_Tt>*)D;)>+XcY*Sd)|lfodnsy zRtptdyOdy`?oLSV(-oCc2FYT&dGsYx^iY^c831#>c$E6t9-3t@;>;o+elTYu0Zaz0 z)QJ;`y^9~4qg}keon6yXl-bsjN(>iEZ$qX!8VtlrXSY2QT-ca<<%d8J$YYcGZaomK{5^c z+wp%9rZ=L5Bmi=3Dg{Qg3oh4FPdCQMW{ifSj5$NQyfX{Mslf`g> zA=S?*tD(gUsR`@3_+U*m)2N>D4}^TX#7F(^cJ2@rL*RtyX%Ptjf7?&Xi<%RR^DP<5l&#v4=O^{b&?xBPwnv6En07chbVZmp@KW4XsQiUL~pu zueHFkD%Yswe7vds0<0tmUBjT{w#1BihMgrg^AaPa;r8Jevv(=8BZe4>!nyDOzhtQ$ zq47|DCL)ptV@w=5Dvb)7Et04Qc8h@r(sU)24v$xb0_g0dVdim*6(ic!3p4S;Vr zfpNaj+^l(P$%o8r6A4y7V$p)_Q^(9pH0wu!kzp0qC$8%LoT5@{Isso?JEQ_=kg>_u z_&*Dx<9))nQR<5BGDnhUS{L039&nz}7iNBtHZ*RTzvy+QMBmC;L@j^Ph_4HJ0s z{_q!0D8UWNb))}CZ4!t{E7kvEFigZgO*%;#QeA_b_Fs|Ey~t8(3h)$o_NU$DMr#9v zpV6y9va%TBLv2AO6|dVxaKFxLR!E}Y7qN^G5>NZeWCn4!%b6Lrwtl*AT4_hKJGzf5 z5|pTv%^cd=9oUt|=O~aFd52h02oDC6=#S{B2rxpis&6`Ki+e%Rp95zHFPDv4K{M#d zVrs~=f5ke&K-iB{wunnhhHD#?=kEF0a@>}rD(EI;qz7#+BT=wPwKqopl(|!Kdj&2# zf_Sw98>b(#3`A}Rbb_Oi6Sg!Hoaxatv6q{u=uUwe%iK`y{5l0#c%fjJ4Q6jyP=>cw z-R8|9D6oXv2Cwun629X|d1s0>m^F-s5rzNNpi!s!tpq}lg|etC4mnK@NVw!-8q?#I z2et+cK%NwO2y!O9YC7^56v>mLJEOvy^x+6yMwPl?LdpJt))J!Y6X~d5NeP8XbI#Mx z@NZT{m&X1VA~^%+$AV$&SA8&b8e#X8k2^14wr&s8U);;VNc4-0-Wo}XXWQHasWh(n6zvF_k`?(=}zR!PM@}F$;An zDQxu52l)_n{YCc_Gx zA&9beOzX|#I7Q@%sq8kj&xor5!L*4hn~5hYB43qnpy7uUq+ODEe`#|72m%!K*}C!( z;y0=M^0@459MU})LJ>c>eYN|hP`t$;=H+00+{$om2plb@;$!-5OYlM*9JYf^QE<>5 z$bxc3hqLLMN7hx1YYQJuVQ))5iA>K(@(UR<9VjqPTFHYz!O$5iY z`!F+hqRg!uqtTDb?W>sxFV;*SLE1G9DSa#BqA(JuYn=@WqFFCdtCOK4mjkr}8`z<* z6)4C3zfg=^DP0{0r&C5OGtL*{Xj4 zBHBn}!dy?oqHOD)rbh^^vEx(A50+al@fx5uW?q+z;}P2FYfXBhj3f|ydN;y--V8<= zT{sF7>tt9Lr9;<`A}AvOAfmwhP74JQ0aF~B!UP{0xgH<{hJSIfXg08r#A#^Q!$28| zf-SH)6zmu@qEHeDTafbKFW#I_8qVc=)vrz4+W_v>5OJ=V*03FgeR~w-+A>xy5b}H~ z>K37Qi8*F{sf>%|mpP4gi#(@+sY5EObXz+d$gOIJeo)CSQOFht6k))aa}?s}DJnq@ zuxn+5B({;N3}aack0&ayv{$IQGJSMdZZAJ%i3JGQNOYnA zhGQ-q?~ucQPs89FMIr-z9!1KL+>{%uESTfm8bd(31^{YrGk$au5bx;AtI<{ zZUrxpXMq)$1^+A7Qw8t(AeWB@ypZxCn=2^@X#2bGP&KeapC{x2OsX{@4n8YqmbVWL z4rSf^V~`v=7I&WeNof$2mCLOAk7WHE2}-^0$~234VL}u!*+L#~hV$w<5&OPolofPE zJc6ziC2kq7foI>`ol1~}V774+FDyI$==;@AhBG-P7*wAdH~?dlJL?v&3H;5>N{h z?f*?{;Vx~@9&>ma`C!Fz#pfD?EKLk>F>JipV>=|tItg#{kDoUf3x`luaTF@&cmQ6R z{*z;HkeSw~pXk>vEj%8R9!@&+PkK<2w3OpBqAb*qu-Tb71r?|o0#d|-hitYqAslG5 z59P*Q(bEw5EY!pnCZt`AXiSxs9Bi80w_ya$tb-j)=)$NaW0@)qIv}qf#Q3Z-P!LdA z?OLMFJzHVR4!DVS}%ctav^C8nJ%G-4MjoRFDVojAH3 zVRct(sKQYBQD%b^9|E$$A+8)&^5U$N!-v+Py#+M{0>q3(#T}TNi?qp<5%HQg0ms(j zSOB5Qd2zS}!D>=YNO!^Agdz8eHlZE_z??KAfsP&LaO1RwxRDZ_bSadzo+y-txQ4zg zZtQKLJ~%cc5D(Hevk*|5%jFi#=b6RQNX$6qdkmuIz%h_Ii8+fERyiwN0#b})Vz+eB z9SbMw2gnqO{jM$WAq#{;5`l+}M^4e*OdFRR4xqcARLGsZ3It1-%&MgUW?OSIOt+iA z0s1{bl%pXV>@cB7TBHm29tdsUI;0d_Q13f}+mTud6a&DZdRIMiCewL=YINzq@I|nx zi*>I;FUnG|f{TV7_I?E&)CK|Ro7)ID7`dYKY2RVtmb$JkE|$6)cfi<7BBS)j4eBCM z6`Y`Q!Go+QL|wgs4`&?@)Fu()nAGGIH0+%QBOp~il~%UGnyp3LVm7X9SADdM(% zA4*xNocib^tX0U!J1#+@w^36QH0pHU;D+*&h9tPIv$|4C$Ii9BZnW)+s|eKr3Xv4G z9qVy`i7ALVbiVZ8xjxW*M=gG4)Dj!1%1Hc5#`HG3-7S|YiWi*`CDKX(K=L0TOB}2R z2=-u^h|>E=zzdjN48s2cx}b5_uR{PB?tF0#5aS$Vwxpq3nJL+cC9Wnvkxc04;$Ram zE4>g6QBmvh z0u5+6i98Hc$GPBYvQIem&06w?sg07Cfl@ck7*f71uR?N?<|`5dX7g$%CAe{EPV#+f zO{U-z8#lFwrm4)2R3>26asr|oeA5*FiNxAhrYJHJ7X<~*&B60WsA*3LN2<^9z%f`R ze#@KU(&0q^W6mFgL@OmYv8_0OVa#R%#PF16KndJwSht~d>yeu3jN`wa;5vlcG<>+* zIWM3ME4RpfjX0+4R8LRSpHxI3_E4q(CpKg#J$|?Q-dz96bVBiS7V4W*&=o=C%%iag zYJE?vg}0VvwxArTQs`j!Hj?6C;R&R#;6GK^C6}DZ2zAw_l}P3TqMZBhkUYB66UT6i!2CCp}IW!5nik8+GL#}VIM?DeYx$Y%x zdS+RZ2SKRr^3Hn-ppV(LDQ-P(qPo|&+njIOB4>{K=$Xc@)l*^Kn9 zY?0=dP6$|J<$@Hb0sYEca1NLvogb?(68{wJm9}`8uq|*zVG!N7EF`M?*+%flwALd? z&7#b=(8QNT5=GGmFculiuWjuB0=n9hw=9yN*t(9k_DrMcMP6hs+2)9cJljmK+X(5N zG_Si#K%q>qWN=4&bj`%UjUE&~1f#ed6bNBd)DDL0@l+^3%O%1@h?H!xoY_2sFp$Uz zY1Xryulz&Q(qR4)e&k4Vaw<1mA1ame*i^O2m^6q~yq5Z;R6B4%FfUjL(GQ-iYEeW^ zykVuvqpkUNWmDlU<*O5ScJyD#1WC0m#;}EPI zR1j}Y2!d!gmvS&ZC2a#TW1!rd#FoY7sVV50?sbFUlfr_GVQHb*)Ndl0Q+SoSu3OS^ zhAx z4*~bO>DHENH-(>9P6~Ns3&rJv2aIC67B`#Ui&4Y`451K)sZlTziG1^U-oth7PXIiY zw$XG{i|z||8SDZ7)AkaG=q0(q)WicQe`b2b`!(IYZ@Mq2H}hIq&jL7wiVdg=HHD5P zFFes&c2-&m$fHgdpJ>%9V^-v&5CM{(D3}y+Q80rD$#(qmJ{3Eah!HbgIT4dUD~@ey z?Iince&iKQ+l1NZ*)*J;9{8|X%uh;c?3Dw{z> z>m_lZA@hTaDGiw^mi0D`F11T)rBv&6%PipEvFY_RVPTH{m5)J zvjo08n6@57cz|C$CuS50ArU! zcfpx8)=h-wpfQIpE*KiIcuI3{l!1o@!b&dSD78PT{y;otAR(l+aj}p4`xgoT04Pm^ zstJ+(j;s$mJ0poixYGwKp}h4{I22;Xl<4eIRG9bvy&zNw%;UqVUtKgc3egstUv_$bQMSU>paKg0+%29Roe!wZs(`zkT z``XoGE#966Qm@pbr2hgGQ}T%PYc$@TEF<>AxT@IP)O*G}rOOBVuOs%CC1&&5TNrH& zOXlWlY*l#}1%z%!kAh5-AQ)Jbj31N>fRIRhAWEkgfIYsZ@&*P4jGRr>0ZDuT@fz0w zwm7e>$KuFV;>iHTld(7=0HjsL2h-;nID4VDmzRpxuof&!6ZttJ#8>V)!8)65ok1Q) zulgKo8W*tl3gh|NuS4>`{#yALXM`w8hfwZ_cwSe7%?LPgMZ#&qFX>y zX_I*DLF*O^oKeQEkcTQKImanCW$?eCpVIOSr(9*{=qR#!DEe-fMMGW+!R3Nkac{SE zWzfskMAYqMzZ)x+VN1$a!UcqOPmT7vLZ%S@O9$4kz(4gV2GEUpmbQ1<~CW5XR@)ouHA!gAPNA%fvb{&(P%h@ z49qOcfX?wW!(%EU80f;`E(xD{JS}QdbhAg`@zIaQ&FO}SYl7^C52!Au?^g=(?jAho z=QPn4d&r_m1Q4Mq0u2TL6q zJ1iR-?%kjNrQWP;kpKTDWYDW(y0XTdsPaJcC{m{|9aB*bor;Ylf<0}~jBySkg9U2S z5`YY>q~{y58zlbYS1*vDq;d`pHY$B=!b)0d@Lij)Pjc> z&EC#N!{S)cS7MN_x27SV1mh~5_Yv?&{Fq!@I7Nh{ni#l%Mct~Ohgtw#(M>#6F8s<* zFEV9|oW+j*-8KU&GtDZPP0XS~C}t32B20Y*Q5tg(M+X5$)g!?#i-5?c5YYn3nH9=J zFo;+Ur8~n23I#CTgXD~l@}!m@0W_zK1zVrI;tV9$9PC03?z&;~i)P2753SHU2MIL8 zjiGUP+S4%gz{=U-`7O~O2noc6nT^G)3Yc8P+G^h+BM%oRtmD}1R%5eiW_UsiP2zJB z4npZ^XH^s-Sc@NEA13WV-gEM1e(Qh3POTrPAA9WafcY zJrrczgfp3g6)8dQ8bi$^f=^j@hOfQsvqtmV`s2oP<^VFEt3&PPsxZZ(lFkiOyi0dO zq~3Y*c*jC3BB!SQ-K-OW0p#MgCm}EmbrQZFAvo#e-XS`H%5qo_>S|JkF4h6aG2n?%~OCTiLmx5d>Ifmcv*R2-kZt5wR{qw zh3njr83WPT;=iV38Gj43W=&&=`CL4)0MjfWM)1*(;5c3@+!IF0wXhezQXr8(`6&S) zdX{wzUE70`s@ojf6HBG z)k)pn(0GU+o#R+D4usR=A&?Y8h1PG(Qq2-DWSf!3M0{i~RLTq}g%n^M0{{>voDMMy zu)N*Wz7*zc;OQ4lEK6}SvEiAAiC3bCl8_I_v6s`?-s?m~d$ulocr;VJJ)R;N&U#_D zvm7{k)f%3~4*)2dh@9}B0bsaf6~R6w4sgS4{aLzmTz2z{tp(rTV+SQ9RwmUHTU65j zsJO{L7-%%7DGRhRe5y=B&R%GXMT=OOkQ_zWa313v7y=Z<2_UtuP) zl?~=>)mBTk+uT$Edyv6SjPkd$K~;)OATlg4B4Ow zE?hOAmv_#Hy*eiin)ON$1#~to<5o!{F`o2w5Ay|D0J*8^1sIcGW;d)nEq2FzqN98y zQ5YSt$!VnDHQebV&oVl^AX;qU=`F&o>YvWa6@q^eN|QvkO`z&8kPEIm#e@x`nRLDz zJaexnGgPaP)R4$!7KVy{VoyhSV5rt5NQMi8Z@DP#7RIc9`yOnmE)NL}S(4+P!0hG5 z-o6Z%87)zSdVy{lVBvhkPs`~33KYkzUT%EX6e-g#`GEuHu;Boj%{Ic0WsSZW%w!?J z8NKnKLIH!MusM!5lADgMmyU(uX^mNo#J?vW~#x>!3v6vW?p^<31O7|ZbWdI(%EG-v9otAIcQ z_F_ET(ppv(&|^V9;cn<1HuK9)Kg&LH%g%#N0fFJt$1K7<`awUZ&=uhtef;{v^V0EY z+}}H4pP#e=AwM2FUQ|YfBp~zN9qR9gq0UxVj6u=RJNYq9@i%YBiHevb8in81$r|Bzqi7&dyt4z(N2lp>pNBgwl)VNw?s<_;B; zhJ=L=T%(S62Ts1&kFuy*t%{;(+Y7hNAj=jcs8w7Jqf~c2E<~pb3V@p=Bx;Jd{#}J5 z5y$ykOIJI+OfyMwiYWIBJgV=dUm#U=cPtcMa6W+isK{moPSWv0CuBEwc)=SwBjSi0 zw0c>gvG`$i)pVzLP%<)is|;!Fr05RC4&vZZjVchptO^U=FkXWjx}^MPcOLW_K<;=ZQL(+ZnkZ00&voxIs`e2G&i^x z;G0g)xunMBam}T6C)6^82#$AL8aJ!Azze{xe-}a+kEnh?kI=fz!8N?Yjx2oe+lfD{ z`C|6I^g_hiH`lQk0_dbcHIMZ|4g?K!TE>6~hzPI`{S~O1I+=!-&WX2UQ1BstUt}QY zfOr(tS>sv8af2-Xtls-VJwIE?sch)PcxpFGProO~%;Qg!+<`M08T++{@kT3Uct@>* zz!3vJp~x&gU({YIctVtzZ9Ff>X-;9rYJ#P1}6^9sr+?f~}5Pdzed3r;>fuJMLK zibGmix%w@jsI89V8+<{j^DL&Vw|fao*_=iJ+1(?HJU}r#v0^#t*p0TOVF7};dtntC z%gA72cJq(b%c@c_~WqHO>0R(8)y?Y`RvW{J2*l8+ z!9ue(>g{k9aU5FUTI<;Ai*}_`rH{0f;7`^AW9c-M8NJlifWm4yH@z`>QVPIJ3u;S- zX?urqAr_?XRS<}Symw|{wRt_&YrQsRoE}8eIfaohfc_~;zQnshV$$Ft`Io*_oSOpg zOO40@0E-ca@&R(SK)ykA$&oAx3z-uk5x@Fu5$7#;9=U>I69nH;7t!9WU#C&mwl&;@ zV7RM=yE|kWik%I^dsXFbL){BdR_M7K#DVBJK{CkLHHeE;nyoS$+yxn7E?9x1R6uYJ z25kg>rtb3cz$PCMe4Z`>6Mj7XT1jCsO(A|lO2r>jTgXr!$g}SUJAOGCdo)-(&Lm2V zIo&lhFXL0Whz-~Bgr$a1fV3*I$S_{?86wQ+ZyJmEqW+#o_FK^5RITSxcZ(vo2DQg} zpkG_i-PlO<6Pf0wi-*Y+&eIN?`m|J?Y+He^1-B%oqCTpti1)P!p@}s$<~JY{?rH%B zg@88Hz$uG)0kZ@Z7R1R!cxhmMJqbST&3z)%FSKbT_{)7{d-f;Ic}!#hq~E|%B=Y*c z-q8UWL+3G!^x*2T0`XnSbGI!;#=N`nyNiZFA zayxY|EVv57)()BDur`#YfFZUe@wUP62go_M#wCH$azp(79)2EW;=+bvAXD8{A+1?p zG8w1H7?h{ee@C~khb^|pL%@xT7yw0><`AAWWIby`Yfoc@weq>V485}ehM`6$ZCXv- zSF!Vr8p!y9KF$+ooUuE~!>zz%#zZs2m%kDHflWBkJZ+aCd*qZOTpOvF47^ihO?C{rX~= zDD39-N6Z4?bpoCaI6xPJ{QhO5y3aK!M=|*JlB8#M*!U*`$D5iagK+y;82NPCK5?|tzrhPEX~a4J^yd8In&u$awIAPZ)KU-k?^>r zenXeMqkx>05~_-JFbxx^zvjwF>zf8L8*XFTCSDsIn$8_JFAIfC4k@xuP(f?b3miRZ zY?MQ``;2tK>cZ@e#3HbSpg25od>w~${XD1iaW6?cPM(OVS_hGPu&rcDm+S+3VmI0_ ziM9rGS+%7DHGlNrwjwG2Pc&!f=(tBNU+?*3vz5_>@rD=Qqe9pY8d8GS)xaP`(4zB2 z4iB5)xqOR`cNXa%V;v%^5p|W!l}HA9GUdn=hj3Aer+RX}^RC3y8R`~u>VRe#Ei(xC zROzaUwO|jqJRA8D&a|n9=$7M?u#PD5K;*HVg^wOZjf*&CfeqJW8e_3KVM|nfgnaGO z+d}I|=Kee|X38$LbE5@*dNtJHfRTx9)J}l8F6?}O=_&2&4aQM}J|>knF9RVYpNg)! z2aor$MpQ( zBYXY3jwYAns;8#0!Qh*cHYm3uN;Fs8Fn!+q5NuhGlHBA316tctXqENdvq@drj#pY! z=+TEmrZ+TrMuZVn+rfIGamLa$?${F~P7zh3R1geWj+sQ(L5f7a+Coj@>6VREKoWB% z{Pr4Kw)J@mPYsoEgl zfUr@a3&S~|r{}j&in`aFIIwjma;7w8+2(O-cNfcw_hLl3B?$4TB*F`8$T0$!0s5ClTGGaHA2aH3Y76werZnEn88YOD45{U6iH zNS?p+?Lmm?z+is2V{)OaY4ZXaa3-p=fi{LYzuR4?zZ3QkoE#_S6N&210+{bVr2t5L zDf7PQmnw4sOcS&0s%m1|P`Xdnk(fC~2|GNg1uqnLd~*WF##@C z;$}Eo-@hrlsq|fSwAQr6iFyW@2}kAWkJR;|yIPATy*pZ~EQr+c)%4P^5NvsQA-vcV zSF1EEF63&ntTq=1zFUxFXJgO@U!HpizhRSDdmH*bICq`IW?gHWFhJOsoyYpW5Cmt- zv_M3C5F&DRqQ9dO2zPNCR8vT41fgZXU@NiQV;egkY1lWkac3y?46!2JbunBMD!U1l zK|UAumZn{S524tl;Z@p#V!q;^QjJn;ro&3ri-fja3c>}c$SrnMQ7!^LSGxC5Q0_$y zXjJE+TNAVb-f~7AGpMX3M_yPOKA-$ z%eBS3bF#L$;li+uOGG$3Z(&Zs^|Tu?3t!nlyGmDI%kr*p9#+(yYe*`C>+{{l-gtF5ZZP70!bQ@iZ-X~~B3)JOHcu9UA`}qzfOZdS@`fZO$Pu!m z*(EKXiot$+0DaJ4>njxk`c1Rx`fRr|+Mi*L8YQ8IA!73rU~xRVEtfCPF9kwqN#TH< zjqgj1CN{voY_N z4NQ=Ue3V2;fRXtvIJq7=#p{9WWXT$m`}6brQ$N|X%ESbD?Z93`s8IuNbq7V6%79>D|W z2m~ij@LMYPtaLtRyUti7vzQ98q5;DEqx<;E)DnL41QxWYlv#r72BlEUDCY!lXHGL; z%PvsPA%I};!V${`6FhhZ6O%|lj5Sxr+N)_E7r^O732MJ>kJdF*&C*5ERJqAaICM zJ_uAIh=+n7NNCBt@a&J007N2)DG)Uv4o7JK0_M4ak&3~RF9;V7NgP-{`1E-=8*m-C z_(9f#&__odaOs1F1{4gG8TK|DW+=?Tpd&#HN;4Q~NZ3)hBP>QEjK>-#4D(-0dHVkLA*D3tL4VLbu>;%0;oM6-#r6Qm}% zNJxo6Jt9FwDiEYgAj-q$hrbL>4$c}n8G;$G9%w&+=wXim<^%1A(hOS+8V!05wGTE8 zdI;GF@CX_RzzNU@-3Uzy#R*gjehUf(ZwCVezy%lu>{#{u3Z{G)lBacJRh!)t*T2EH|% zHh3oSrQ%)4^Opw|{#!gJwuo)jze{u`-!1#aAONO|J0IL8|8}3c4Y_UWZ2QpJ2Y>qo zZ4t75$D0Rl*I=!Nw`;Ms$s?FmLXF557Y@4tIoSRTMYtMg15jRN8_j!lgST65+j-k= zD@^NVI*_p&+Yyf|2(zJKE-nj`i2+B6>mgj9!e#S}i;c#Oh(LFMQ5@=a8vt32B6WaN zt5GYgWKaNhngT!%1H>U5$YY%*cVPBriLrH0C`PAhXfO(}4>^Hhs8uG=Sz;uJ%xYzQ zK?q|8;T@e7?1oIESJVS^;5#6IxEk|aoB^YfXEMi0nmpr$fEpN`Kj6S4y#L(*`G#iy zf#gw@k1G(mfJi)EGW`M4Y&tHb5sAXkLSfxwg6PwTokA?(6;X;_lt;noow8sP`(e+q z*2beb%ZdXS9JNuQV^HLF%NdN@Wrd|nKi6c9gW(uD*q1s{@>Isyu0DZC>As^zofZ0#q0 zl)%7^11A^opQ=?DC^iBuC~6&=FksD8bkn5%kZ`Pl6N<*8*2kB`URaGP4h^HfIQ4Rf zr2=AWqlVqiOd;9(v>k3UkB98c&xZ)qz_zD;M!^Q?gfj?}Fp%@lPGtxI>o5A-8h%8C zDR?zd2ed$M{4>Ka4}2K|?MKiRi}rbtZ9??=6RM5Ep(w9FYY+B*o!kYnF2G@`mIg+k zZkWBBix*Ig6zU+el^dFQS6YoC2}Sc^f=nNm0&Auy8hY_V6LGy2?4-po zz!G)=<8{L(Pwn84_eqb;o>`WBx_ zekF*5c<4)rj|hP_)y^fMMuosVnSSu19|B}ho=pZ3OGDj!i|gl?UPvC(L~5)7gQ}>c zP31o6SeCleX|8Cru}EFbivTGq-%qHOT6l1SJ4|*+j{Klwcz|oF&@NQ9gbLF> ztXdsXF}cLZ$B-%MvE&UNff}jtbWMoC*({?sdi+;3^vTdtQ}5P8!U2=`$YoULV2S@W zQ^m4uMh0ZdPU12w)o+lPVh7A81M7NR1M3I@1SZWF51%RuMCquCgH8FELuHSL0?_$< z{5=vpIdc25C{l-&hp7&L(p86^@1gP78W`i0Rys=7m;94}gAF)_eU9pW0Po&%i^o&ZCT zgGL@Gg95CWTk-TN!_+QCa7iN_S( z{3R1ObUX|Q<}Ud^4wQ{v9&qG(H2+Q*;AmtS(rkEgnUwlmZbq6t^e^3BM&}x^Xx81j zd44uFhQzN;bljad#k8yAa|Mlp<6!Uhz-)^J>PVd?{%X9}g5DjApC5o{+Zvw&>cyB* z35uIE@*|wdtB%`<64g1xVMT0;=G8}N+87cH$3oXL=qd)P4NiRAG?WQ)pKnN6+2Fr| zLQ0F@YD&ee+!C3M2uD}`kDJ>nQ3l0BRkYsW#Cg&EsU!v_lIY28?OI?hj0q70P|j%@ zIr(j}ZfD3b*2K#*8~+aSl1e#zn_BZIMdO`JtYm5g>xrLJ(+CzD|~2~UnE zXKR<*!CZ?<;_h2Ch-P6)48p`*f7Zu^(a&;nEdeqHixFKyyVafgK~&XQ zX|`TfU!-}FKTOA0TE zN!eSi!Yd}slOj@lc*45@h6-QbQ_stNcnlPUi`b%kQbgW-W-$W6y$!`Nn5cWYKT{Gw zvlj9FFhTb}RMVCJa=v(^M3lf1xrS#>Z+z70jJ$(5PPuN(+|L4lMuH9rf%WPR(&It3 zh^z`YjgS?y2ar|`W5gruw*0}Jbfx}%3&h}rP9-hP=wIgNrU@d@vuLudywfVi;&;lc}GjA>rY3$@2UN_0|t zmmAb9yuP6B-LJKLY}cU-$m~~0gS7}@Xb`uW73PIwfLWuRd*#j2a@CwxuLmO`lSyIR z!LIM>;Bi_v*OlZ|Fp;vit1v{v+Qe+;=|ZsGqOr)VgIl)7Y}u?^MPS@kDwL@eUvjp# ztb9K>JFmk`YP>+`0Y6qAg z>0mlU94Cwb>>MXt3?Vd%5w_ojC-s*Tzz}BxxqOV&?dGehSm6^C`o%yl%8QoP;9AXo zvvI82L1NR9CsgY&hVmyp*h6^}j_e`4iN|&D-bCHFe3En3GQ8P=d^H+=Rh1QOsZ976 z!%?m!36lcoYBa}zbTt|vpD3qWOqlRJ-lkeMT0000000000CGV>t literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/fontawesome-webfont.svg b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000..d05688e9e2 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/fontawesome-webfont.svg @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/fontawesome-webfont.ttf b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..26dea7951a73079223b50653c455c5adf46a4648 GIT binary patch literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ar.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ar.png new file mode 100755 index 0000000000000000000000000000000000000000..6357a8f6f31daf868cbe03a800a3333fd0defced GIT binary patch literal 10871 zcmW++19Ti+8{RZ(?4)U&#%gTaYHXvijW$M`#&#Opwzcubwyg&LeE&JSvwL=S&(6K` z-sgRABa{`TP!K;Of*r5C{qDzb6zZE#ngi zL<*7-7g6)fILq|V!#-FT3aCR#3i%s!i<&1bg@M7)^Ai@s7M+7LPx4p9Ag)V?ifJU* zASOoyr3hBJkx0!Cav})~oP>3sDkR&~hnTD1^rYmRw;da30oAkjsXRVe2mA*a2gtE7 z@GmhB_=9cs-S3|2f{qxRK? zW(+6%PrqraK?UXwE?O{Dk73WX~ibRaizHO6^32#auZ~mtJ{a6SC7VF;1c`x z#JQ@3R*2s>@5c}RK&hDH!RQt(wYk+NX8dqmaxYF*t&0lY&ScZvkI}-5Am4bFhUt- zP-GDt>Osd2nwxK+rc%Tg)U%nP2ui><%)Ly_`a`<8iH=F2i;JOhx{1y}zoNov16fu~ z$w3PoGbiFF5rCQb;W~w=gN3$b9oX zZd*Ok>Xkq4UpQt!U!e9S78P}hf1rvd{g{x{Sgi$KMal**HG%K;CuGowADOhKvU?7> z)0N~I0&a^Z!QilYVmT*$!G}!EwDX;v8yVk>#^;Guas{UrjPjZ)PaILNF z`BGALi$+6R{21vaC3$Ua_j_X@3JRhi)1hPicJ9eOv1HPZOvxNxwLhYwENpGH?dB{gM-v*5KyWda~TMXYR-z@)j{Cz^=vP-47UKa_>N+u zQdB7_8Cp_2ymhnm`}eVkNPd;!S3ytaOt2+np;1B{`~7zIkJk+YZ<#)D|8@pfd>#r} zQ~Mt_(5`OS?5r`4PsZxBqAxGE)6yD${w%axiL@~Ti3vW_`Kbjz}>58c%$9AYfCX|eeA zKK*2GOu~ev#X3GeHPu8^G~~9&gry|E@89c#)aWSdzX!DUHy>(BO2r2V1d^OBv>{59 zKtZ7vK42yn6+UJj61?lqJ-)HQ&Q@nYK@P>BH6;|J#-mo4A7NoSch7<6wK3DnH?<7c zGVSF>reAEFu>*+$*YLC{$cu|F@4eGBRU2-|ha?X?o#Y@rgG+K@A@r{q@p# zA{=8GQid+L6 zScDnO8);~&#ZlyY98rFTD=lRV8u>LeHix3`=Ss$iT4Q)O+Z!F zAAp?P+@109EUSX7EdJ!NR<%BSlSU0V zy3Af*v$lIwwFbe@_Xl4bSPt&hf`&&~zkRcDasFJQZ)YUYb4kW-tK1`{iwE&*Yd6K< z{CUHs=Wb#pVD`7k#>!DDdP-5LYHYaJ#Z|3HUI7bBLQL!_CFR=xwK?F8XFJ{D6bE|| z+{PMsd;1KFWDf^}{3rf|sjx7&CzEYRPez7{sWO8#(_(@Z0hKtv_|Z&DT`eJ%cV1dW zg^H>$`ZEy}w#e0o@jcShm}8H!-xsxCeubh#+k9$u=O@Se#UAAhElGqK;OB;=57`ztXwL(c2B zoc~vX-E0{DhcE-C%6&evb&&YhmpyFPESo zx13--lPObEH-CMd0FG!xvPudSj5Jm=(_4v2jf8wjYwJw8cS?qaoh35T5pfe1DJ`k* zX+;ykW~8Ml7otQPjks~b*vS69)z16~thS3rP2LT6%MDEyHM< zO0xJMFGBB58Y;0z$E8ZmZe`8`ky^)i!f|H){_*0XwOYu$ImSk$T>)KXAt9;{zsA81 zI-UIYy&=8?1nO*T1K*0A3m#fq@Bcx%2nGK!6t=eBRdq=Qhv8kUzoK^wtJw=Dz?K?b z$F|css0TOvd4(1G+NZXx%jsHdp_hSo_pWJ3`Enriz?WfeRb1^+RaR7FpwyX{lVd%d zS6rsar-=FS15ouZ&nL_r4R{aTAPUUu?10+NXS&?V%8rUNe4oSta#dB|yW8EeQXLfJ zT{~MvA>T)ebMOyOCRIU^>y_J)4oWUA1ii3W65l=}Dn=m!f_WmojH4I;{(axRA%%=k z2)@p-@_2nm+k+Q2G<@40a1wgs4j%A+X4GRkxio&r$x#tVAOXPzr3kDr@GK3Dja3H? z&|}7O*(U%i^;a}@uxLcRPY2OBboD#TI@-EP|FKGiJG=A zZu2Pe_Pk|X#lnoE$BidMo$V6~8=*)`4@qXixj$Ehfg&Nv_j&N$pJ20OMGz92{Q;eb zMxq#SnFH7T13E^tJX}tx3Nr0A$VKsC$3Y7`I9I?`MdskhP#(PMj@$)HGza z$OX!gI~oD&7MwK^&pD}}fb)f%N=qxl$___Yi{?K-569@}a*3lLA_B9s*OLhH_s%yM zT3M|ZWe;-m*<|pr?W@~|Q8+z0Z`GQ!%n@#^tQ_`7OiM}*73_>K;0BQjAD|VNjWsq! z@_)Vv2-QWjx_EA_8YeiCmO)Q8YW!?UB0?mrukT~FOTokA{w@A;jy47;-{NA`qn(qJ z6#@c@kr8!zO&uaW&gIn?SX|QwGYd{LORfywJ!9isarEkH{`9mqgMnKd#&F@l_tS;GUtdW79apg{XiqLu<#4hPv_(**R}Mywc3xyr_!v%R?H?=w6hGn z72lVopvi5Ry)%e_@Zib{X9Nu}Ji7nMj*2QQp(O#u%dm4I^6^WdhPAj?*!jLBK*)ta z&dx-8Qhs+QaU_8lU+UxI+B-T>j_RS(y51)f63v-(=CZ+-8(oHC4#|Pdpd0PWUx7}R zb(`v*c0|?)*qkPFLe=*1ve(J6#`f!{%?{aRK-sfS?Com#`%{&aG|XK<1|>Nt`gh`$ z#`%Pz1X08KZZD^Z*d!nB&t!RJ)MX;-0=jJ8-<05fZuR}6rE|7|&=wZ_>Eq@ z`IsJF<<=4k8`NKRVjlb-x3WUv9xjbN1O&Vyf=@RLO90dwP0SmV+{)xj3`70v;mAXq z>qd#mANzF7bghYFO!l~8`Y6T|1k|my)LbCc=+l$J#02wdm$z|GALxYdNb zyOl-M?{sJ9Hdf!A4<s+nn;cW;&$z!!O zDo?K-TsAg|>y7sUq+jv{Nl8m{MN*O>i)8q}N&h6UCsH^8BP&$6*KMMDzw8tEp8Q32 z;mb0J=xinHaz--vQ*@W{Sxm{y^^UW)j*cEkjY4D@GaqfSengP&`!&*@RNNtYTz;eL z;+rZ-2_txgKK4)MYeJIfZ`{6F60d+0Bl|?~`G%6mKtVYds=oMcJX3o~OgZ znBJP0^+KWG=}J~6!{M>aKhS#;DfL*B6{;2oms_vr>zS=aA_3lVT8rFYzluHQM@8*t z@~s2gwb-`yWp?4yd19Wl7PYxZN36 zMvv$IgPLzxQ6ns-Ou*M#opwgpc>Q>XfHOe`l>$PEfde=k%ckC{HcHDFZB7w0}Zv*=z@)TJpHKoC5xOQgPwG74^Cpvwa=*aW987uA=YZ#8n z@9xg5tsC0h1>|K);FNWiuMbr!lxegZ8SZyS2$hsNT3jZ+sg_bJb?SY)DLCQtW@iI_ zxjpbfR*f8k$3{ck*0!aqD>XT}XTD6LvlG%PBLHh;L`s6o`35isWr5l5AEQ@S-v)or zV?|JaO3QR%KU{UapE0|iveA!`h?=6dqjifc?r>-bICGnex*@I3)Sua4?!6i2Cb4*>xuDM?o9 zcQnlAVR2_bfR3?od}O4&zW%?zav{9D?c3Y?o15)-Cw66Jy0bIii{x2WyEbqF8#ylq zf5icM={#Q(<_9oEL%-+sfhpUcnCS@uvvVLw#VoWq54fzg>cXQ5o?n-{GY5qAxqb2v zDuycd-4gTpfs5F~4+?8ZiG#bta}NR(1uUF}G(|x>zYjRe7*eI=OZzkrw8#z}_U{S5 zV`8TJ!Z>F3_4M?#jf@6?&J3_~JG=SfY7Cj)m4C8!b}LJDrq=&7XcB^hcTow8+g*nWMv8c{GRG8ZzO-UURDKAqL8d#0BTquTJZja+T*!?=#@vC)C_t9r<4MEk%PQKs7V@Rs{@wrezm1)I z{nt5`gyL&pe{k~=iQdY}>fxUA_MQ_vYJ|-)%R-BUH{orBIu;5_Wq#f+or_OZGf8^* z=TE9!W#_HlSy;3td-dHt4sS1fZyy4dPyHkDN-k6Y4R&%?HEd#vy-q}jK_ziV`&eCG zVYgDV(^GG~m6Sy7;z9t*;7?_w9=g8gyuO{2Q>+{vE(Tg!mXOc_1i~%QVSlpFhDD|4 z?k*_D*mFeI**OSU0F$YvOqj9hoRn_&n6t>lkd6Qp?V#@(^-cXcv-< z{XTl=(m7lgmjU&%@;0UCZ^}jvYsap8kwvkwy-^n>SVJ+E(2I4{cj*psAZel3Uj%0k zYuBBw*8D*~^xKG)2@pOcGkNjy+1M^QCpYT-CIM5)09RXQ)T00w)a;lWXy7(z!s7pI zEv=)YucZYAs!1s?x7BZ&FqCZfK;WWE2ruQdh44>Pe1bcXvdS{EOUx2`dFf zRg1QC++vH1mB^0(i+y=R!yTW8(l6wZhR1O8b7s)cQo*6W0pPf>AiTTdNaMY;&Q0{C zVH)huW-iCq7kXh5e*}GY+4B43F3Joj7Y>e=w6s<2I(guIM>}#!OlC5Zr}y#Sf=4(Q ztxF*8;KJ3F4E&beXfo)H52f{#mdQIuldcj~`!J z^cGfIV)yobHgaAq)p_{}hJDYfWU3M~Ll$~yu}sxfNPloWf~Sv0HA51HyyoqK4&nC2vH7L zUTs4qTuJn7F&D#^{iQtEGe6uj&-qI!WfvQ346vyFZh-bk;UUm~!>e)1*FM!sk5)F+ zt4030qocci-zV?^0T&w?`64DZba(Pl&zu<4qU;hGZe*q#CA7f@;`8f7fEGjZ>e(u_P*k{|Q4xnD;%J zwAwBm%Y2hLwZBw-L0cQe+gk(&Zq7L-SB`R)&~flw*ipn(2RBry@CBy*MJbc4s` zRiwf+l{bOM!(Q^jZFwOKB0clDZZl*jmA$hFwb7y)&-nVz63-MDn;jO`9OYAvyw?W8 z&&4jGiH&#O4*r2<9ZKHiu{He@FYPOVg3?mEVf0@|vkJw8Du8E2M3hxRyD=y^Kcl)d z-;f;&hxZ?q&Jm$2ER59AaqbJfBjDEx8lkYYQ&*732DF_vLugyuLb-M!;Ov0d*_&Hi z`PtYgsj2UvptJPE)zuf4b=(%K{Q+SI*c*Vq1t5>E?&Q$WVbeyajm?dYPXBBnJ{rNj z*}2*G(WY8e7S?TW_QnP;)2N%5r7E7DSBo{q4;PTfM}8vfRC!T@tPTgmv>-7@ zE{*H=LwRxWnjo>^^^TJI7ZAVz3Givl_0yZ3%`;kgA=6j*`l`Y!T+J=en$H5d<2Cs_ zeW9LY=Wh`%uPPFDfHRQAmwa&Kb#y$RXWTc5gUvp@rLC>KU#ZUo^P{{xw8pegqdeS) zmhay?H44hvSkl060=%Te`R)TDQyd*_+89Ewt)gsI_cQOqefKO>BIr+{y`~@UMZFIm zw_U#AoEg0#tOze6B3QsXd?k8NRok7L8_#6cuijVN11t%%ir?b@4d5-DEKtt)@WEi0#Q4_x{qC31M~K;O`R0S#pS?XP zlEL+bj|nrUOHwRo%m}^fm6Kng>bB$rB?fG- z`cl;Wm6QVJ#xffP87=!y#woNgP=NixT^0)Dd;7Q%6kRXZ-6KcHcQuf3@wm;+)ycBW z4XPr=Jy#mKdA>@+uTHMWPj`^HxVWUJ8%9LL7l7w-`?a!UgT2<-(_$Kbg+Ie4HyEf5 zJ`Sk(;8G~kI7wcKScuhIV%H3yAPLQ?PN|S*s71mI5u4jesBoST;Vn zE)8;kBjEq`0awOorT5gx3&2vY84;_lp1u3iSG-=X7sptuJyT$xBUwg2u-82DjX zV^ib7V(jM757UIT{;dx`c75GVxp!Qi1y~#EiGidaBZBK|5SZv~faX>SXinoG{fCJ8 zh6XzzzFF&hWnXS_DH@B!(Wu(*J;49~@n&B_*3xK-hR)gl&Fiq;Yk%$WDm^XOFu?EM z;qobU-k}gZll=IkNerW z%N(%~XMje!o!Eji3B=HqH4jQlMk)<5l{FSVtGT(D!@_cMJkA2_ zeB^-*VS2sAtqo0#PUDq(%dYCfO8Q8=K3c6_;?xm!+Mmeci4Gq1|%d@b~ zK2XNC!_#*by`q2PHtdsygHIro7iQ_wM+%U+66>f)I{oJA_Y9tW zrLH&;U^=+$T6d1U-_|>rB9St96IZ&rRMqARCen$j^wX=&qh@E$srvG$|@@IzIKLtc%aSCzZMk~q-r$pjlrv`C&tCm>FZ6}uOzLmzs)(2 z;>H91dXv2u8gV&P;Dm+ks+GsiV8LWd2{^yA6L2qGPdlkIc;e}CEfJj}Iuwom?qb2tMtG78b7dhP=j*fHhRN z3Hc8#%3~}0Fn#i)-Kd_XQp%m(JdV49p z=yY**_t(i6peto3C8ZO1jd%xx!R!p>e`+m${d%IJdTDOHZsc@wz1=M+7~LB)g&NNH zzCX$X=m`57G7q$;#=zyegQQw6n5Vrlryr7C|VfG?0mX z?}tdf8ANf}+*)OtkD2UG{sPoH-bZnI%|S08LpP@*YlO&q_mLmaeXp+y))lPG%0Qp@ z?ebS5#7nsTMMS`99=Qc*Y7jratH*_VZi5hY5rFe~`xd#<6x#JPk*pILD%inB*^nY% zc8Bj3epuXmTfV5cGh<{+wu8GPa0Fb-E6b%HtZcDS2|Z<(x3;(Qye@Ov{_fE;&Lv4p z+nme-c3x7_C@X6;AQ9Z$ym)x9x9bQ%AVi}7_5##-9~_(rySg6bNlYIdxq%9mxKI&4 z`|U_Z#K(K9tJ8DzokVvc_I2&=+h_`=ajDk_L)Q>o!{@Q$>!?*=a&RmO_=Ezfs8kza zi4KV?70Z7MQRrPhInf-IxO}>eoel&ef{nv5)SsZP-jI}t0P=mQSwcG4`C8DTU2m_y zZJ9kVWpM!LNPByoe5n&4s6zOFg3>z_bHdx46q@r0-xESsWeePrbbVbuj>NLhnwc*2g~cTt}=BAhfl33vK<9^s2r=soYa+P7KBWYavFuXyby zm-M`?<2_`%$%e#J1LmOO;^C=|vfA45^^Qs)V0MjB_(j`Ae%g?dxpq02EJdGlwh_Mi zqwLrUZfc!LMxFsLYD6N+J}o_)nNx6m;of!mZ7(^9W-ls&wyp_nz2U_8;RKf#3rBq) zh{8WV%X8cUY$8_-EZ{wt4zc0jit2n}_1_(yy1nK739{34X(`_{LNhfL+zUoR7~$X) zLp;N}jKjjk%k2BOg^NpLX2 zv(3UHX!Afgb^5Ps*MaBF~eMhmr zS()czm1TIe)(8Iit_F2mt4|czvH)B2QSDMo0}}TTq3#!%%PDLG}7wUzNSr-K_{qRs$)xgbD8RihNW37iVg061T{P$#e0K|SkY98ZD`Uwky&Pm8t{CqUKkD+vPqHwuPn@v>olD&%=~3ZOjJ7l zlaPo2P{EiOmY5+6R(yB&Qu0^|>LL|y#1k6Yb-jRfe2I(QSNMxUI%cR(`R*TB<#PWZ z?aj<2<>ZtDPQvF;G+Mf43CT!+HkOyi787+Y`K_XvOpP86cyA#{uz=?UEFJ-5!uyLV zar1@yU|_@%SYN|J_vKcUVW0v6*hYsG&;i4Yj($vObix)4xfiY)v{%JIvCLD*}O(2p}2Xh<$ozlV&8!a zAo$uerJ$j`OilfjaI5O;!xyT$8q8#n@7#bW#g!vxAPOGHH2-aiR74^cwYDlKU1WE? zjY`XukjWrRUMcGNYmQ3Y{HEW<3PkuW5Uc(nM307#w-g@EqM%@oo&6)=QkK9Y3QI`b zZ;CwB*5bOkoj2MArOIz_ymtcey+op>_xiw+t)$W}9)a$E=91;)uBu;tOiXM{jEa^P z8Hk4`={M@d*w-B(wGJ6GPfw#eUvwe?p`96$8*^;0=Uz|WMm(qui#%dD-%UGqN|Qai zf?wdy63kgvW@FgGsz@$kVeuOK1wSoK&*lWLc<08-8pCeU(dKIV(+^>6 ze4deRVG+gOIG?!51v|<4+dl;=)5yq`{Z*aY*%>=KRRd>?5JYchHnZO9(~~F|dg&rd zz7t^4&+48Q`kq0E(|pF*OGm`9 zz5(~Pb=}>ub6>ZHW21pqb7UUQ4);A8Uwv9o+J`#vGFvKpO7t^vF!AuTh$(CRa`%Vu zeG6lky5b52`LH|&hJ>F#YYR|%fz%$*APx1qa44!r5xlCSO=dFDw|r@{vnO~A)ym47 zAiza@y`6=EgS&n>pP%~aDthI?Xv{=&YIFDYoP;}*Ao2#^Jh&;7i2IWi=I7JV(VbL` zMKp0me5}g*0Nz#oT5(Rdy)8B-OnV2)!>QAmKfa``t(UNHLcK$#$$?@rSg0xQEhd~s z(3|~c@E0bX`p>X?u;U7ROp4$2z!9)H1w=tAYTSu5iSmc+V?u)O>7H96qVJ7oIk5e! z!`=DrdpfWQ>pN9tZqHiFtogot{N(cDD#P>r3Ll?`AUYzYxA*moNG0tz(tM;avBLLL%AJ_#k+&9;?DiBjl6&+q?faq3f)^S33;{YYr~jnql1ULv+BcT zvov~jqeexU4UoUDbohKCk_4gSX%eHOOEBVZUM*59MrUzfv34X+SSSmyMM>y&30mLm z^KESn@PAC+PI53*7ff4+l=|~oJqY>By@p=b$52YOJe*@G&6k|t4=|l%n)J0{E<4L zT&mumL_;vGvoeHzKzR|aNxY;<4@eQf8P=@!8Cew-bcy%cT8sRyhuW=X0zo34J_Le5 za6p?~RP@&3Vp>|Z0{DCYIRq@!sHk*4%g{?wy~veL>64vNso5rm8T-wAKf+oyvSxV3 zQbBE-GA$XI!SQGZle}&-RuBN$=WFS*={yt>z!tSbQXdNo;4kDeiUIqN5Y^?$nI4F7 z;`#vvSx-u&a*b4pEM`pN)nTS|XoKtQ!7QREw!HDtT^u2>kZNlrehG`(02S>km5iCi z0w13ZgQ5NW1dbJ$PG)wuJ$H>wEv%z`#S^O~Sq(CRqsa=X-Knj_uty z-7GzgB>Yb)#@1dl(^mkh`x{uZdw5hR2{jbR=EzX&)|%G<-l<9tI()**uRp1ti$(jV z0tHp+Z2G;yW>mze64M&Zl=+4_I%}K#eMS? zmrQ~wp{bW~&wQPW8h*<%n!<3zX9+mdQ6t?Zf?t94hZf!#@%gTxu|YuAWBZ!9cJq}D zrgd9vN;J*3*!IVYm=*s8h$&bumi_gWT{mkeEGLAW4qaY2l%fA&T4_~==uEj4D_Q^Q z2Mx&t{NE7vROL0~CaL!d_~8&M1bgsfbwbR3(2VG3^^a6!K`0}BRyz46)J!Pvo51IN zbE0XOG*)>>L280&56<5=T-KdU?)bLE&h+0%t^)qb9@9%=2fP3~NkK9aisF@`MnC@t D#TjZw literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/az.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/az.png new file mode 100755 index 0000000000000000000000000000000000000000..b6d8aaea5131e8491524312acc3a1de9515db790 GIT binary patch literal 5448 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 a1p2OdZ`}4d(cFEF0&2?IN|g$)LjDh8pqnB9 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ca.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ca.png new file mode 100755 index 0000000000000000000000000000000000000000..9d6d955f3945f11075238e6dba74dd629f44e76c GIT binary patch literal 7159 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 vSOS{bWM0~=X z$az}xe|uL3NpYUEGVJCYcLfDzy`dp_{J({l?bujGF#Wb=*>}bFW+`zEzuelfMze?E zr?n*CZ%dsnJH+{_!3$oK&eJvQNQcyz;5*O{R%YY9YDtO9QauUVmS3Ojv0r`CBID*n zbzqoIxy)#eU}c!S1SrB2D3mxy0W;hgwRJa-YJE0@;=EUl)xHoo1N^?#-Y3KaGWr3J zcQ0T-naayft?X@WL!1IqnS&4ZzQI#0!dR>x2@PxGNX`I-$f=2YwH|4CZLOwetodxp z%GsXg?yaqI7V9!^eND>*i4$Z$1S=!gQIZ6Cqmm7j8Ur`s90E(&WDS-@5Q5nIx^Y_1 zf^O~M11-m|)e}ttBhJw8_d7Mx2-f<-Q-8hD&5;fn3&PON3Yb{$589K#F#z)~^1z(am+ONtz3dc{ggvhXub6aVEaNu2fP3e%Sx%y$X!gh0EY zbK39_H!fJWSOW0~xFdOJ0p<7$c~t5&2FXz)HXt&>M>*SQ4n=Mxj8U+AbHEyMm4sX$Hwr0e_u?J5nm{<$BSe&jFOq>zK2!49GJGIbI%?jTmooIrQS$#3}iJqXmBHrU~%S z%jrG(w(?E|HcFkE*njiE0;thqh38ovABVu`46&JVOdfh94C;YCH?dF8hWB}nqVL7+ z))ys!J3A+^0N8+z_kjuW2x+0ePQu%qe)>-k>0R)~YZ28k#wvWgse`ZD&E;iv18T`< z2Bx3%#j< zVWz~mo~x}al#i9t@z@~2ck+LU1@rt~S~7c!;-tLB^I2M)+<&z-!l63%0>xLBLC==> zM|@4|=cAFewZSc`++N5xQtXvpg5S+wul(GCdOxtoRhjiqKR zknWL(Mhs1Q81cjmcW;eZv41rfs#^@qny_h^M{|($7kr}(@T)2p6(-8W(bZn1*n_!< zjwbYxs!r3?5bKW9oFsgd3-VfC$qOn`t{*!s)(hpv-jeVv&7FPzwb#j3ZrZYFe>ecHYg?-FdzIQ0n`j48x9RD4pbqA@AFvmxALW0|t*D z^KzsT=$z@=EM+=gY`UejMx&B`r2Cgz8fwtwUTa8*$Oi4>q&!BF@>GkT4oNwt0VnC%0wTZK#c|VSOF}X0mKE{On zDjV0ZNEO+B^TI+s**Qd-2zVUQH#IetP&5Gm1oqZ|KAbrPzi{E05QLaOf9j%BlB@3S zJ1(WoN0U0H^0+(#Q?R_{VuWJn@(aonYBM0pr(CGUtQGpmEU#U0_u|XDLM_p&IIHRD zX}tgVIMkWt3%9p5QE8oGLjn-`6O)rPCX(Ai+RmEJ7GtWKG%7tyfN#i`Vl=|^Nz~NT z+f|?ChpG%m+8Y{Ojaq75g53c{r!qVo3KU84e+^ji_V@N)J>)E$E#*%8L}mPR-mlwO z3<5vopNO-*thP|2e9&s#A(jbT`>==$00371lXTot*KIAwpwp3hp)#V#ZI2?ag@Isx z@L#U3&9|6`jDs~=idB(u+8+Dy@-&g2JXKLv`!$?K$m*Xet%A8NB7>}zUK-{N9C=iU zgQiKms(rh5qTPIL@tUay5~IJEnTf|Dqobky3_X)+YFI>GAIh0KXy;G>zoO`DWOxw5 zNr6cDFb!;9fj91}WDQLw}Sx@{>jAcuxql=Xk$J^NDe zvY!zFprn!<%=H_F*E?L^+$A%#K!eyc7&j;CmAYg0#O!vY8|qoQ3{!5*m$P$)n! zaX~%Cvk2D!f!89S@Nms zazq0Vh^yJW^QfbWtUbA!B%}rxAu+rUK-6Li#SQEE#0wM?{Pv`*N23O-F8v<6#39V$-_~405>-+N#$a zo}i1hpSLk#rQ`vi#?I6rUTH)_IM;z!UrIq%z;$sOm()hnLsKvt>jF65_j*tMz zSkh7QDDYj5w`MY}1H0ATCqDP9WM`YzHe=04_MnIhU~6$vq47p!s(1Ey=7AU1wtgu@ z013GN3@nq*BjH*W2uj~0r=n-(R~ih}*{8ug8sAap%^#RHJ}s@5us0v+uo&{>WZgpo zd|x_kY<6y13**EMO`BRZ08UyFPWkulN3@z8d9{{u2W$}qj^$L91Q&l-uwBx^%0k+- z8Z}ygUacCZmh1ovssysOrd!yE$#a{K=0|F(p~0S~Ylk)eyLf}|U;BB#!O!Dbb2v|0 zG(eC2$j`CQvwGEpd=Ins!fq2Vbpn+!^zXGX1ANW9T;X}lNW}J_vp*7&dQKD2SBRP^ zR)dU@MW^^7FS@{&MKK-X+)Xoivl=x0%#C^&0K3&zPDWv52Kx8Llt)Y{Jg#%C+Dw)= zv4l}p>Ya;n$8#z~YJS2yu$@kbb!gXrvTvxfo3F~wHe3nQDb^Bez;CZuWV2eBZ&QZo zcdgwnW<>(6N3EfG0+aI~jSE$5^0Wg5T?E+g{8M-JcSGd}qBHQ-RaBq>-a-<9>zkWY z4%aNx%Hk5iAPL3G^D}Po_*k^H+BF&6^scQNXI%+C-CsX+!hTyUb#@#$ILl^N#!8W} z+B0bE#nhZGZb+M|+bh^VxrIBTdjC+dWrdc_?5en;&v+Z!pzG9}V#^RZG&9qr$@p0Z zd(jXT9U$48mdGX(UUbaoMc+)^>N!aRSWbJtQQgPRKwiXl?6t)!hIC*JN zIduWq2cnuAZ1>Yv)6(^tbGtp+&6gUY6Hr)~r#86M+sX79{VRL$WIoNEA1iPw6=pzz*NUrvEX@9{S!%VHi?` zWYIyqC=r?9(aZGPi7xSjw}`50g75&qFEpqrSyI8X%1s}=*pkgDX(L~>m96OqDZm<& z9Gu{;PrBH9o9DddgR|`x-oN=)<1BR2_flrW|D^zS402odX8bG0+rH_k? z({{o(Gzn-2PuTE&P#x#<-EB1vHx9#gsCp*|ATbD5I6*H zC!#9loxdA--%y1!YK_{MKVuN>4BwglQ>X=zdNZV6bJ>mzp&TKNqi8RwZ0~i=q1&(K zTyS6N-p;0Gq6u-)?fI#FM~<-Kgw(R8X) zfI`Y!aMVBFc9dN97)>9jKhk2qEcG|#&G25a>AxyU2Zz!GdP7 zd#My?O6fC2mjn|@wCc*{GXU#acU|A%rPw$nQ+6-et_Rt4ZHxR^t=Eo5 z)utW=OaeC@SmdLmc`jwaEf$LJ_t`w#Ir_I;);C2dB)S|=GJiGq^z~i5)1{+hGe~4| zN!6P+7pd&i+L_dQq+Hj#WGSv8BD z(dD;@TMEHn?w=3u-%!bBTpS)co3a1`NF>K4eFc0JfQ8)6`%=sH`^L0b0O85VJ^*?& z+7=V(`_FH||2|nT02G0O{DRQ&UAJ0mo5`X{$&qU{1n{6Fy%sH-Zdw)wqv#Dzw2a;7 z7sJ%D*8%B|80hUN9$K+h437s5)lp))iZ<$%il8teF&Y%E?=vpWUyrNY zJe)Ah{w|v?EwMPGN0``{U_A`o@A2yyJiCiJ&xyPNHXJ3=iXsyqvuI^$4m9i<(E5f0<>SPf&UpHN%@L=ry8ZdX;}HZn_1kHoNA7 z`!U16ALm5oiWR1ehfQND+k+UHqUonTHGiH~Vd+xjbu*8mj>?R#qe9e()c)bt z0f@_Z?Qmi~^z(tOCO1QMYi)LHXyv14ED%a5$_)=V}4d+j{;Sz`1 zLVLzWf|#Q6P`LcX>(b?d)DmdhP#qCC!9(K4O|H*Y@5ZgO#pAx)yX)IUL@=BVuS;9y zc!PxFU8CV(8VEKVLJ3JD8e)>2yC%HrM1-qa9PSdiNW?*AyIz+|}M(O#mG>?r5_RJYO))VtyTj+pbTz<(4? zjPGQ(y)5P1i9H`<^?I*7ICuwRYg$H79cdR4+agI5(1Rli0(BW2g)44nwry&7hvz-| zwp)EQxkCr$UZE$9wp^VX`_~amIx#rmucns;f?aN-yXn=ORsaF=S|TRu(?N{Ydy*c% z2jUb@skv_T5&Cx)_e~<1F))`)xCwZ8);571wu~2Mw$%+PXKva_Z(Uc)YzrkygEEtX zrAqpy!|h4o?$`_nu0Gro^%n<}F@8HO7xmPV)4T`YJGE>)M8vp(zLNUMTke@(K>eJi zu)WuwN8jaoMf*_Uo>vYf7(i2%L9niUj<#k)|1wTU!7}hvyra|T$HSVaT0266M}?FF z1-pIU1C=GQH%586P&NKws+oq|Y-dkL?d5q+PL3`=2VPWY7vcK4^WgB}#Q{K(or`~` zKb;LYuyysWDQiH4OU?!0bhyLPYRdQ~qbYP$1p9LX5W7F#TLKvMhg*Qdn`kCECSBckX#S$M!ZoEebk*n{hWaihoZ_q*ItjUPu4(Sb+s- z%1XQ55~L>9&Gh!}PPYrsJE^Fc2x*^Q)F_jIMQV<=?$MI(<9Matj@qMD?LTK4yG+*I z_|@eUGvfd;Ny?!@M(2wfMvFF!MA2vnR^I)2VI2V+7WnJL1uBzL?6phj+t z3AKT-s^IWc{ks7R-y@mL-CK7%aZXq`C-HEsr&O1jrkd}zsW>>|8B&iKo`S% z4bzr=+3(=KT-;k^0qxGWqj zEfqo2`AkhlI#VevGog#xoHDhCqb=m$ncUP7SzSEyJM@Ash2yA(G#L8AeSSoJc09e| zPrtskhWl`779RyE2gN!F{bgqH%JrOh>>ENtW&zg~ z!;bV0&9Mq^m~%fiT&rO5V+`FB3ncL5k8 zz$Tk@*$=gy_kDB+2pUqM^@j{!eF~uASt3tz<3Cu_E!nuQrRRsdfwJ>TYV{OQj#udf z3COun$$^t4$$cXgL~%@=i*QWK@}hk4t_1Ol00XtZ{JMZ1on4K}2}@I+$9}q@LfA(Z ztSK?^(tHy;2;mF&hvaxlMR-||Jed15vo;?NgL8-Hu3opYTVUAt zZUzU4t3Tr@QYycE#Gc&rkO!!C!SJwedFn&ix?{g=CdTEaFkwLiYFmRDAu2(&y6|CR4C`dygQil#HT zolKs>xcYBBu2&YA;74SslaXhrs5`VGYo1{pF3koV?-iMH32LW3jteYgq(anap?6Dc z>Tjht@dmn$9_RXn;(yyr@hvSVsg^##8h4f#opC_i(pycc>pg+yc7rjZ@cz0f{SCVA zA7GYi)fzLgr&WnqwPM1PQ7Oj-+qs3@+S)3PzWNqt>nJ7tboWKqiT!YZtXdNX03<>= z{fK=5Hy`?;o6oB%6R+j<>YuYT=W2?`@U!B;g{fX}FB=xI-JWdHiandJ7TCVG~{0Sb^)5qeZ+2ysz9MQ8S#rNvC4_-rQ} z+b2;RbnTIE{`&U8-|aQCL52SzNBqF%w~4FRp1|kbp!q0&Jgz@Q=Kx32^WKJxC*lW| zIB5{%C2HGuyQZU{$ItWUTr=!YfGI*yP!Jyv?_Jlnkiw_ADkB%@8C{7d8&PZX$63rG zpsg^Wb&gwqr2sK2O9$`^Wgsq_&(xBi7;DS%sIDV0YyX1n{@iI%L7R;3rmJ!qYf}0` zx4MwX%Irxz!{c^ki*j>F)U?|bo9=ltcMDPg0~52Ul-~d0o7y;P9+5a(x`+bC1&!>c zob|hyC+pM6J+)R0PFio7p&42)Cv1dNeUM+Be=bUdXij(h1Bg?VBc_7fa>M-%^LJjE z#G0{FTZzl^jtf=1+#GFyNxFnhibyW=ceqf<5OOF$joCZxF;VzHW{@aq7Xw>YSBnZ6 z^7j70MQYOH&Oy+eVhToP&CDwKr_$x_3zDdz#lfa0jAHCm~ z3LnM$JkR)-lbhW9Qp$I|K9;@{AQk83^;tBsmXCc`WI~zzzhM zvHI{h6vF2(w(iyf=~6wmCnTM)!o>XiUAk>oDu->?*H35Gek-`lGpp%aC+26*+122R z$k&m(OE{=a1rvQnItB3C;#Wmq?536gy4k^jUAw7le&5}`;H9M{WWMJfy}w@V%Q3RW zlT+fJscIkcr@ZmU;DDYzXU>AIZL6pX?gpDR--%0G=$6JTTTi;?s77iz$sZy8mC3gb z+>XaBR_L^!XaTs z)$c2#9SqFJlO?j(_#XJDc*`Yf)@)BW1m9-4fvL%lir(HI?=N@r^Yai85W|tUj=YzM zEIP`PGN2=BEh>|RJVSeh9c}5C&(0N{x<9PY9{ZiD#i3B1Ny*9dIvp*=#lurmviY;H z!F^rQGt2AjbBVzMZUr}WwbtZ?K8?xQ6M7t`U~vY!3&eK~Tr!WiCl#6n;bzQQZvsn+ zf6yT`l~1Ndr7ZDz3W9@0aB*>KYimXGnfUp$CrywExfd)N-)o$UAiP{EJa>Pw3i{Rn z;ke=#Rl80b$tse+kHR_F+RD|cS=FljR#c?Jl5%otkSy$T(uElU{v$fMsd5;=ma=}9 z@A(jTtgo+!A`xn+ zsIWVo%rrExmM>bI%G!40m@^;A0J{`_61~cC{PL{@!hzAwm7Es)PL$Y5Jow)A@iiNI zV!e6Xg5d!EGU^K|C@2U|2rDjb+@tfyQ@{Z(V{_3uHOot%2x1v9rLfHENn%m;Cwq~Q$esW9QbNaA8-#F6&jKZ{p)sl!J_wMzRb zfhy+dqY6@-B!Vy+2Vh#ObU#(hh~`g@l(Zxue4amH+wpui7e zPxmW<3t@Z!03!Q8FF@^X`!&@?o6pNG)6L(TJ9euTM$08yWaOC5c2@?qnw?k7x6aN^ zi^jIr*3leG@D3ze%t$VVnM#Gq-X?9L>>?ejCOOfG%;RKqq5b@3+ie{UjW(Ojwv7$= zwGg?!jQQ?voYq1U_m~fgbuB7KDJxrfdr!33OY)1ZgC9pIkg17@PCGsR63{Ly~p(x41x||%niL?*ZI3NoBx3{-9`@_Y>#r$s<_3O>H#WZ6EwUD7h zL(yu=)#)px`fkbDT59Q@Ja?AqvpD=4WF9wuCf`Ochv)F|^%*Uxqdh!5;R57oFx1u6M@L6(yFb{Y_iZ~Lmey^%JO9mS zXh>8}PL5#M(UIZa1v4Lqf!CyOD?wFV`8H=HI-L-)U4htiXYxm)|AM+=njXUw*5&xdBs;a5wWo$s#8>k%$9?NQ@#s1^< z!Qe(5Kmxnh{yy%9#P^}cCGG(g{J)<9(nNWLxH8;qG#3q0Kt3I{Jea+T| zrrh9dBDoVCjxL_!++jK5Xw~#HMBm!lnx3BicPT3)qdaXF``UP?lA0`ZuM9e8U_kE^ z$t8AJ6<^|ux%)tsy*{0Yj6@cy?JLw!4vmJAl98<~F_8~lW%pUW5Wc0gefL22ZnsvS zrF=`oQK+f`Unr>ohB2ldz!GtvTJQwox^*($Pa}vpz{srpGBnxdF-rcwVB!J zE>ObRnJz5uH~5c2+A^u61)d@J<=fA|*e^=BH$Afoat4hILXz_4_=`D^p9O7F^2Q@9 z{`#@6T;CTr^!&wyx6Pp5Ph00009a7bBm000XU z000XU0RWnu7ytkskx4{BRCt{2op*E`$DQYY)p2@q00tQ3K_VhSf&g<8gG5PGq$OLD zPqt;t_MYXnckk`m8+^O__Ri0Kx7zjI-oCr1;6V8-%eG{NwM1E>L{UtDNCHF}WFibO z04C4$Oy{oq0}w@#U`Ev8^X9Lan(FHQc6I%#e!pKe`paMZ99CG)5R2V_6>gOk370)9 z5-xjIBwY5aNVx1-k#O0wBH^-UMZ#sziiFFa6$zI;D-teyRwP{ZtVp=*S&?wrvm)WL z=QA#0DNL2Z)MB?{exVk-0rQ0gq`lC!3I_n78$9o#swA+B-KcrtGbkYfsE3gqxSIua z`kM*}cyaIpRB;vx@ZvUZ9{8+D=!WE-(4K>1mweBHdOPl@fw8wx%@kM`rET-XXGcOB zw5`y;9-k*bzfzeTh<*hhZ$jQfkUWf1e|l-@Ofm}NXUV* z3%Xb1(QB5}G5(PEMvt9{$D)Nrg|aA>R@E^SVHA6>`Ck|CkKt2oDE~dE5P+VGhR-|8 zV=SzJv4`;KJct57I4Nm5X6Y-=>RM#)1YP{KC!ch>TzmK4PEmA0enBjeJbkt`i&Kp3 zweQ+2NUR2b3b9jQoy*ghAC`JAbU^wJ=$DwChe9D z2eQY;PMkO~Ffb5_MErig!C>g^?S0_!zq2*{WSI>z5V*pCPn00c?O$jh$T zP`!KK-q6_aJ;8VTZBR0VOlPXIQI>xGwH60iVR1N>&f#RK2nX?|TFTlUr z8qcoS+~c2|h$eeFI#`6C+~v7{T^36bL9iS`HGXi+?`hu@ORg6hK-~#FYw*b1=cW`@ zJK~G`Bchd~id@9LM<0_#fuX7Tn##nkdapA+YYjFd{q;RwNzp?|5d*l)Z2L&e>o!{q zl-p*w(s9c?=B;$$_WcJAH?=hT26;Y}nwWT}E%x~h9stOME2MrTxOM2=H1wTn3ZxqADL`&+mn}5tfQYY6IauIJX)1GoS(hf#A2zL4*iRQ*#|; zg@*%GZ$CW1WM^+)U;pQie$`H@85u0cd~yp~Ioh8De-axZ=}%cBR8f}J%bM+koE%d< zs+e|}v4z8dB-@#AK2jDov6tGk5ngJa&~|Uztfs<$vR2+uYImA1U9Vw4t$;ud#Qn%2 zEsa^n;*W&{;6@nQhWqG`J+#xj+dfs`;(p$uKe8#O=UCTRU#gHZDIAN}R9c$af|4YX zy1UqL|6K*MRy!UQe32<03n@*?0DFnuS&}uooA94cjs&cPFd+`-GHWfRca&}XmovX9 zOG=OBIcjpQIH^#8`Vf_U1V#E{n>mZz3q25j2u|1HvCCJ>inB~n5k30NAN=pvPH_EG zUe+{}PUVpFsg@3}*&LFjB7;ed>XIF2yJi+YC*xvse|S8SZVd($cZ5f&?ORN4H%V9| zo=&t6@S04vjYdKV+2i04LI9xY_<#5UevA_eP z=QCKgJDFq&0suIYY(EwS01WVE_xYG-Wb*@}cY9)32%F8Qw9t@DX{7}m#}WxaQ5}hZ zb$In2fn62+`!}1%qXGcDJ`jW&Cy~?%63HWJHjasyCIMCcEg%e-G zC-#Dm`Sc@XAz7SWSPqj9)sjUBz|-@P5$P-kiFP7Mr;x!LT%Suri? zyLVY$JUnJKn*UWy%d$o}S#2N<093U_6;&)~;*?-Yk+{Z`E8!aFEK`>YAb=c*)xuZ| z8N*e?iEVP6c5buGuZMcuU)@|!Bvn?Nt#QR3ZQtCR(Cu34VQEl`mb_9XY`CzK( zHu1H?p;cDyz70-LP=UQ6tIR$;BD?eGRd%j_QnY2jkK1BI zzDZ=#~W>cC500ZNR!h8l&s4~wu26Az|;kkDw@?7l0 z^%=+COMY~U*CJ??v5fP|o%h-^GieJ)8U&)OkmE!V0K7UvK>-k85)@wHSXvz7&8wY= zCIFy-x`7azay;>Me6#_E5iFbwd4VL%g2dx+axd<@p)tc#V#EMul1yvbMPJWcov@X4E$%|^|#Gw%}8 zpzVV0FXQ8v2L@h~HRX;eB;~S(F;Tqe>zPjJq8W1*ozN6oBoz&hCM23g{jFjup>14e z`SppAqUe#N`d&x!bJd&#=#39!U;AI77o!H6Bwjul!hjJ)0Ko4kH8he00Hef7A#rp# zXe_q@0LB<=SiG8F`HJM=*q8C~UC>Q~cJ0!)#{7?(y0(;CfBN>M*+zOD242wCcugKV z{Y#%{@z{T|%Mu;qX+kTiHiTnpcbJjgW-5)gta-TFUR9Y<6&~%!7>ctqtBH(&%9A!) zi-{XEZYJ&&0pvln8Uhhyio&%=)0<|#Bs76^H+1a8J%-C-lWqtLN88NQU{pzAr7tZv z$x<&u9h!Vjmd6m@K$#2#nZU}JDa~1+&}gt4NtPyP+UUsN=40+UA>VO=-+DY!z0>2` znL)Uy6OowX3eG#~%n0!UQkf z<*?A?O+Ky+pj5+n21<>BLzy2lXYMOS0Bc}$C+@yQ@h(uBWf_YMq>Yv+MFRE7EZXX{ z#@sGAKTyBh6^w)#2EF1Ve*`Zjb@O?_gRd~1qmWh{d8YfXe|7NHsqsYmCu<5{ZV9|~ z>Xmq_tlIUqb5T;jK^GD&O4V6viIe*XMJ z5vuqqwdp|AkncEBP5xHXUG=#HLfKaKg>)F%NkBkGHJYP5R=Y-lU5U#)k4Y;{dfNK= z`ztvEeeV)p>#P9Lr=(zWn<{QYHx` zD%u~rMmekQw9`6!?Evlmc&?EnBMN_RGy(wKp%iUp0YK#yqm5Ir{+izRv+&t>lar5U z+4r*5_txzqfUMqd zqBDb${hy;1O8VQ^>%o{c{SyMn;)F`4P-074Y3bsBjXOT~c31A-d@tjba{~ZyDlJYM zxwM4Rv_{Q%xWI3r2!OR@?@xd8T3K$^T%8LE`exk!HT+=_gy*EfTfMW4AnyiW%?-xG z-zXkCt!T5{90nSZ1j3X$JT5iXT6Qp7zqU~dPK@Ok)5OTJZ+-Wh7fOcWQcn>10$Nf= zCN+xA#W|L`ZHMu-mf@4K3N|wUup;nwM2FGza77r%cVqnRu8jIp=URJsZtVsKq#nUd z9VquORNmrqbxxW!@7|X2h>{XTuwH6S#M9}6CwuF*=*Q0THRYyF&W|47^Nlmjp@UC7 zrC|J%!7f*Jc0ogf#o7KJN}|+#1%1*^MC=RQyP_P zO-AC*0F#Oe4h5HcoyVfK{aInRb)Evf=it)as)T7^-hkEZD0d(3aKP0T^>2m#Nf`rR zj1fZdbj)V_*qKhK-Zip2!ypi~g!_)$8t(;wUqAh{m0^q&CA78q+uHnp{NsgsLV{p* zxi)U!{?dz2hJusf*vtR&Uke}p)_`8@in^Lq+dn}%alI^g`8ZjUGMZt6k z)eM2_)~lMEv2X}n&!KH6P^mT#%RM^AU4FsLvb-oNn)1-bPfk0-j_%&+OpAI+f$5$D zPvsXB0Knfp|NJ*ze37fIy}YUfLHK)n0pRnGJo&9Z{aaCY0zg%<5rV>W0WBtR8m4Uw z0Qgn4IqhyV&#`r;0dWGAK8Lo=iGDDL7O4uv2T=Y~v~|wIyapzDO{Zy+R5YzNpQ*_C z#G#{M@yE~l3q0)jNT;IAOhe6Pb6$S_{->S_OHxvn0YJxiJe5i-N|xI_8JUqp5Co2l zb@rt*val4Md45#T^ajJsqNoPuTocZk(=O--$4}AL51@PwGdJeA(}ckMOSI__sukxh zu7o5I#+V`q72`Y?Q<80#l$i;}=Nn3^icOhL+MA<%`2MRG|EqM>s>=KC@8S8qKmPHK zfB1*OwQH%G8aWngK6o{4(gTr#MYi0?p-oREf3;8x4glIF;d9E1;&{RTu z^POa?FSV}5+d!T|C4chl8u=18VgW|ExO&9c`oM+JXmU&p3f%ywUOac2U ztZ7HNci>Ljb>vT91(HCe+3ZLNX}aDQkN|*VX70S{n0d`-t2B`7SgX`THGYwU=%2>BZTmvTW-FxT-z* zPNR_=>lFyYVdM!rxV(-L>D~vQwu!__zNceRppyOA&5b^j4Mvz|g>HgOxKI-1!cT zFx}FA3Ob;VkoQ91^_|Q0l>mhWvZt&Fv*T*yA|=toyjy7hsUJvemR$+Q7mD1yXbS>sh_vDSB5kS(E2@3Sfi>%@ zq9`d*Rx~WgvW_uJ=^U`l?a7Y5l!awvRr@G1^5EU}SjN~yT*%4+%BVHem35J)^x|dP?)z51_Se!W0Fqm6WK7%w5#IJO_hJv_$6X9^fo1!z*{gd%^HJ0DM6ItJ2&>|*= zpxhR&z~Cycps_)&EI0Izr9?~IkRio*)oG&>Da~e~M#mM(S~3xgcWSQh{P2gik~&|H z&z|A_u(^ZDiDbHo?oMsJ*KIb;q9O)#1{J-6>K7{|c#(4|JP^MVw_hIY<&UMDYeU^b z=}=V3bkY**3Ol~~(C$YmgxW))BX9jW)%A04W?EA9SVCQ2Yx(2Rcw?Q}H<;o`#_Od- zN!K(C0BFkLu#?e<)|Z~zwbi1idV5dWZlQ|u*zN)GE1%2s4WxrnH7|>K?uesg)1N-R z?=G4k0(|nBXa0f!yjO;5eS-+jMn#te)F|s48RCGi#3ssd+@5rez=ZF*yXHVj)O17;D z*4G=KdodL3HvOT;9m;v)&PTpqT~g{Y7~c4(`QX2Or3kg1>q#{?Nx>od`QJ`i9l&v@ zvqP;dm|0<0fcgNfdK0Z)_$TKjEPiqt1~dkaPL$(>wDV(Mhb|LC=`cw`He`I~&dPO# z*(dlqyDqs{{#3W$hC%G8fWpxe|+?oOUsl5ZHse z%pd{4NGKIbiuGRCZ~~_`{+HqY!A-k%`OcnA^c+g45^j8W>*}?tu4@=G03RKHS2=&I zN*bxk<`96aX;TR?fJ5(}Ow^T|Ei5xI$?q!5%eESQQ$jDDi}D+**YD19x`KkhP?V7* zkDYBMnqFu$CVn*@#ZpVuUUCvnlLyf|aYqIu zdnQt6vUU?f_;&C)jnuo)kdFHAbUm-#+7DI_W+zs-l9Pmsi`hlib$f z(C8EPQ2Pl-HvTQbvqRMQxV}U>> z$BpuQ7RPBA8!4*TW;-=GIXOHO>u=`#&0B23C2?sl^r#OMAu~$?Kp?4TI%L}n$5H9Z zrX@Fz6Vi7;M-dKPPhkwuJDKjmcFmSYTCz!#Q)A3PkVsP~Au6UK5F2r&##cMR&Rv%~ za|mS|f|@11b4#h01A-r!>Ue{GwW-&rWr@}x1e_AwOdP?DX<)b&GqP0FTVo- z38!OVYNgsskH0Q6zP5Q9^0{Vx}>Bi3`O0&u7M(nD9;Z}Ozf#!Q=XGs=E?Cm93#QtqFl*E>xF@6 zgeJ)|1N~`9-rvyR4~JQrPD!HAKROkU?{8>q8yY&@-}lzpGbvF_3W6jnfZ)CMw(&^B z9}aJ;s?Kv|AV9HHDiDq87>APySy2dt#v>7yrc;vCF)}h0j|ZYr4A4F1cbLs2G1F;s zoz4iK6l5vWW{syWU0I!oMoY4?b6rjV$Z)W3sq^FHk}VV-F40l4e{bkf?0&;UvF+c?(>Bb$)u2`Ns^^M z6=s1yj$)0bQm;2R9rO9Z$z(j8-nX{?n6K;USAUNXa+u7A+s+;7=ulMc^g#c-UZtzB zXcAgDjwDHMR#rhq=KCG(R-+LBbRAnbLtRnPiSF)oB_)NKnfn_X9VU~JWjKZzk3{x2 zG&;;?vw=O`-#;7-nmL1!WsNLLQxpJ@h{$m|EgS~`I@Ya5V_lKg%5ebjYSXEjf`W$9 z(&?keQYiq~R$V<74gtWv`ueZ#*>j<7CWFDq8tf)BO;Pbw3IlAbsv3)g0U!{K6lG>w zjK;}WEXpTisg#A|%5!t0{CvfNT$4qMV9T&tNrC`?SSlqcirr+IHeL`yNkK?UQnuaB zvFvm|n^pxOr0Ke(s0Nx!q|-VEr^SphmK24hX@rofX%U{c8I24@0U(4RDF|kR0RU2x zL?FaaR5+QOZUD!y-#>8RpI-faQV@(RyREY7?bep*pUfO*WEh0dblW(F`Tm0ko__tc zL^=%snO3WjHTc6JP1gb7-p2K+uDyBY%pzPw09eFHMJVy9gtX~yaWNCIPrMC+{HgH6 zn!mZZze0Klr;97$1I&w7Z3VR^)n&Ic?_TaCtGeD*i!T~g9!G)`TiWRBB08H-K#$VK7* z->JQ%DA%Lkbjd5}2LR)dx!*$fhFE-ybcI`FMZ#sziiFFa{|Bk`;y|RKV-ElT002ov JPDHLkV1jj$CUpP+ literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/fl.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/fl.png new file mode 100755 index 0000000000000000000000000000000000000000..199a2f16c6189fb5fd04d203d00a6ea3da900a12 GIT binary patch literal 9018 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ga.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ga.png new file mode 100755 index 0000000000000000000000000000000000000000..03f52bb855e7837f5f8ff2195f4f03bbe7070a16 GIT binary patch literal 4765 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%0AaQ%A^-pY literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ia.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ia.png new file mode 100755 index 0000000000000000000000000000000000000000..c2c4cf0f86d7c7ee392241e2635028d7085f29d3 GIT binary patch literal 7102 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 O0000p5Ph00009a7bBm000XU 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 R>2(MX082q6E5-E#{s(h|<(B{e literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/la.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/la.png new file mode 100755 index 0000000000000000000000000000000000000000..3f2c4785ab8bc20a16a003f61b7cbb22d036d2ee GIT binary patch literal 11486 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 JRf^~b{2z9;Mb!WR literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ma.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ma.png new file mode 100755 index 0000000000000000000000000000000000000000..a50208138d676174f4f6f8a8bd1996fcf8eb1b65 GIT binary patch literal 3985 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/md.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/md.png new file mode 100755 index 0000000000000000000000000000000000000000..1717a2646998f4a2a8e82490710373e11c8507fd GIT binary patch literal 4103 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 FV1m{l!wvud literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/me.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/me.png new file mode 100755 index 0000000000000000000000000000000000000000..7e696f3e3ccbd3b2269ecc209ec535d1635c3cd7 GIT binary patch literal 6238 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 SB|bM70WuPb-)qE;gZ~HFT#+dN literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/mn.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/mn.png new file mode 100755 index 0000000000000000000000000000000000000000..602f36b3d53d83742320dcd868839af3654379db GIT binary patch literal 7938 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 I2{sG)5A=d4TmS$7 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/mo.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/mo.png new file mode 100755 index 0000000000000000000000000000000000000000..413ea1a6637c36d583cafbce5c26a7d1ac0a6d49 GIT binary patch literal 7495 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 Mtg6gUDYLNu1CP&^#Q*>R literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ms.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ms.png new file mode 100755 index 0000000000000000000000000000000000000000..d3e4a1cd3e2fff81c1f42c4d05c7d25018f2b949 GIT binary patch literal 6088 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/mt.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/mt.png new file mode 100755 index 0000000000000000000000000000000000000000..6822acb90e9938250bc4d30bb61421b86a90ea32 GIT binary patch literal 7344 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nd.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nd.png new file mode 100755 index 0000000000000000000000000000000000000000..87e401cf7c5493ccd021ef44433f54ff12881db1 GIT binary patch literal 11795 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

    p0eV9(UyI?uZn3!|4iX)Y|t~q_3GukW-aV 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 Xm7r`Q=_fUb00000NkvXXu0mjf>9)51 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/sd.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/sd.png new file mode 100755 index 0000000000000000000000000000000000000000..154618f4ce129ca17c131e21761fd1c2849446da GIT binary patch literal 10252 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ut.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ut.png new file mode 100755 index 0000000000000000000000000000000000000000..7a01ae633979810f0b8a3213d0e371b02b8eecb6 GIT binary patch literal 10674 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 Q-a{rJE2$t+CT0-uf7w`T(EtDd literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/va.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/va.png new file mode 100755 index 0000000000000000000000000000000000000000..ce58c0158dedd4620f59ec2427c2534a327faa3e GIT binary patch literal 10138 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/vt.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/vt.png new file mode 100755 index 0000000000000000000000000000000000000000..fe1b19fe2e1edf87bf4587afb0999525628de8da GIT binary patch literal 6397 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 V;IRQD+}i*E002ovPDHLkV1oE3EZqPA literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/wv.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/wv.png new file mode 100755 index 0000000000000000000000000000000000000000..b40389966ce3a9e44c264bead3e495db3612c34d GIT binary patch literal 45254 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 Kr?&j&r~e-pNJmxx literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/wy.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/wy.png new file mode 100755 index 0000000000000000000000000000000000000000..82a453cc3a03a902bb21f9e0fafbac9e0c60bed7 GIT binary patch literal 4343 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 Z6n?T|PS#-(d*Dq5prx*>R-s}O{vTzqh%*2H literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/js/anchor.min.js b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/js/anchor.min.js new file mode 100755 index 0000000000..68c3cb7073 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/js/anchor.min.js @@ -0,0 +1,6 @@ +/*! + * AnchorJS - v1.1.1 - 2015-05-23 + * https://github.com/bryanbraun/anchorjs + * Copyright (c) 2015 Bryan Braun; Licensed MIT + */ +function AnchorJS(A){"use strict";this.options=A||{},this._applyRemainingDefaultOptions=function(A){this.options.icon=this.options.hasOwnProperty("icon")?A.icon:"",this.options.visible=this.options.hasOwnProperty("visible")?A.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?A.placement:"right",this.options.class=this.options.hasOwnProperty("class")?A.class:""},this._applyRemainingDefaultOptions(A),this.add=function(A){var e,t,o,n,i,s,a,l,c,r,h,g,B,Q;if(this._applyRemainingDefaultOptions(this.options),A){if("string"!=typeof A)throw new Error("The selector provided to AnchorJS was invalid.")}else A="h1, h2, h3, h4, h5, h6";if(e=document.querySelectorAll(A),0===e.length)return!1;for(this._addBaselineStyles(),t=document.querySelectorAll("[id]"),o=[].map.call(t,function(A){return A.id}),i=0;i',B=document.createElement("div"),B.innerHTML=g,Q=B.childNodes,"always"===this.options.visible&&(Q[0].style.opacity="1"),""===this.options.icon&&(Q[0].style.fontFamily="anchorjs-icons",Q[0].style.fontStyle="normal",Q[0].style.fontVariant="normal",Q[0].style.fontWeight="normal"),"left"===this.options.placement?(Q[0].style.position="absolute",Q[0].style.marginLeft="-1em",Q[0].style.paddingRight="0.5em",e[i].insertBefore(Q[0],e[i].firstChild)):(Q[0].style.paddingLeft="0.375em",e[i].appendChild(Q[0]))}return this},this.remove=function(A){for(var e,t=document.querySelectorAll(A),o=0;othis.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('

    ilyna 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 B<9h%A literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ne.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ne.png new file mode 100755 index 0000000000000000000000000000000000000000..a69e15fc93c17a4a2a331fd7b85b9c1ac689a231 GIT binary patch literal 13899 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 TIF=0n41(mOm8GgAjD!CNld$p0 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nh.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nh.png new file mode 100755 index 0000000000000000000000000000000000000000..d6ad1cb689b353d40398fe922958e983bd43bde6 GIT binary patch literal 12792 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nj.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nj.png new file mode 100755 index 0000000000000000000000000000000000000000..f2c646603bf4569104cdfaf22efca6823245d712 GIT binary patch literal 7098 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 aKp72Pnv>N`IF$`TRc}x|=Wn literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nm.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/nm.png new file mode 100755 index 0000000000000000000000000000000000000000..c2731811248dcc6e79f7711ec2f622e2e1b74418 GIT binary patch literal 1523 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ny.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ny.png new file mode 100755 index 0000000000000000000000000000000000000000..794b86e3c4e2d5fc73e3b2be83127b0090d67db9 GIT binary patch literal 9732 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 P7w}nHS*lXPp5Ph00009a7bBm000XU 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/or.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/or.png new file mode 100755 index 0000000000000000000000000000000000000000..846b4a699aff19177c1c352faae42a3b98d14eee GIT binary patch literal 9530 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 literal 0 HcmV?d00001 diff --git a/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ri.png b/mayan/apps/appearance/static/appearance/packages/select2-4.0.3/docs/vendor/images/flags/ri.png new file mode 100755 index 0000000000000000000000000000000000000000..5cece5db10b5d6d25e72a6b174cac2e7aa1fb548 GIT binary patch literal 6927 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