From 87a681f8662554ee888a02e162d8772d64eee6cc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 20:46:13 +0000 Subject: [PATCH 01/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v5.0.0 → v6.0.0](https://github.com/pre-commit/pre-commit-hooks/compare/v5.0.0...v6.0.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index da8e24ad..464cfe60 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer From c78f248c60846fa48c9d38b488f3acc0fed96207 Mon Sep 17 00:00:00 2001 From: JulianMaurin Date: Mon, 25 Aug 2025 23:20:07 +0200 Subject: [PATCH 02/29] Add fail-fast argument for run command --- pre_commit/commands/hook_impl.py | 1 + pre_commit/commands/run.py | 3 ++- pre_commit/main.py | 4 ++++ testing/util.py | 2 ++ tests/commands/run_test.py | 13 +++++++++++++ 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pre_commit/commands/hook_impl.py b/pre_commit/commands/hook_impl.py index 49a80b7b..de5c8f34 100644 --- a/pre_commit/commands/hook_impl.py +++ b/pre_commit/commands/hook_impl.py @@ -106,6 +106,7 @@ def _ns( hook=None, verbose=False, show_diff_on_failure=False, + fail_fast=False, ) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 793adbdb..8ab505ff 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -298,7 +298,8 @@ def _run_hooks( verbose=args.verbose, use_color=args.color, ) retval |= current_retval - if current_retval and (config['fail_fast'] or hook.fail_fast): + fail_fast = (config['fail_fast'] or hook.fail_fast or args.fail_fast) + if current_retval and fail_fast: break if retval and args.show_diff_on_failure and prior_diff: if args.all_files: diff --git a/pre_commit/main.py b/pre_commit/main.py index 559c927c..fc4531b8 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -76,6 +76,10 @@ def _add_run_options(parser: argparse.ArgumentParser) -> None: '--show-diff-on-failure', action='store_true', help='When hooks fail, run `git diff` directly afterward.', ) + parser.add_argument( + '--fail-fast', action='store_true', + help='Stop after the first failing hook.', + ) parser.add_argument( '--hook-stage', choices=clientlib.STAGES, diff --git a/testing/util.py b/testing/util.py index 08d52cbc..1646ccd2 100644 --- a/testing/util.py +++ b/testing/util.py @@ -40,6 +40,7 @@ def run_opts( color=False, verbose=False, hook=None, + fail_fast=False, remote_branch='', local_branch='', from_ref='', @@ -65,6 +66,7 @@ def run_opts( color=color, verbose=verbose, hook=hook, + fail_fast=fail_fast, remote_branch=remote_branch, local_branch=local_branch, from_ref=from_ref, diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index 50a20f37..e4af1e16 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -1104,6 +1104,19 @@ def test_fail_fast_not_prev_failures(cap_out, store, repo_with_failing_hook): assert printed.count(b'run me!') == 1 +def test_fail_fast_run_arg(cap_out, store, repo_with_failing_hook): + with modify_config() as config: + # More than one hook to demonstrate early exit + config['repos'][0]['hooks'] *= 2 + stage_a_file() + + ret, printed = _do_run( + cap_out, store, repo_with_failing_hook, run_opts(fail_fast=True), + ) + # it should have only run one hook due to the CLI flag + assert printed.count(b'Failing hook') == 1 + + def test_classifier_removes_dne(): classifier = Classifier(('this_file_does_not_exist',)) assert classifier.filenames == [] From e67183040220cd8662b5b886b24841e2d04bac9c Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 6 Sep 2025 14:20:01 -0400 Subject: [PATCH 03/29] store_true does not need default=... --- pre_commit/main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pre_commit/main.py b/pre_commit/main.py index 559c927c..b7ac3dc2 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -62,10 +62,10 @@ def _add_hook_type_option(parser: argparse.ArgumentParser) -> None: def _add_run_options(parser: argparse.ArgumentParser) -> None: parser.add_argument('hook', nargs='?', help='A single hook-id to run') - parser.add_argument('--verbose', '-v', action='store_true', default=False) + parser.add_argument('--verbose', '-v', action='store_true') mutex_group = parser.add_mutually_exclusive_group(required=False) mutex_group.add_argument( - '--all-files', '-a', action='store_true', default=False, + '--all-files', '-a', action='store_true', help='Run on all the files in the repo.', ) mutex_group.add_argument( @@ -275,7 +275,7 @@ def main(argv: Sequence[str] | None = None) -> int: ) _add_hook_type_option(install_parser) install_parser.add_argument( - '--allow-missing-config', action='store_true', default=False, + '--allow-missing-config', action='store_true', help=( 'Whether to allow a missing `pre-commit` configuration file ' 'or exit with a failure code.' From 2930ea0fcd481f4c2cbeae0245a8bb748bae905a Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 6 Sep 2025 14:40:20 -0400 Subject: [PATCH 04/29] handle `SecurityOptions: null` in docker response --- pre_commit/languages/docker.py | 2 +- tests/languages/docker_test.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index 086e874d..d5ce1eb7 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -115,7 +115,7 @@ def _is_rootless() -> bool: # pragma: win32 no cover return ( # docker: # https://docs.docker.com/reference/api/engine/version/v1.48/#tag/System/operation/SystemInfo - 'name=rootless' in info.get('SecurityOptions', ()) or + 'name=rootless' in (info.get('SecurityOptions') or ()) or # podman: # https://docs.podman.io/en/latest/_static/api.html?version=v5.4#tag/system/operation/SystemInfoLibpod info['host']['security']['rootless'] diff --git a/tests/languages/docker_test.py b/tests/languages/docker_test.py index 03235c46..b830439a 100644 --- a/tests/languages/docker_test.py +++ b/tests/languages/docker_test.py @@ -89,7 +89,8 @@ def test_docker_user_rootless(info_ret): ( (0, b'{"SecurityOptions": ["name=cgroupns"]}', b''), (0, b'{"host": {"security": {"rootless": false}}}', b''), - (0, b'{"respone_from_some_other_container_engine": true}', b''), + (0, b'{"response_from_some_other_container_engine": true}', b''), + (0, b'{"SecurityOptions": null}', b''), (1, b'', b''), ), ) From ad0d4cd4271cab68ddbf5e5c3386f38320e0ccd2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:44:04 +0000 Subject: [PATCH 05/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v1.17.1 → v1.18.2](https://github.com/pre-commit/mirrors-mypy/compare/v1.17.1...v1.18.2) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 464cfe60..0a24427f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,7 +37,7 @@ repos: hooks: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.17.1 + rev: v1.18.2 hooks: - id: mypy additional_dependencies: [types-pyyaml] From f415f6c4d72224363ba794429b25cc3f52e04933 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Thu, 9 Oct 2025 17:44:05 -0400 Subject: [PATCH 06/29] py310+ Committed via https://github.com/asottile/all-repos --- .github/workflows/languages.yaml | 4 ++-- .github/workflows/main.yml | 4 ++-- .pre-commit-config.yaml | 4 ++-- pre_commit/commands/migrate_config.py | 2 +- pre_commit/file_lock.py | 2 +- pre_commit/languages/golang.py | 3 +-- pre_commit/store.py | 2 +- pre_commit/util.py | 2 +- pre_commit/xargs.py | 2 +- setup.cfg | 2 +- 10 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/languages.yaml b/.github/workflows/languages.yaml index fccf2989..be8963ba 100644 --- a/.github/workflows/languages.yaml +++ b/.github/workflows/languages.yaml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: '3.10' - name: install deps run: python -mpip install -e . -r requirements-dev.txt - name: vars @@ -39,7 +39,7 @@ jobs: - uses: asottile/workflows/.github/actions/fast-checkout@v1.8.1 - uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: '3.10' - run: echo "$CONDA\Scripts" >> "$GITHUB_PATH" shell: bash diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7fda646f..02b11ae2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,10 +14,10 @@ jobs: main-windows: uses: asottile/workflows/.github/workflows/tox.yml@v1.8.1 with: - env: '["py39"]' + env: '["py310"]' os: windows-latest main-linux: uses: asottile/workflows/.github/workflows/tox.yml@v1.8.1 with: - env: '["py39", "py310", "py311", "py312"]' + env: '["py310", "py311", "py312", "py313"]' os: ubuntu-latest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0a24427f..58b96f76 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: hooks: - id: reorder-python-imports exclude: ^(pre_commit/resources/|testing/resources/python3_hooks_repo/) - args: [--py39-plus, --add-import, 'from __future__ import annotations'] + args: [--py310-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/asottile/add-trailing-comma rev: v3.2.0 hooks: @@ -27,7 +27,7 @@ repos: rev: v3.20.0 hooks: - id: pyupgrade - args: [--py39-plus] + args: [--py310-plus] - repo: https://github.com/hhatto/autopep8 rev: v2.3.2 hooks: diff --git a/pre_commit/commands/migrate_config.py b/pre_commit/commands/migrate_config.py index c5d47a08..b04c53a5 100644 --- a/pre_commit/commands/migrate_config.py +++ b/pre_commit/commands/migrate_config.py @@ -3,7 +3,7 @@ from __future__ import annotations import functools import itertools import textwrap -from typing import Callable +from collections.abc import Callable import cfgv import yaml diff --git a/pre_commit/file_lock.py b/pre_commit/file_lock.py index c840ad8b..6223f869 100644 --- a/pre_commit/file_lock.py +++ b/pre_commit/file_lock.py @@ -3,8 +3,8 @@ from __future__ import annotations import contextlib import errno import sys +from collections.abc import Callable from collections.abc import Generator -from typing import Callable if sys.platform == 'win32': # pragma: no cover (windows) diff --git a/pre_commit/languages/golang.py b/pre_commit/languages/golang.py index 678c04b1..bedbd114 100644 --- a/pre_commit/languages/golang.py +++ b/pre_commit/languages/golang.py @@ -90,8 +90,7 @@ def _infer_go_version(version: str) -> str: if version != C.DEFAULT: return version resp = urllib.request.urlopen('https://go.dev/dl/?mode=json') - # TODO: 3.9+ .removeprefix('go') - return json.load(resp)[0]['version'][2:] + return json.load(resp)[0]['version'].removeprefix('go') def _get_url(version: str) -> str: diff --git a/pre_commit/store.py b/pre_commit/store.py index 1235942c..9e3b4048 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -5,9 +5,9 @@ import logging import os.path import sqlite3 import tempfile +from collections.abc import Callable from collections.abc import Generator from collections.abc import Sequence -from typing import Callable import pre_commit.constants as C from pre_commit import clientlib diff --git a/pre_commit/util.py b/pre_commit/util.py index e199d080..19b1880b 100644 --- a/pre_commit/util.py +++ b/pre_commit/util.py @@ -8,10 +8,10 @@ import shutil import stat import subprocess import sys +from collections.abc import Callable from collections.abc import Generator from types import TracebackType from typing import Any -from typing import Callable from pre_commit import parse_shebang diff --git a/pre_commit/xargs.py b/pre_commit/xargs.py index a1345b58..7c98d167 100644 --- a/pre_commit/xargs.py +++ b/pre_commit/xargs.py @@ -7,12 +7,12 @@ import multiprocessing import os import subprocess import sys +from collections.abc import Callable from collections.abc import Generator from collections.abc import Iterable from collections.abc import MutableMapping from collections.abc import Sequence from typing import Any -from typing import Callable from typing import TypeVar from pre_commit import parse_shebang diff --git a/setup.cfg b/setup.cfg index 9b0e02ad..8fb6e6aa 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,7 +23,7 @@ install_requires = nodeenv>=0.11.1 pyyaml>=5.1 virtualenv>=20.10.0 -python_requires = >=3.9 +python_requires = >=3.10 [options.packages.find] exclude = From 221637b0cbdfbfe8ca209ba5df0111b08f9d8cda Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 20:38:45 +0000 Subject: [PATCH 07/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/setup-cfg-fmt: v2.8.0 → v3.1.0](https://github.com/asottile/setup-cfg-fmt/compare/v2.8.0...v3.1.0) - [github.com/asottile/reorder-python-imports: v3.15.0 → v3.16.0](https://github.com/asottile/reorder-python-imports/compare/v3.15.0...v3.16.0) - [github.com/asottile/add-trailing-comma: v3.2.0 → v4.0.0](https://github.com/asottile/add-trailing-comma/compare/v3.2.0...v4.0.0) - [github.com/asottile/pyupgrade: v3.20.0 → v3.21.0](https://github.com/asottile/pyupgrade/compare/v3.20.0...v3.21.0) --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 58b96f76..b1623a64 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,21 +10,21 @@ repos: - id: name-tests-test - id: requirements-txt-fixer - repo: https://github.com/asottile/setup-cfg-fmt - rev: v2.8.0 + rev: v3.1.0 hooks: - id: setup-cfg-fmt - repo: https://github.com/asottile/reorder-python-imports - rev: v3.15.0 + rev: v3.16.0 hooks: - id: reorder-python-imports exclude: ^(pre_commit/resources/|testing/resources/python3_hooks_repo/) args: [--py310-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/asottile/add-trailing-comma - rev: v3.2.0 + rev: v4.0.0 hooks: - id: add-trailing-comma - repo: https://github.com/asottile/pyupgrade - rev: v3.20.0 + rev: v3.21.0 hooks: - id: pyupgrade args: [--py310-plus] From ddfcf4034bc72445497b5e6708205523a9da7ed7 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 16 Oct 2025 10:23:27 -0400 Subject: [PATCH 08/29] fix deprecated call --- pre_commit/git.py | 2 +- setup.cfg | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pre_commit/git.py b/pre_commit/git.py index 2f424f89..ec1928f3 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -219,7 +219,7 @@ def check_for_cygwin_mismatch() -> None: if is_cygwin_python ^ is_cygwin_git: exe_type = {True: '(cygwin)', False: '(windows)'} - logger.warn( + logger.warning( f'pre-commit has detected a mix of cygwin python / git\n' f'This combination is not supported, it is likely you will ' f'receive an error later in the program.\n' diff --git a/setup.cfg b/setup.cfg index 8fb6e6aa..17c3fe0e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -52,6 +52,7 @@ check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_untyped_defs = true +enable_error_code = deprecated warn_redundant_casts = true warn_unused_ignores = true From fc33a62f3c55c671cdef8306b6c3dc91d81e2b4a Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Fri, 24 Oct 2025 15:18:07 -0400 Subject: [PATCH 09/29] upgrade rbenv / ruby-build --- pre_commit/resources/rbenv.tar.gz | Bin 32545 -> 31297 bytes pre_commit/resources/ruby-build.tar.gz | Bin 88488 -> 93998 bytes testing/make-archives | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pre_commit/resources/rbenv.tar.gz b/pre_commit/resources/rbenv.tar.gz index 111546e3dd9796511942c278495c21fe1ef947ae..b5df08744c17c6fd950d89e8a5caf6186905dedc 100644 GIT binary patch literal 31297 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 diff --git a/pre_commit/resources/ruby-build.tar.gz b/pre_commit/resources/ruby-build.tar.gz index a4f7eb24fd0a7e4d59cf120014d8b054555b8b0f..5c82c90609384836116acd7df8bbe9f79a4c7a86 100644 GIT binary patch delta 93686 zcmZ3nnRVSg)(OgL;r6YUCKwvLGc&6A_4o7FSpAP*Wmoy&fBn@z`SLP* zR-5y^&cF9AN9LM#{n0<`b=I!2JM(}4@jvG7>2>S>ntuPU-u?4$eQD*^UmO0{cgvp- z`#h)a0{8Wn-~a!{|Ns48MBgo4iIct1sATQ}$^N$Nr1|^092itPv=<0Y6ztWHJJwkc zzvuS7n?m~L+sa=>uk(mbwD(wKq1$c3<7)ioSok>usj`JrgHBGK$!K79pZ}1Uhw3Av zudWxQ`kM0A9r3G~W_50}`#kk~Y%eD?IxJ^fyzqrep?}Qr#V$ODmxzCDUZ;PrZ1R6b z_j(=XHwR5cr}QpSa!WWk;a>5{x(d~}Mjf@LI%(F;+=9GED`&Lq`>^Nvx$v0(4I%1Q zpVwF4UBB&L_UWBp|EFX=P5fIwd48Jti+GboCbF%W%+qo=OK-d0u*ZF2^A(QOs~WFN zTW9H1(PY`W^VY+S0+RxB=C!ZoR(i5lBeypp^Y~wp`Uro%H2%J1Zw(rh8goTDj1{D4wHt7Fc@~axVR>^y)$OMXq0eCBiw@u(O)=Rt1`S z6dYA(xuX8Y&9mHh4u5-d$=aYqsqfK+>nE8U{+D_*g5fPs_TugAd!{t92WTenO%D|M zUcDjU?78>t)9VG-1iq=g;-AQ{^19~!WyfEpIG9*md0EjgON`IEiZ``-{*BhvFO-V* zz4^ue`#Iwo#zjA879EIvy+15=D5U;p=h|NsB{|9|(h{vLe9)BI3_Gcofo z;~Yg{wkKHzUI&u0+mtf4H*P3Ae2pb^!&B)kAzQxMuXy~Q?^C_COnu8=voqg6oX`0+ zf5X4kt5;Y4tlzlp*M@)lkDgDR@t|$HTGqLY3w&)0@4RGJxXG5jP<&g`y^e&bMzs}; z?{idd&Ab)J^t*aa%;Dc$_FmD?6RTOY=kMdZ!RL5jA5Q|ic5LfI*YCT&Y`E}$?)Cqn zb7D#yQoZ+2QT<^2#@=+xfBPHt|LPz8%y*4XVc!w_KYG>EpZ_nNI{fpz`On0g?*&|} zjvvf@kYV6;{&bSTt1{`JZ`Or#7^6HQjGfl4dn1yqAjg(_{HJZ+rQ#d5ZD+nZGB)jf z@+Rsnx20x&fU9nqQV~w(e2wey)2kueuels>xDQcs8&5^s4ySFXG)M z<}Hu6K2kYj_wd*02dmq@yVpvEufDonx_$li*!i#O!)686=Zei=@Km>x?J(E0@_h$> z<-5=In{mL$-SN8j`NMhB-97}*JS6*ie^l(MXJ7W;I`yde&v)Otv?F16w6^KCy#1W; zf_K;AIN=r-{a4;6^MxYM^aM?ixY>4k%kESW5%!1)J}xIR8fHzr{NdK)r%l>lSF}I7 z_M{~)T_+=HqqRl-WQW(6H9Fg_$5os>fAODGn$BwOOD|`g4b}Pg_(^5gMx(=ybKEq3 za~+K^QQz79{)y#ziT5YBnr5oJ{bpBrYMJ7cLmdxK9Gt-FY5!`zm*qzH~TsgI&RF1p+|K0BUQv0ub=im0d?E1t^&uyMUTkgMd`>@=QW8Ln; z3*XL0ip$&IN}cKO#%TNYbrt_&&UjUB-1pntaGJFKw)*9Yoa>Ecp1+V>#AS2C{A2sG zBkmWacw4WFsqR5(>(Ad0CoG<$Wb^Ibwep20_8!-E-#)obC;rX5Kxga5kpHS1 zw-(&VontS>!dDe2-llx_;;DFThFc47G9|s9|Ff_tO!7cmgTGc*NpBt#`ld6FEnXrT_C%T2#{AOc2jV>kT~5v5iTa_I|EiNUL*4$- z0+q{=nfrZ(Eg}*he(2n`d@oa@8 zzkl7K?QNuYh8Snt&iOH`kL9-4m@E| z2~PfFKDF=P@t5@%B`;kR&wG6CNB_}3Ki^-<`g*eY&v)Ir6D@x>?2@}yzkAcp?VIyf$roC0ntB@j zdCQL**@!uM$t~OTa*9{;1m|T^0vSgdW;spY6j#v5z~*Sw6D9Z}Mnlm30*8W$$D{j) z#XJ-F>f9UCShB8cm+daUzm?wMKfU0}TvpHB(#zh=tYYh* zRrtI9mgi#r4}xFzERZZ^Op9ze{Mqh7gZ%kJb=E#ESKL-xZDar8%xxf}v2nVq_=9r6 zxNA8#UkZO>WNtpLStocfL4d7dN8=8bFV=6|(plI9d=GzraVu}zlOr639v5nCt=XL` zSZx`P?)_)?;vh#*`xJkh-&0;Y@}E2?r=s`GoR=kYTm8kvYc3QHX2#A=Snt`^8#Wip{R+!1EUx)*Z?vCDWVLj;pt>T3^6$ zAzAL%&8$}DL%apk^tN8$1vUq)3(6T*s_U)pM&kOSl8~*W6UcjqXf2u*G=)eYlZ!I>t ztL}MjXAeicVAM`xtG>|Wd$y2|yWr@}H%zhz*D*$I;t>q84z}Vb*fb-&$;pSiPu?p0 z`4-SZ?fUX5Gl~%w)mek6KRim7h58$UGJ2_SgHyqeaF&C(;$Uy$@C#%yanTpJK!8 zai4LL)1mf5e+8^&u@#**tQ1)5l(0JRlGN8H9Y40TYR+j-WXM)8O;Sk6o8@Bsj^p;K zTW=B?T86 zHH0MC>fbayy1Cip>is&a!>ZkC`=6g*_(IxBnU%ql=g_PFpX(hG?aaPb|5-70b%6gO z?iE+9_z&g1ddoPEL%ww@_iB|z+YPV$sbSJ@ad)(qcyK15L$&Pt3XhW(mWPDzFm^bo zr=})}ht}_W!!rGXhOS|PuzQBO+v^gxL)o4JDf-hwwXfEn`gC&QpQ1+=k|kyNvzQKD zy!uWjYg<_1zu7PU?{5EnTmPPH-ur#OicbBveN(^nmRH>W_?nLYzubP=>%1(Rt;*J8 zxQ&l}ZuyFRDYwPvuU+!!id{;ih3d^Mcl8<$`t+W&+$dPtbYMbp!js1HEB`0-{qer` z|J=8<+V2bgJ-xjn`S105vFV?G%4e-U&HwuU>_0ijnzOI5Kacvnh|T%^!Sze$>|rdL z8g{9$`S=m$4ad$;Vo3eHN#V1U0jGeX(3W|gp;OoLE9EUxIBe5aB-^mbNh@Beye)hM z|0I)Hle`*>oUPduL%9FXU{Mq;KGAT8Ir8w_J$wvJUHGEZtPa^HgA>D&LVS^FqbkrMAqmGdX#w%)0E-jHr~(IZv~u zWiFk$=B%7bw#J-RiJCq(W832jOw6l#>Y4l;(y9X2U;5l&%C}N;(j}=0K}~lRi=V9M z8oTvHHjC8`YX-W%a`L`S0_ly8fM?|NS*Pds6=Wn{}Vd(s%Qn-&Ss3elNGN zM#;gaUT}AHds6!Ev)>dMZ0`u)SirJ1*4`l@|JCo=>mR;8*8O(w+r#%yojd*ZaBR!Z zqWt)rj_uOF+i%Z)UuO30=<&R?4$IoZr>c*-md?uq5kHv?zvXxtaESOxp|{5 zSS(sP-z@Ix%4>2CH_JCjB&*le#vXUSagXiK{>qN@R~LAN&OFGLtlC+>V)egWwE_Cw zy?@^_%S@R5yE^|AAD{Y_8_Eg+`PMaFfORCYHKX-;mvX==GInvd8OxSLJ`-Zn`b>@H55#>n!W@*V16S@mwwy5nYDxr^23*!sDzIgui9!sx?+ zYnHaQtk+!Ei!3*E6TD}2Za3qWTYRY^oq>re@lUi9nrF8dCY<^^*}48ex@r2wfToj9 zeeWjywucy2gKHSit%IZ+oBNlY32HWXl|mSM27-+-SIP`DQk@L!Uo9aQFE! zb7Atrkb-&v2|b>xzGd;83GWXtoz|YsBIMK3y*PV{@z>-Fy|JdGY#Ua=3WO$kGD6o>#lCWiUTp_NGKjeXes!|LI+4^30EYxUl2G!EG{SW`81PJ58DNH}UMp zBhzHMu2{u}$uN|OtkN(SD6#w@sCD%||KtU#m$TVCU(57QS!|bj>WtsZlDtJS|9BL0 zCURd{sc#(fsJ^30?#mA0z47Z8v#iQpP)C-c=GnO?a(1|ejuK8hZxxmr9cjN5of*cx+ z8843BRXF^4N+YY_=YVsEVyxE3YF!eLWUmT1z|p5_rl+|1&Gv~L{*kh#M|v;!Y_0!s z?#^ukOMW&Tz4F~gw>2MZnX<*Ugl~_Wvv%mTlpI;@MH5=z38uE!9CPTi<^FY%J;}P^ zWXrv!ZL(6=yUO{hQ(m0E-|oY+wvJn6!QEUFVY!r={@EoDP@oMPb&6J zJhFK6=R2I8GmF0qeG{C+WTW#_qi*7THP0vVN4+qf_?o$Df`VIe9tz*7-XyFSYAgXj&Msjae;^ zxj%SqUBKL6kyVTSrPdsr-E^|=+3|}NwG}_MZQQvz_P(vn*$X$4>*ITampqMny+y~* z@Xog>Jj%<%(;rSy2`=$+Z@e(!w$Bl(75$TMyQ|A>yslMNzAwYX?Avzptlqub+u5IG zEO6)S-l!z^A*@k-o}*X2XxU?n8nfJ-eYfwQOe{2)GBK%V>MS&=s|~gPlVVa4wNFJV zf7|!(-@i#4s6AWa(RQnQ5=;H9rs+ps{MA3bkLyCk?u|b`A6sp;c=1IA`Rf8d_BWo7 zdEtC~DYKmY_ow?D)8wa4-u6oWP<_sUncv?#J$~@~?RFvYaqON!um6C5!K^v=`-dE;4XSHfH;HA-Hc#u29H? zi3>6uLrxts3Vg{T`TKH4a(({$4<$MNfl0d(bpQ0V1z-JiNUW-RyTIqItdH_0SIu#M zJpI=@u?Z`BlI=scIPxk=HmtkdCpTWWw{Ubk!+MJG1KtRHO40W^Gh@8l0d1vgF=>6BD!V zW$}6YtG36V|9oD_glBT^v8Sg`Navf?t()&RTjb=v6L%K#3v4R1uw5+v`QLnZXFiwK z{gI24`q>tLs$bfc$kY4wZnJYzO!8-=KDRW6-%c+iRIDaCyj#X=xSXlvQQh=2F>Qe# z?TV)^OgwWYL};tpQ~&MpJ#G)r+({1lr(@M}?46v?$#eHqL?0^OV|4y?<=DG}W>Ibi zLfuVeADdM8bOV1SPtn>KGHtPj-ab#xw9V_CpEEsPr*_i3Y#V2N@3GT+|DLTnxMacN zLPf4KXHN$7itRo5_Kv00nhkjeW&|ZXi1y)Xb!^o)kkY9S>wL55g@6%jXo`b)?nT3; z<|``XmQH87xk38EPKI+*$4oCLZ#8~$_VKHZ#s!mAG(S%K*we^!I$&YSYvDWN(X7i+#zE1aJyLg9!0Xzp(=}Y)XMcKp+`90>^I66$yuss?%ddht%@dxUw=+qIz3$@9>9$~f;-1E~ zbB3D&9bAen9DN#l39>``*Xibi8WW&{f=0bW2G@cc6w=O zWz8|YO+hoRA70cvA*6YaomGv|(+8q?S-LZo>h~t*Ot(5QOL*UM)~JqWyH@k9s=j`2 z$EQbH@+;bcG-6(PpN;<-9U8qbNI~W=Ihd1pX)97l6~!`;=R3wTi9dbh1b9`JZ)(z8 za&3~;%cG)?>$~4BJiMduSm`{4&r>@6LwQ)%-aK4f(>L$k1J1>f68R4vTR3dVIZggHJV;!RRT%2b4vcZ_=qE6l#F$p)F)Ieq_ zfy&pi?i{W%Dq<23(mEVjXVkMh$HiUek36Rk`*qFTDJ#A;bgLFVpR%3nj_(9(>FV89 zyLTPX3s|C`_2zEg4bx+39S0?5mImH(^Y^?`cw?r=_Zd>N9tAz+esce%Wom-KOPBSA zqEcyzD;xX_?$7$^Iz@Dz>PDq6XEam8*M?8hh;P5!_}F84N65P*cd_=}9e#Z;>diOK zFnQOvg_Uo&MDQFtlkmU@2D17l~SkveZ6`8Vtw~7C8dw29ldkm9=~4t;tGz~9qa$= zSB2M4HM9HsZ~3iHj}HHRUw`z^Wu+iKi~DK+R|G#hl_`l9&-Fl1f zJN_qEv>7vV9XrVJt^SJ6wypM4o=!X>y>(-Ff@;yGsMDI4-Q%7wo<8ru{qBQLJ1f)_ zZQ9xARV?eRFO8cpXX(E8_V$bpT9e;}INVHozVOfAnjqV6$7lQrbKQMDKyZDu-1i4J z4zAy(zwX=Z4Yh@wNBWo^CUUcNEI573Gdz6$n@aBqRveweQ(w&I^-E+DxX|qM>?7xW z_c_bei|1Yb>*S!xbZ9r9O>9t3%(1}V!3=^L&U+?(J7Q{DGCj3k?wnfOJiQAJPV=i2 zL?&@7EsI`kIN|C|zV_udhs|nM9++?7DRFJVnzII1GEaX~)r~O7sw@@{-*@1Y%G%5P zSwdb;sxKv8z1_d!{lBC+ZlWtij9H)Uv&`J0B6ulPBO?Cf&38777o6}4JA9{jnR{a1 z(>*<*zob7s*`%Y_CcSni%jNn#jw|1skvJmq!g-I=d~v1Q3;zDrn9BL>LrLf6os1F_ zmcCa_KB+xFO(sCNRou$`&};7UY3`}3|2?{^9X_Yy{XXF@|7=13_|S}mKgw=N-JX1r@80-+oPB%iP3gr)qpxQk_R`;=C0Q!+XfaP=`y`f$@+$lj zLgt-p6%{$7{KEaJ=<7pYZI*@~Hu=+WxZU!NX5rqHu50E`!fpybvbq`GU7pfkI5GA9 zjR&judxa&~PU!q{_|NZQ@igT?Vs%{A6@!puMHS6=b z#{!Y(&UQoMT6XJUIbM|@dw;wh&DR-S}{b2WD!rX*E3SSC6;^#&mH=Ho(!HnAf zhFp_hmuji1{dTVt*<4(q&r)Dq==N~Rm)FWaZ*i};(%&=vf(T>r#@t=aOtYrm3Q%4u z(q-^~ch1iR_1c9EtgF_4c=Tn--GaXfo5NxwFG`$RnD^k?j&+O5udrNbv+Um?uefza zYV5}h+wB59ySerhtogyI`$0vfZ<1Z?ERSMebC%M_D!&A}RuzKUw0t-m4ouCU^Z#ammyhxzAIHx;C3v#grkw(G{@5PSBdRyL)c?-E`gGy`%p z*Zx_p7y}cW-7K+^SQ9^Pt4qr zbnjvHlM7y_!sGw_P@eWONHT?g)tLwZVOv|F{wEDebMKt6`ET;)ru)Np4?7>%E}F%1 zOrkAPOyHAFi|>~AyTu%A?pxdGPWmxn?o^Lm2lkf7e3{gc=lb<$x#_PC@B1$#fAzhy zYSMaB_wUj)nHD}r1;16Rgn8GzKAkqXR@t-u^DWU;n-T&uLswKTo}MVRrNX&%!t%Rk za^CE(YUi}6kZnki*Lr30I{mfpXWl#2d?#1=w|k$IR9!6iO3H8>L;CU>XIYa+-MO3E z9yu;q#oE&wv?f8zv+~rU6C%pX4LG+hIh|neA>^KOL&6cSlgr<{a$WLnv%^W*&XA&% zCme!u?DYZ;(rojpGA#B@?v(IgycwW-C_vLtPg}Y3_$rlhkz;pn1YWf>vzP2M{bwxG zB-|A&_Eh>?pk?RNo5p+pzfQjRgDcf>n&5fI2i}&wZzY#q_0jm#ILR-00*BOcOChf2 z{RIh2z6mV8bdak-aK_Od_gyo7D{v=N1$s#+7(RU_;ry$>E^FDFBR@TvX7-=ZIEXL zXJ3~W|MxdHjeX^8T!fl``ka{AP+I!&rPAAU9`ASQLL2U#pQ88t+$ZU(4sLl~@tsG{ zylQc5PA%GUPHAV#3T0gbMm}ja2@TW!Co^OE#4hMx3~$Nhl=ivxOgSbpa<{QDw`fGP z(F2R)Wu;q=zL{L0DletqbF^Xd;>izPGiNTgQ`^rj!Qmh&v&5s(ec9xds`B+o(;8pD zd?>eL*3)2Rl|r2;hoXe41@|v$-u}4qO&F*DpAWOQ-kvt$(k}&x%e`!j&mXw$cD<&Q z|89|2yp`Z-rY$U!8Vd@GJANrw{zyG{(EiAs($sP}mhe?dtQ-ISx;^*)5*f84Uzu`d z??3qMShVEZl1-LhTeg{tI8|2szI!w4V85tDkq1;P#4ov-@0bE04YmWb0sLns@Zq z=W`~p(Y%vxUiC4Wq?Nfbqs3V@`NDBl`CBHnx7a@}zQcO_2*WL|rIIb*(zo)S>)0Oq zMoMSvzYK+rgUc6-bs0WsNvP7a*feDdp9pK@@9sr&maw1Un-YI=j;EZ2+ChiyB^&-` zRe!%wnDN#0!lM0l=GFDhuan+ZZxemEv^uE#fP2vD1IwfQ4?JJuc;{J)``vdoIb90N zul%pvvH#+RBQ+0O>mT$rD9=^=`1jYG=ZWjNvUWT%-{IRB{`j8q2BF6-*X0Z~Bz8RP znB$So&u7keU-k#z|JZmF+tmfzN?xz2V{qEE#QHb?^f0d}e7hK>ww^rCceTD?&Rn^) z4EL4$CWo6OsH+`k`4anS>eBwkT}idEJ4}mN?<-VpSGEcCn5f}*A%gpDA{IM)uFJ+48K? z(P!pHY(Mk#;?hE=Il8$Qf_2y~=_D{8sju_?=~XE3_W0!MA1n^{*V?4W$jnUJ zeek@o!K*3K9!uvNR36(?JzG9CwK>ZAo&5K=g-mZ3TAZBlCgi%n{S7apcYW2r?=V|) zv!Z9yhpFrPM4Bu1eqZ))$DtNq)s*%RKXZ@9I_y^1v&r%A@^=Pe#a~M&23M;X3!I&` zK;!0w`d7hH&kp?H;t)Kp+gY&3I&<3WVC`>&w$Iih($$s**q`hZ7gqV9{v2k;=ijc!@CdvBcfL6Jw5+_dbr%X z|Np*Q{I9=$-e}Q_Xv;M^ACuMp&#L)xV%}H1$4}zr#2?4jpQ)JNQgrv(>h>G61G?M0 zZm(K%cFn<6&2hg@W^X>lwfyxfA72%lX-{JnBpbHf>TuknVji`V^|y`C!f$;c)g0}w zrQ%klciUlrzi_s)sk`fw-m$6KjqHkm2W^Q}#F z%XfXeT-m<5u=e};h?o2JOw76SEM@j$xs7L(zqX%DQ$K3tU|>31L-6;7)z-%KT$z&v zE&k;z26`5FPJGd?XtzE zThp7lPrv`Pv*H-n>%DUiSU}uXt0wV?xl*UQOb_jNsj!)S#i|4Qw{Lzbc7Ka{xyt3&MNREX zxA!nCI{4Ix`3C>x9n~k(6pUWv?{5wNd~twMZ=G4S)HqJ`(3(yTSW9q zy=&9%>}g=B*WG)JnfqMld|7+tM((Oqo@2+lSKnTwwoXGvyY1nd&uiD66|hrPoG;_xoFS-i z+#_D*m{HgSzwe8-#+AyJ_Y7V>y(SSepBivzrQrAH_y%W^q)4S zSqs)V|2lcec*?Qefx)NNP5VBnMy=&bc+~vl?|ixQL-~u+qQ6G$@>NNn`90XW=KS%T z@aG->C(f8FcyFf2@mr_NI76qr$eHo>*j^3D-SMpttCDnDciL$A+xx4(n_2BUS6ftwY|);-kEd5 z{f^}C72B%b{ChF$UGkGaj_x+o0`~O{ZpW@2@Yz{(QKE0D(fhZp7vy=^gO?s=Kf6Uy z_xCiZ&b|{_x*sNA6J`5%FyDqpB4+DZ=hZo}f}IJe*CQfzH)%f(wz4=d>yrMKES-oW ziLuir|B{o;mz-?5c{2l__ii@6n|F960(0txH*Ae|?mwR(z}va~?nBev5q}r@)X%e0 zdVW9BmHD87;L-!X1B90HzOSEXo-UlU8O_5S(sEK%9dsY}IqC7E(2 za<9>8*R9X{;CbHq_wB-GF1IiDS?U(e@k$lrk_p#3zBwk~tabRZ>{hXlIzq(re&pTR%mnWF~Iq%6! zAqOAVb;fQjd$d`HNn*3@ww~F>B~ATrlDKa8az9@<{gKUq`uC;RtNBh}nPX7I_3Y{_ zORx2Zf;HB~E;5}xy?x`P^XV#ucgj;mKmOUB>c0Jq`hwRlRyMv(Q2p6)&eZhulXio} ze>Yr^nDkzI?)KF>nxAHbGCT69yr1SBWB$SN@u|pD%?AaNH-B_1ojK*i#Pj>kO%Ue3 z^{(67IY@u?9_O5Ia;BmV^*$@oPDEt<`sc?LU3Y9%^;@?6Oa9)g;$Xc#T_=A{&NA*B zM{l%j-h9sN*3wCGW%Daf>9|PCsKlk{21h`Ittw(CT$- z!$j|1omX!@n^E|txy-71_C-gQc2A6%)Nv-G%Ded z+Oi_`muVA^>fvt(1KS1ac}W9EAH?v_LU4E#=SC^^@hxKnuB zV-=0!UnipPN^0HWn;m%Jdilo4dCpNwHn*O%i2a=Q-0jK6hf7cXSt~ekl3A6b_wTPe zA~#lEvfkG8L@S7CpW^b3m!|x@7;x31cKwH@TXN6z7adl*DG1s~aIGG$t z(+nA-^^2S8f1Z74THB|7?n93S%fSi_GdE7YJr#mAKLj2gU8}!q@rTqa`rQ}P*65}6 zHZBtSIH@2xf4AMP`%4d{*2KnhXBzyt9o;+k?flmU%(tVrzqzQ`y>ZX7ss0nL-g$E& zsrvQD6SAPb#XGy8JwNRI;^xVw#?+#@b*(bNBF) z()*#yk4dkrcop9IVP5z0?$94mv0vt2y8i0Xqu_sWu}|J#bv>@Y#VuLEHveMBqip@c z>r>+%NqjgU_egm9-fu$b3O8p?UQ&HQS&&B~fV*M(k9qq-{8=)lZa?+2$8x*NYqjF% z7i)HG3HiH`>yfl%(~;A?Z|BzknznP>5t*R9C!L>Poa`rDmLJD<@cg-zt%+-V-7Wvv z2zm0qtuy#P)BELGQ%=@*r(a#`UeWLV@bDuU59h?gB|g<`xf;cjG7q?K)!)6X_~MM0 z2fNk=&wN`ZU+_UxYT^do+T+(r2u8-}si_6?UN>Bf?U-jGKrMpJ=#_jem|EJ${iQakTp2C)DEsM1}8jpWz zN-e+K=99WN?Ca{~QUciz`mY!4){-!-FyFi(ZDy5N_nXon&vVWa>zCfK+`TOD+r^ef z1GVP8nmzANy?4CLq?%&7>!x<9|11rTb&KZMODui9;(031b@GIDb4&QC-i>npGMkLsi&t;ae3+LlzdGlEz#CoHP>tiIJB=r{_BQR5dRZB;S%UBN znzkSoRfEdM<*nAn)0gSC)ps)*uUNZ=YrUm?-is@jEJLew#PVXj6N4fjzt8fTnmvE% zj6F^`My(=zQ0Vl=DqXX@gotY!h64+`qJ6JBs}4;`91mi zEFH!p&v~RncAuYdGATaoK*I$oE%glNW$oMC{Ps`z##McP%c^Fh&F_+Wjy`)`|LfU# z_V@Qp`0nkk-Mzh@_vu26(D#om_e6zT;xsL) zroXr}Ir|jr-%K~lK>rUv<^^oz5kO@5GRs8k)q`_q48yiAyS&%ydDzYEIeYpn zGTXKCU;pm*Q%k#lrsrX)HtV~im9dN}J~CJDB~;`-SuLAgy3#D(VJ;i{1hLOopJqOt zzOzqsD(FzSE#np3e)jmw&K*4?u|E>~K=b2uC$Qv5fvw3x#)NHY8rvh7uRLaZ_EkSU{-cpjW&P?0OI~cSEqtFRJvl&m z;!pLN>oxlqp56U&VtvTPAKXg=mvNtDxog-UF+)l+_n(7f$c?!h{--Bq#rW7gu}h!b zZzDRzq)GbntUd?pWxr4K`Jev4S!nSr`gY&b+|1+4TW`Ld+PtCigYR7T!~V^y@0I@f zdsvI>oej&p>wfF@rd(e9|EVf71HL6ujR);rH^UG*&M z^UF0=JytoY%MTSPF{MG?@+^DtsRf&O4FAk|*PT1p z{o&F*Dzne!#}pkXUM}^w(jemQh4$9042_!|%Ri~M*%<6BJanPg?tw@Z!=cxY{@!{W z?%4EL(|^^Oi7C?^B8syNZsZ^8KAZlgUiskSxXEf;-pRI$-`^$QvEk5lH`B)vK9fD3 zeqZFV@8jeClIrEkXAIS>dr9`~dp{mA*4U{jNGloKy~a0N zHeh%CowbX%G^S5$>trx^@`PpQT9x|3xOabUIpsu|T6-uPdph`v_GH_vk~#mRMA~_Q zA@@0*Ga2k^!lIkcJU(vBeadFOZ2EXM_iW_U+o#s(y3DY2S{8TPVC%-0 zrn7eXGh%qE^qbtN^*wBwwG>k&tBZCu97pizfym!^t}5oi(NkzrLG*gvR7(n z6t^pz4{UK(Os%_F<_D`UOf;hYm` z`B$EwYCrXUyVyayCfT|vZM;+eIqAkHFEC2965byB*&_a|z_rUuMft8dPq{gJfygNv zhG!ujj^@V4b0x2Dst@4T@z}oa{r!!P!@@28G8ov|JuXW(wsM)LAZxZ$a`EG|mDX*J zbGM5)Y<%&C&wy=fx{bJlqoir+Q3D>i`Q09ydsj_!?>cE(==Q;>tL^I)ex|2WzUX-} z8pZ8qb&EX~Z^Z6%=Ar@bEuEF$Z?u-Kk=|12t(kagkH{h z9`~sz)-+3|@s(?|3cL9F8Hae+-zZ5g_%qAo@EhebI-I=OjkUEVTKdevbNRSC8-rFp z(eatTp|6)&c%Dz|RRvD{#T8R-U2oPD`I(f(eDou)(&-Pz>nu+RIx5VRZ#wy`E0`~o zYlX&UPhSS}d%u2U_^!!XU$vUMzV^(2o2{>YY@QQbIImG8NcjEyWmiIpk5prkncC<`vI}d56rW$cXRxm?%_cVw+<9Db4)d=R6(lPik*wC<#3a`B|UW zwSL~5>x|V&sb*X&%FoQ4XmHuLKx_f?%`FKp&d&(FBy?kcbY1j(hDAo!%VRz+6ulX3 z9X~P6c#q<(-~Bs#PwNGp@weUh!IA>NYWdDeGt9Qz5)R z)H#1$;BscySa)?oXCIs1(z88!o1AuDV0qi(cH>hbH(Tmk9C*G_lA0WJKA?|+_-=L$6B2yy&rCtp8vz-D#+PZTNBzb z@kI8Pid9()ie8_SPKY^Ns=@g|u2Gux+qW0XC!eWbX?FJ4<}Ep2>epIxom~I&nPB4- zwZc!alU53uJSr9`DRVBpkpEbsYiBa|g2rEk%02Hl3EaFlbx-x5T^slB-upYtH=4?*$7`A)NT2dXc5+aeSd7dX$U^2F2G=Vsh?-s2=J_FM94b583;)w^rDm3~z7 zy!CbAe!oFci7#4t*NZZf1ucd3WlrXHVVdvOUi>Bgw$z?SgS~X!F3N|Ni=#!uODnu#~% z3Kgf$I#d~9@$f=3>-odUdj4*V?G;^rcKovl7irgX!W9b0zHD3_l5Fhs=r-=*)7 z=S;j}7Cc@g^1**+ zVop+Q`awa~7rP~s-my%7zVT>Obj_w8DL$pD=T9EIaB`Buu{m993wGSie4KknIHhui z@`10Vh4Ui~ejGOr{5=1Mzs5uxwfV~r|8^8ws4x6(?UZgipFn9Q$NCo~1%=N(PWbpY zcIB*=U~Ut+@Y^phUhG{by>*eIhp)!=(x{j<%%c=n>%!3K}mVvCy+ zTOy;rF|e#)OuJUI&r+`K<^gNgpL|!ezBqo+J>lvj)aEf+DQ)9gozt7EB2O|k{G7c0 z(Gw+)9g$wyhp&IzXrFMc=%B{ydhcCVKis(cPMm*gpof}8{qN7(o)%GYjF)C;F6h3^ zbtZwet<62{n_773+uvJn-dP-N9NaNC-Q_vcMMav!|4 z`j<{i=-!|$tdD&sZ0X7Rcj|lUrZt~pU+sOMWTU!uj^@{>xV?VQ1)XOwoy+SzIkB+* z{xfOWkH`2}EBTY9*Do^Bk$#vm$E#x!$3)}A8+^ClxI24%c%9a9MsPjH!3*nCuE@LX zHDI>sJoQpM>)^!=mtuY@Mnv(fUi+%(#}`l24D;rvN0+a@di3e7$xpv|Re#OQ{h6s- z^Qwj^zBO;X_akloORuk0{`~!C-I8N@8*{m-+Jwcp7+)Ls(OUH-IZxPfg7)WdN@&D zJ^jbc)$2ke66#;g=dZpyb6WCdhrRQ4ewwD-RrS3p(Xp~%lIP>8jlCBdraI>SP8Q(* zzU|w!1oi3af3Dcge{YS0^hPN5&uG$^5|CHO0D!rwx^{#8X=B}-Do4q}9 z@v~b7S1y|7U+dZ=c)X8KtlGqPcgv#9$#Y7bdZQaG^JVPL{!4aR#_^>4(C=8A&1cxp zzyGFxnwLk~C}y>=WvlSV>-{c)JEN7qvLx%cYRf`bL{M?*T0U1vEDjRzn9xSvuG1b z#KXAwDO&np&+;DQ6MkYg!)xa!qbmO;>jPHvc!eGL=pt&AMaeec&kW7;*PSSO&dCkt7~lZA6R}n9N(ZHu%c^X!v4IwVSWAC*{|wb zynfofIC-K-Mnmbbx!=ahr0VYvCd8atCT(#h>D}E4?@TIs#MKVFyZs4@{F&1=eVWzP za}SUGTm9?dEcJu;`qp<8_Ix>I5Z{^kHP7&I`lcrDFX3in>!>fAk#Kw}O`WG9I#Kube z`5Lvkxc~me%-^L3Qpa|zUBP2v`RVZWiv523mG^vPwy;`1DLb=#xVJg;+xnyjV|u75JTt8%4(Z{q6qxGQUa*0{Q_esr^R z&t=i~PPMVwkKJ~!)zN&sM|9gCZH*46%#KMn9OK^i?Bd;LX1(Zfi-K*s)(4vv)*-KN zKVIZ=cgBNPOtF^?x9-?^a&naWZ#J>jA%Epx9KI58FKOB1@J-d*>TUSb59FPk+cYoX zs4%+=-(1@)R+9@MnL$&uw7-VmlBr?nTG@a7!R|{gUw8goy+K`nhgn&An!MY;`|saO z5m^5!Uuwppb6JOErCBOg%+-=eX)^3t`oBhR)xSymgS15MmOP%K_0i}}^PRYd?em|P zEPOsIF>;=+@T${cjt)l}<(~biufHj`bh2v3Orftku54Tr^4;8{c9)@-qOiKHO&O<^3q+ z>Z&ak*t3gyk>IqB$nU5L%rfwZ%KB4pUUd6M)J$~AmiDSd0+JvY~B6KAbDQN1zCf~ z-?*~^{!Lqc+JByn>uSR;j!-UssCh8n|V`hC6~6p+x4RLxTMra zlRN9zetOlM>QOoQ$8Clcp57}zo!W5bLGaR^hg{QDj~(6g`A+@a+nwyMw6(j-zj|&I zJLYh{?AUg%^I599qo4izX*nS`;L`QVp1Lz0f_tC#2)m>z&KLJq+nn8bYtb$KBkmhF z-@IY-=WT9nt+0I)*Zw%IL?gyMGyYX5dyr^?rMk$aW)OU7_)*Scg{pP2j1 zV!OYra!2yA{if#IwN-7u)-yCdaoJ!PmQdlT#n=Ab{M4Pk7b`0Brft++*m~!&@w9o- zCn5r`PxcL;aAGSfYku^n%b!=y&77m^cwz6GTEFE*c7fZb97(v#X`8Ok5OD4NUdd5Uq-)srHNmd>lyTdVcKTi-@5+xo;xDQ?$#?qk{_u1ZFa#HU`Le@y$KKHp4fai(|s zS3h5(d5y8)n0U>Ft524j&9ZqBY%CEJwjopI&h$M- zR@@D#kha|Lxm>M%WwOPWS*KhUPCKkFZUtSx@EMU(XSh80LEV{;V(0v&z;# z|9eX9p}g{pmB-#6n6y^uldIlyX|cHW~PK0B&rpJ6`qKKRwd1u2WYXI5O~2w1f1(^8+Fw5IaSPhNcJe9N{` zL-yfPZS~{#r=Pj*Hn~XQO}*RF=o2bF7XrRl|9*5@**SCF-%M+l+`_A8`sS=V|1@B} z{)uV2XFXRWOH6L$Yz!{d7xcOo#yFj6(g&ewF}ofo8C=y&n4qX_R9eii|M$6`lzkiD zxhwp87424pSiG3*lI-KPrAuAg9P?Jq>3KS%-f-V{ z8}HxzWqy&zdtTOk?W~=Vw(getE3vf4Gb=u|`n?sousJN7iTURow-YBa%uRH8JQXjV zee%ynY)+EI-l?Id{;z*%efIb7#f955T@v3cY}IObv?KVRgQmfPglP`(+e{5PE7TSn zw0sQk-nZR(#~j7zgUaT7t<&dvrmgxu`(}Cl-Dg)y7FF*5=(FRL%!=bqMXAO?4v)pJ zDSP<_Rya0lWw1W^R@uPAQ0e;Tb5%ammOTugjq9&T*W5a?xcK+tJ^qtDY`1)rRkT>kF#(*+rQ zCsX~G1#3;wPAZK2dj4sFmXjvGp8d}k?ALBtFW@oA*eX;J;qh;U;n6u>!P|P$R=jaB z;Fq|Tu&N|=;xPsdscAubSZDo>-Fmy+y>cnP+ermKX8{g_`o}rOo%)CDX5GE=mN9F~ z&BA3G?LAg+!oFK|{}GnS$z2!9XxUn>H1m>8B}YWTg%7KlEX4jU|HuE%UTlM3prxrw z%F^eGwccvRW!Xz+9^3td#rjIjX#)Wn0a>;~mo!#B^T=^-SXgAd{e@9N4D0%*S`C4D zjTWLR`xY-&<$C}1;kNqB$m~~VIxca|yC`_?*QxodtSb+sq)E9h*tye4O6Ix9WeJx1 zahW0Rp7nkw+Fk@4sd*h{mMNiSVtVT4WxaJ#?5SFQ%3Oank0>ykesx;+_-eoyD8iaUDJeh&Lm!$t~ha8pzFndb7jsgXxqI)!TE`E z+O-Yqzp^xmf3csu_uaHWn`oY!2e0GLYIYeuE-bny#}38 zb9xTdi$|ZjwsO-%=7dUZ>6Meees|2jz9&=Vf&~`r zjox&&to(hzk`4aL=4Lxv5VO`o#=bcrpnTXy4F_rgm?uJfOSG3hgus9kGWu+Djjjhn=(9M4_C zyC?0JOx0PwaLTDdS<{TKAG{u&{}Q)<=9H|3)1JODc(v&6CbP{C?)KU1wCQm@3LEe*(0d_utH*DAm0`x!RiIPa?OWr&8KHa*=%OxVxI8k`}yl< z=XL%3`LX7Yb%k83lU*xs^0b)`O~Ra-F1YA?{WDQVA$z&kijez-N7T4@mUU!Z)p{VI zad^T5*NQpr>CYSXx=%M-z_(=A!U^X2E9+BMx+O1U%js${I%)A=#d`k%?q_Mw3)C;| z4)A?zwsYTskb~!De7&_JTkq9&=dJ^@1M{!SM(Z4vd8j*Mp8L@Rw~IIY%%!{&)$T9% z{Ia%Dc!BWTUX~R(IS~zgK2FSaCSgw^8J9*T1uW#4CY^Ek?Uxf%e6Mi}>P^_%)g$P2 zOVh}$zQ#|kJu+Ba+|1hf;L41Bx-(z-&;GZTcl*X4C0hey*Sx%3b=3Pp^6D;ikq=i^ z9elO0d)CKQ;a|o7et#G4xMo*GZpiAZPDirpa+Q)gf6rL( zg|N@l_NgRI`+81n;gS`T%5GL1mp?XDWa+a5F82@D9S?X{zv=!=1N-YO>FXtLuFE_) zyW-RGIo#KdeY~J!d+Hoh{gFK^*+H^bvsYPD(O z+$DR;w482~+jX08O_=aD|J02C4D0n;X1Yns=&$7ev9k6qf7PX!lTzM{Y+TX8oIlTG z$*~=IYGU$5;&Jr~QU7gBPMg?Er>SW5Jb1mq`obbXHIL*gP+mQ$Zs{_f$OV^HzdO>`&XXVUL2uHtt}`#n1$j5^xaV^{Z|SLUt_&U4Lgi>v ziPt@q+s_|*xNG&C^q{>rq;00JtTsO-T(7WmhKg$v(^2DmU9bM4S=rC8oD7>fm%ZRk z;%XAIr+b*Y)Blpbr+`aAgG-KVR{)`W6;;iPMso?eM*z;2} zI$rcijNP6h^<8gIh5T3QG(68>WcBR#l#d;uOS?bpDwT5)N$Nhpa{to1(=2R8$!dI^ z?F<_AjqJOAu)nzBs;=Nz6#FyM$y1x1<=XWG!vh`*-{0fcXr94QEpN4X=2frWZJ&Bq zUOpZW(y;&V5BI5w=2w}Q&tTS^^!EC}0M$N?vctiGwKv&C-8RI;&Rlr@g(7#??CqO= zd}%*=_139i>jW+H%9@j{rWS8zShwXyg;YkdzPfki;DLJC-UlI3jh5Ui?=x*W=a#0O zZ^Q>BZC7vo2bQ+x~d_V8g#<6BE7P zADg!>{rYRIP`)QVw&Z4-Oj{-EzAQMz=&^c|((H=@za~2_ zd3PjJ@p8<&XU)E+dg@)pCp_p|e`Bp>@X?tc?cI}SOj_X>_dMbB>iKiUlDwSnmMxc_ zvs7ZqoM*E(a&J2B+?*~i1mqmJSAQ;C+hgkr zBd?RQUcal*op|u<@|kD!{P(p_>3jL6O}w(bxyJ2hOk8F~)0)grzWLYYoV-+0{f*T? zxn$2i%bL&MrYYZF(eU5@SKu|xh`5wTv7c=e`kv2__H~-LeU0Y#!zxlA?zYP4AOE+b zzT?tq-zdzHR9#&~XC{d?ZD%|XA)IP^Cqyj*yyG~RvlvQOu%cg4@N z+Qs1Wsr;|z#JCw>jutGm|8>v$pu25sQ0wYL(|_(Ujg6SD9__a3jZ)IS4_0T@Z$9T1 z(NnIpXgcI}VcNF1I<3ol8S}fXKDp{2J8kipV{d@LR(G*IFS_3RnWy>q>bJz^uYr#n zJUoxp>$HZ|G`tHE7TQ)GS#plMIO~X~)RWXQCe1gOZ{@USYIn}sA<=f=H_Nlrvx+$8 zWWPD~$F8_?wSQ#=`^gWYWq|=F*9se3ZF}B*(mm77xyD4ME9hyw@l^NvKQqGqJf5Ak zv#ch1}sP6YJwG zyK6h{u^7xqv*JHySzSNDUr$>%z>KAG&sE>!_h%UX*P$}QG-iqP)&M)lN z8sAoROB~Y<6)VbCtY7WldF@jFKc}aUk5BsQrW$r&gM)tNMB{^pays{)cHAiM#JqXw zADa_PB6#Jpi`~@DUTBeutdV?|IpwUN{|fioQ(Jr{24y_W?*H}S|Ad+~6COTT%T@8c zazeqKnoBkBb$|NLf0V19IAKW_hg)q?f^wv|)P&c|O8zbO(00G)d361p`iJiI4xLYL z3F;i#I(hQrpI!eC+OG@ya95|Mjeq@z&xQMyv~D(>n()}y?Vj|nL%Rj87K#49a%!vH zzgR8(i}#;?GWr{b4(K>H z_0LLa?@wE;o>aSyZF0!{yGmJenSF)p*{5+IDA;V@v5Fzzf5DerPW6+sY??3rk>-i` z=fZoj)U9@pv3pw3l>0^3rA{sX6(;ku_V-);(>ITY{@l24-;m}vF-|% zXH9uB?@sm}DpY%?xZ^5|uh6uos2 z*GCoUN2N7$IF;9JyelGd?!AZGQ9aWp);o`~SpVF~nZD}rNtWyLjGn)?I&K@jcfl(0 z#1*@zFWy(v>b;7=!{o6^NU6%-XQ%mA=x|P5wPe|&nw#~hTGG6F(^J(a?EBmr7P|22 znhUQa+FtD`&CxLSmsAZuWu)b$t*o`@#ysZez-*WEn}ytyHD3j++Q>MsWj0%^?exh3 zmfceg4&wY1rna5hECG;X?0>5L{ z-s0~|U)q+4@gJRN$++O?{2DI1uk~{8@=drlM44=um0=PwpIO3H;n~@+Wje)HT?b1O z`E1VLNU)kI(km*z{E-`jRf@?2i_`!u$HR~R{7GrGv~&IK7W8QMhPDOut_Rnc?S5!` zjVn{s?Bnd?_SbUHRo-zdKWI4d%09TJCa~>`&7+=-v&n}GU>_} znd+_f*3-~5(HE_nI8*evd){CBqx(5nI?rxn&8=$xFmcyR&*#T}3%|NIU+TBL<*#q` zwNjTDG)gU$h0m&-nse?-kLTs<1&4QOy_lTJI=yqp#-EZ4Z7)@{e*8Cet=?W)i8DFN zicZf<5H35u$DcK={EYgfjoa@ZHqS3+=lhUycP&pf^Yw|(f~uUtJT-ppP)hVzUnt{R z*Zf3!OMtFwdQOV0gmRHw`Rys|id@7xuaq;CDc4tT$dk0mtg#I_`{!ol^_RyZ3htH) zrYf7WhA2EU>~Swyx}5h?SLg*<=iM(qH*GpUuTnzbQ~8Dsv~tK}GHOM8l};L^i?3RW0R{$iUv;fkuMr5Vp->#hD7M?WG%tVK#jk5V=GCV&2}L&6%Lv`%J}bc$ZSkY> z_gWpD-VJZgtzQ?FzrsP%W}!6iOBUVTt5eqmM{Z{I54}}e;mwizCO`kmm!qt1Ki{y< zJGAiJkJ_?RZCy&4?Vs*u{gZ92bC_?waIVseUppCPLPMD44l#1<-?vI$%<;l`Uyi>8 zJKii@dcB32Km4a+Miu+lUt;yQ5;WE?{{8pyeYx*)+vWGy{dxAW(b_*J^sZmvf$G0E zrPtKIE`Mx%J#ghS?%?}Hb^*ze(ks%<7$z^`IqgvPz*YN^+rlpr()&#N_Nc^0hjvS! z3Y@=1d&b+%^R?e@ueonFck48;X&CjrY&e#&V3_wB>y@P9K-rq0y(`{fV!_Qr?P{lmgu z=>K{0|IyoNzv_)`*Xym-)Bo?QQ`gNX;kaBlL#~#0Io}o8_y4>9ov~R|t7E%-cSXa) zHJ-d#w!2rD?B2{gd4JHAl|31P$0W^G)E|&v67|fQ?^6~3mRc`f%XHb62*;LmrgH~;zO+q!)h6tWMi z{){aS63t~W)!4i=@_fz9uSb*www+k)YRdCs@@owhZSK0OhaP&bsV^y&;L(nsckEr% z|K$0ry{|4+uNT(lfBirDQ@!PXBe(yz&(`ObuADae|I?|j9x?y_@Al{ZnVx$*XXYMQ z#_{Nn-0|AwOrmUJ%YvtH|1>kJk8F7N<;*AEFF%VW^<43Lx$JDCub@dB(x}-`PQrlf9)3gm$#**_FcHR zx!rv3JO|4zUX$#(WMw@| zuY8}Jh>_g)Lr-}Ap0Sb*N^*U&ljD-0ph4!LN0$*ZIfV_4=IFHQtU_cDC`?_bAE4`S19kwD!S* zFunBrp0d2sfDJ6G-oF32?a$4fmJ{`DAK&kK?;3iBxva)6@%zKRWhLzln@i2xXTF}` z9BSkB)AW4o!tjO9S$!95I{npEQ!eo2ipv+18_Zp#F67n9YcC2n>5|n^^qKSOu7rp2 zfsz+brfb$`hO_BUE1J-qc4vp&!PVU6wO`inEL1=GwetUO_v6Q}KEAU-c6WcwzUl3A zlc(5{?w^Qr?!9nAAa(Gm*9o@Gi;_^SfbZ!Hsj?=`L3mgJByBZ9e%TD!li~2sd6H} zzs~)2%u)8P*sIy?)xY=e+}2Y+kux^*y5xDTDCUEW-*2{=Z9Du}bqnu89jmnPi`J&^ zE}de{np^(x&0Kz#2lH!BM4j1u5%l`_CEM-k@;nj-Jh@(=gwX1Nb!B~!9DPk z;lIF;(_1Ukr<7ceEj78#XsbSv#GyRh{pGr{CzdLuYW(M0|DUns%Rer6uP<>x7 z#5(WRsVu8kqDLD)c{>ZY+bjB?ZRil^`0+2&S85%b zL;9~7*00%Lq;C?PP&9jCp|;l@bEdezGEY~&+`8<@8K=zWS3|T4qcV?&|IL%xqCMGj zX%WBHua=X+2JfspD_8xSJUQ~ppV-M&{v!LXJ*n4PFCNBf@cdQdWa~!Z;Ay)~U-!#q z+Bx^+KBK$NM%SK@t;J0yW|mzK=gqpmwMG=FzcC z+qtVB|9vR?px$g@e@faM;fL3c8RRWdd}e?4(4jb)oQ=H!9Q&4jF84|KJ^TBP=eBv% zCq(M*TXsMH#dk(_%W3=S=S(a5m&Ee!>N{)cImhjkb_v}L6N=Zg@zDJnNt;7%uq~W)PwKbC zSJh8j4qwbE{`dWJ-cyOTD8(SnR86~MzXJXydg=2#h~I5)x#eu$)Ej?$jsJC~7r)Tv z{3D%z-TKDGx^lCN;Z2S%Cw|rMU;f18|8IE@Pu2e~SoX>MY^l209(drrJ@4hyLDRO} zshuOo|MaTctFoJ}XS}|DIk{+iMC<>%FI!j758ClfvvvA|;@pkfYSte*9aC{NI%eUa z&l_I3?PYs!H>GcCPs?=H%X>LKl0e@xSS-fO@vYX zyBq)O|EK+`-@0wfl>7gu&$p?(@&EtYum5k^e);cz>3es`?^`Zc|9#){AV=%RpG~q$ zofo&T*IxNGZRzvGxUN2@5{WOcjmJ4#4Zmwez}!vipFyBuhQS{)_2?Qub_x^ie*@_F(FXqbC{bTt*o$12%2me>Rx%sDFbjl(2 zfB(fl)JN6$3Asq{Xzg`K%S#i_KbrS9JomV5#omXjjz~%WUSIbynCD?sytwJ-H+y;( z&5l?u)R(E=n(k&;Z!cT2_+iXR{j>7Azv{jo`ET3z>&xB3ZAuTW-`!yuE+x+F{dqx7 zXa9-G0b8?AYTsu3!Z5)D3}WGGccezxB*Gc~-b(W2$}4`r>wt6Z_7r z{n~G1a;ie|t8-4Y_%ilStTxNn+db{tEhzu-wtJPC;EEltTXyF@o~2c+g_cOgeeA3>*QM3CM=iR40m(`=coxc?L`QjYLo5mHpp;h5!E3{_}p?vbABs-Mo69T?Ylu_FZaQv2WGvOUAAXCAexrLN^IZDXPum z?Ts(Cud^wc#^QK=_7dBgh02zq4`+*CZIzgORJ|vDqD!90(tv5WdE|ji$(x=sU)OO2? z-yiDxJHBuFe)Y%yS6yfSXLoyRujc>rzw!V5?*H}rCqHw)W!@h>;a~e(R@da88`S@p z-xK!v=b!yX`@;9B!omh0Z0^t5{W`}W)HbA&_h#$J81>_%zpqyBZ(aZEz5l<1bsy^gr~KdCIp@~#dHXDWzMVcl*RC|{*fopO*Xyl* zzOvs}RZvy*>1_9Nb^E_xF2DS~Ot0_$)7fv?%~cPWi*In8vo|q)=d<4XHNSTMf8MSC z|9QThrKW%Vg~{jr|2=#%|4rE6_w38#Z>;@wcYWRO&Y6k3XaBi+cyj#wn>zdNh%CKT z@yorX{zGMBQ|$9=&ucF$6;vAbWw)m>%Rp`AE@}aNd06uzx$eN72m&n`Qp#-ce;GK-#_`s9f7%D?2q$T zJ9hs6eaihf`#JAfd2N4Q`|tblDu*uzwQ)O7Zys_$Hna8SH4^!%u!iqzHMpT z>1E-6e(WnxmNee2A@}Ra%}DWOpQS3)_4i%BQ`{Oe{qy@y^N{_GI6_`~J z9akA#n8C5_{dU)v=j2}S*I7>5xc%+dwu4_2E{8on`gys1-e#w#I`fJz->bar@N>=1 z&qw#v{aE&*{Py?XpO^dB&;S4B(K2Rj<*8M{ff>aMeN9!ZldC^H(!bu5b%py*!2NCJ zng4H3DBRt?_>qo%t##9RJ+*(QbMu?tnkO|^z5FPt{M+r{uH1tEkA8Qba+B{#f7JYO ztKE$!_5BNYHZOKNuk!oMP4Tax|BoJ@Ki~Yb^zto}Z7aV$zIlDS?8&;wrHm)*Zz>xb zJ=_2H;qTn@m)45zw_X2c`jx5;I}b(ro^r3gZ1=YygjL%Akec`3msG&*9Fv+5Ugm+HG4`&MCbXUNAe=Zr@4ALy?K!by?%T)|)M< zt1R-H7W@C;%jfZP7Tmn1zpsAf#bY~{Cr?(bU!N5JJWQqL-^q6|(|6Ro%z2!a%YE)m zZJLeD^IYpUe0fdZ-yFOsu0Q|#8_BzKKX=#H{=2-d=GN|+)BAI8|GZhg$@<5l`>XGs zJlp)`$<3S01;?H&K7GFG@tK9OVn zlTY|y{i}Rls&r7UM>Yp;NaqIoYPoG{ERPPED zEGXY~emhg9va@;6%gguwcWmo3ogAWXrW-PU-xr^YM>AhM_jkTNuRhJ@%ltp}`+vQC zU;p{!&EWqpkA5oiT$RtffB%2ar}~dGWtP6y`;~e!^7G}h#=kE<(@AEnFWV%0_T}b( z54PMs^yg#q{=F(^4r$IgbaJtxgnaG)KNtTcZ;AbH#{X>Dve{<~to5p&R^HuX-10m8 z`9iDN>ObVodk>t8yBTxo-}fg;I`ixQ-1+lHEqBTJ47ESbm5cPxJvpD&QV7O<6MZM7;T_vop_|u0H!?o$T3Xg@5nL+x`8s`F`)I4eIq0 zsy6lie?Gcts=Cj_G7aA_x7&qs2MD!*zqZI3P8=dU3(^tRn7J7M0 zYW;Nf9|wV{QPeO3U^{_YlbGYZesh|H``A_}!sY>>UEaIX{-3(@->y0D-gkHXzKQkQpMQG1{Cs`J z|F^rJFSDxsoFXD``+t?)zlTS^Z%fLHmkGPEEp#LAlRv+n_n+D}>&1Eg)b$bX^Y*1r zzi~p`G^YG|)zOpRPI13K_vw87-Fpl79{=&jhj~@*R;8O?^lwye($`urYr!53q5ACb zx~t0eReXD0?&ckSxBBz9`s9sOpWaL|v727@eA0uZzpK+~-+r>vYdNjW_UY+*yZ_HG zzIw6QzUI@<=kx#lntZqS#~GDB<^H$A(&gfBWZc;>^Y60!hsRz`e1A&f%#1(!-+5QA zUAlSeNxL7j>n+w_|Kl&eCrPCGE<+jfkG*R@%yzH;x@PvlW$LfJKi~esI&m|5?e2HA zRbS2C$A5j?uOI*Lj^EE8cV7K?cS^$kUJ2`7u{CFnsz3g-OMf2p{Bv&qg~C_bzwSJB z)43k^pxO5F%jVeqGyZPwIrT{2)_bZ+myvXp6O6lnQ1?n zt$6s{{DtxPqOT^$|9#i(f4<-7)3#?f zq1(?{)mFU|s`>c#q_ch9k1yZVA2+KPNNt-hsq}6aL+e_tE$Yqx(~fxdOEmExyWf3s zy~!+hd)uFo5IyRQJ_>-=FE{?e5nV>sue~&;S2C9=?w$U)zo+h5{hgEZ>+jqS{n`5exAyr@&Hcyn&c*M)+Mm-}@$Icg*^d)-68rZg zT~7P_t$TH}nK+~CY=0Y*;CK4^`~JVakte0~%Dw(huIHbZ2b=5v9G`rDrsm&-dh4Wv zc}FbH*NfNJe*1G<+&?bH>bm^-ZHjX5^POzA#h*7*kh`recWb@)>vv_(AAY=1Zt-*d z@AO~&?YDK?+ozk!=+!@acr@;?#D(>xueaa(v+w)L!)21+X05Z`_mS`LW#amwELv}LNtkDW~e_kwRS64T`ueu@mJLfIyKhthAJ$6a= zzxGY#`dj8Xxy(1xZ%b^rd--j8{L^psHAi3m|DmS$zj)uV*1A7W!}xlv_wT(C^nKsl zH@6En^}esGUM0Qz^V=Kyd+L+hx$CQ6tiAKS%%bmb`{}ysAH8?JmPyQ&bz5)urmMQn zCVGC(+~wc)%DtOfpHYAA&%yQO`)B{T|GI3;-fzb~{wsJ~X8(OxeCe+Ib)SsSy|It~ zwmyIFzT<>gC z`AJ;&^8%(~Xz{(frlzvpjX*YBHXd}Ced$=Q`pbJl;KX{TRdg^V5yT0r$&*{4V`RbYHo!B{Vsim5a zY2TE5p^m;y#XFBl8Ctv-`k|(vTb;$bN@e;M^X=ifUs6nRtNzs1{`wnVRytw*+(XxY zo#mGHws^W%a?bvZlD~fH_v_XF`SN@H|G)W@wTl(&-!R8)Ub%esnH$Lu<-;G;f2*$$ z|8e~3pU15K*=huQqb5WrzL-;$`0&nE^<($8E*376w9YO%7NBdJK81&)L)ZUb_%r); z2mY`5|55LQ{PfTA`ak$p#m?=#X)M6KDlw&AQ90~Uj?%)N54anu`a(8)c0CIEYHPM? zZQC5R|EoXoA6#F5;D5~j>(B4+`?>Vb?SnH!O`s4mXKY#ZBg4TNbxBtKX?B5{rpF{jhb(qfCEA_8T z+g*2@(W|hHS2Z=Q%lM@*k!8s*E=4CUA)m{WgM@+$${4ESo&2Su9-sVc zeel1*(>u}6{#*T(SNpI1dH>I6(>WW@E)<`npz7(guruw$PH&IcmaKv_kr{ppSH=Fk zN?tzAO4UbHc}k42#r&q_FaJl+{$FqU=KoAk;Ju&zdH?4B!E2^Wyph0nQoU2JHKou;LvcF+Y=-sx% z{lhwA_ujp?e#zeu`KNMks!wlFZtPZ;PgAWHYVu9~ANsR>L)$<5zyDu<&cFXBsQ%yE z3*7%svTjqo|1-`xf6d+SCqV%W(#7XQJrZ*SmbmRStG?;E`e;wHoUNb#fm?sncNPEp z`{n;$?my~LXXl=&< zLe&0ee?G7M!Txpqe(pb?i~jv=s$Xf>_3@x`{g?3UbyG_%zS(ph7Z9F$O(}3?XVTI` zQ;zcTDo&Ze96I;U`cw55CHw^!|NVdSf1lm|#E+lk%U17yGU=u}hoM?9!zqr}zKd=p zpPv-fFo&VrIr{h9k_iu%7;Jl>c;(5To_~?^|C?O@|9#5;EinvBVp#$*71ciq$XY4f zpX_*qLzB6<-t_4FCP|igfwP{-&B;zsYZ7jWie78{KRx%~XRbfz|Nbv;{J&?;|C)pK z`crt{O*&%QE3o%^%aWko-x-;wa2%M_VH)y#LB7b$#~d6X@)b`MeEwa3Vt=>x-}>_6 z|LvDT%+_)O5x3gI7;3D1n?>w>5C4NypOOIUG zRR%>V1p@2~yr{d2ps{*V4! zJ(DMGy&_aQQLfn2p)vT5S^T@aA!=2V<1j^xseFZU6n`jY$st_rCtl z|LB?jQy1FrULl_>r6M?^Z++Y3kZBwDmFNGe_gq=Xv!dsoOVf{g+|sY@0#e)Uj?{Eq z@ArFXcIEbQ^DDDUm_D79{(Z1*DbqKuX|JMv7AmQ82s*E~4Q_fT<><$``SiYDtDOBU z_x*{l`>}TIG3_7!)Bn7`^(TMd&s3*`;uozd7wS1O*ccky+2j`P+PLp_RlKz2gf#VY zYrln9S+++8iyhROa`^<)5i`|;yZ*?pVm|X@|L;@w`p4>*vzHWXJm%t)vAX7T$6_{x z#1l(*rfBVFd&(5EYVTAZ;&hi8ccw6Cf9}`*VE_03d#3+8 z=G5Q${J;Io$^h+sVfRA*z0))4-&fh>cemI(#5v`SPwtQFCg$P6x{`MsfB&ES|M1WD z&{y^6e$4;+lRcu#{>`g;rOkm&dYT2rM{X&9l~`D~ULo@BbS7)8(|NqB6u-AWHFaCeBm(;qwahBWtIvY-8zB`k3 zp~U^_l)A<%vdgD!*}9O;B}uVf-dE_0#n1TZ|0Vx_-}h<$^w0an|8LiPm(IQW@H=e&bC`h5p_7!O<&RVeS+>&YYM)_dW`r6={F|ITvlF8-JPcYk@~{|A49 z{=K~rs}hi{>zrnwJYVv{RSq@ACEcA3XkFulL;LxeHdm zip@G#!aVEs|5Ja~2mLSq_5U8@zr&Ay?B5XnUwrb+9}6uwRE5HhXZ_mO)TiaY;-vZ6 zoEJCLH=KUKnf2iNqLni?30R!}`+w`t_~iff@BZ(thZf-f9d}lL+$g@{!J`-7gJUK? zF<2h(Cg1<+*LAGB+_U1m!^AD6%P!7rGysJZ$K?OtC;#6O^Z)*9hFQ_>XP2FCKQdQ( z!GtMO7E2%ed+vh&R^Dw(E|w_^6rSKV3k*n3ne}J=ng3E>_dox4fA;}U%uHt#&`w-v zkX0*EFQagDiiN-`^XmIKjL%zLkH5~^BK^-vH`9yBCy)tLz1Ls+UmO3^|MbuM-Tw=B zUTZthwMMqLEd7CkW9Gu9vVe2`}Gt5TYvpu-cTR+ z?*HSx|Kb&&J!<+9=x|t=Rek0z!K=p3sgkOUQ5>zx^)E66ZwSq(Z~k|__G$gjU;CH;4Nvvqli2v=T6VJDT2>>| z0|HrkR-IRhI9+Zn+Vteo!qN`Dp!^rhzwNjBpZ(8<>Wa9AB7I1zf({9tT zSaQRUkZ%7=*+=beH7)pjQ>5)Bd(7nj1;_vR|NbBQ&|c=)|2%mIw+r#_RvxqQs$0-=#Y3Qk6^5T-ks9WT4Z5~#L#1;*q*eWR*Xm|EDQuQmNy7CN zA~L1AD^uSsl(GE3f$x9)<^SeC_jCT=Fya5+FDdd;Q|`qCm}oDaeEkAb8&BY=WsZR_ zP5TO5AI>^qo+@d5Www-?;xFar_G=FR|MK7WU;d%`h!g+M>E2A5DzZTI$O^_q-|yvA zv)@s4%9{7qHP@2wdP;U%tm~;P?I|YnW30b@l@EVt@Av=ylmBXe9y|Rj&-1LGt~z_t z`zlFO57y(W?4_oqufJNyCU>y2b;6XzCPtkX3?}WprFAXn>xrNJuRqv-{;&Su{Gq+x z6Z?0UCUfpRenitt>+G9<9HLd{{E`{NYcm@%!Wav_T>LrVq}p_Er^9QW`naFnU;krm z_3uCXW&TS`F8gQyv)=aqim zd@r&2Lc$kq(UT^-CS`oIGYg!|wNdk^K(aftU*r3gJUbZwHzczDd;ahLlmBjiZa>~R zrQW(Eyncz!^*M{YU#!m7-R7_|T}w0Rd`zw0gRKri>3zPt-AtcayiRZ}6j}FX(fPo)FMC4W?Xq~C^)imm%QDh-XKdx8%Z~nwy_j!Hzk|_q#Aq$OvzbTTdpJ)3#Xj+PQy{oC<|9#a)yHS zo{?D_!`{zc`@PF&Z@`!OwKJ0L-%MVs#(m~Od*CL4otv+OnQk;&7E_%!vwvp&ey0DI z|IPn%e?tBKIsf9htG%zLG=GnZ zSz5K{&;GB!?9bSM(hK*`{iPEZoi=*#RLOO1+n$x4>CLNU6f@Z;&AT!?WI_GL@A5GV zr7Xig1-feQp2#ZT<9xuQ==_rdy+7M`KdpcE-~V6!VNhYCC(Yq=^}HI3LYPqB-hz`) z3@@ie3s@VZsBTR+*)gN&Xq-%Ml-k;j1#8`p|1bZVd;NdvtiSu!|8xJ`e!N)mSJ{)i z@Ak9Y;xm?f**2~A%q@34hg7bq3bS9<$IouKWno>_v4SV5X(6}Ungf6DxiQ>psozok zFZTl|+oVDeA?+vERN+pNF+*}Bwf*2G&v@=H8QZq5ume@~>o zDXwNi>%Pv+e|AeBNLxHty?!Mxo>674(+=K$k3UQQ6FnNP^?2Sxjfpy{$-#ks3@ZzK zUN{Nd-z#0%W!o3DI_a6WfT3#JAEke_6}LauzgfTTzw!V4PxZ?G-hPbHVtjL9E~|jg zN%Kdpvl#EmmbYtqWE?eL6F93!&2{Mx-}WFL+4?}|%!5~&M1uFOH+rDAGse(BOxOJbs4byh#r zxg%wsbn5VAffn(4NM2lTQJMS1<;a%*Qf~A5*RQcO{w65$raPQVpho4>UAvo`A9I;$ z>**bQyPDyy^1p}guGb$o{$Kv7-uPeQ$6xvF?>^Pf*s0#NmHWrNXxV%JqArG27jB$( z@O(z}1k-0po1A#6bQrDNmlpm0Gr#&seMIyBnV^DK@_(Y`|N82W|F1M%49hgV7)<5WJrSo^qt_sjmQ-@ZTm(f>oBEUEmDzw>|V z>W};TCYdiVWwQ8Y=uool+HN5qaf$q|J@-XGs_E!kJrVe<67L6821gvbZBb{e+-&$;O$dE`E}iGyD57_w)Pp z&;DQd@_+5&|DW@}-s~3le><~y`G>>zjDKDBx1T$2@6Jk}c$@zZcdzQ#tN$0n_F}~% z$Gzfb7Mi-h*&%5w=Y3ExgHdSI-b;P1m&$vzaFgi`{L|3me%k0=~z_1R8Bvy znydFCpa0#|KfivR{9e5&yZPEZ-fiXozqS`e&9C1q8veL``L{>xx0B_5AOBfcv68*2 z_TQTKD(9jv{6BpA{Qr*yzW>g@`EU5s-s<1_SNe&W|AKCuk6)G6!I7mR)9Y2Nm2kTL zNlRCvi$Q(1{8HY7@2t{XUwI18(mFh=+9T-qmq_3L=T|@7U;gp!ss9WmrvH*})t7&I z-mlI-e{Ri(?eg`14xXIv_wTd4|CjswYX9B+t}b8yr+=&6jPAp?x|=s{FR9$%Tz>TJ zk>tEpEtW?mb{%7zShH$tR?*^>dy^;KTfJ7w)U{8~q2uh#v)T2pJwF#WR?L5Dzee%@ z^1t>^|4;dU>|WAOe(Rt4izm(yY&PzcRBb*VwP97;l-vV*Z(L`*SQhDDh&M(~9aelYnx1{a9sk3yQ<=PWxA4&r4(lb;E^MjYRDJJg@WhGhbZ+*`n)e+zDe~%ucZlMgPxYt% zzkXWJu&?;%`x(pr%>VSicEW$gij{x1JD1mL7oGAD6sXd>=RHYbQdVZb&1(%pZ^Y}D zi|$(aU+<S14J>R4B7oo+Hm zf?DJ1u36E-Ek>YdTtDHzWY`2yk^1TX-wFRKcm7v@|HnSif+c5f?~#&4M|OUZDB4&r zSrQ&}>YE$C+JDCCP6f*y0dMz~Q|Fka1c^=AH{qr6M`C9%&*yb_-iO6@R%H|0_QAKm64HJx%}Y zf7^o%_`fIS-}Afw^1W}eSS6U+#!oJ9tzUGvPHL6N?hv7-mPcJ7&*to&$sXfz#^=M@ zrVX<}@fm)i-beey|Cj&ggMBeW>~#H|ulmA#InBk36(irA&Fhj{h@%?+^aBU;NYk4^dkG z-(KMU$#2La{Mt51`Nh3(_eTq6KG6^4GG*|TJ?61d#>*Cvt$t*FmyA&R;`ET&_zxLDp@s9t_|Kbn+w_p9!ef{bGck@j*F71#NH3yaQmIn#*`7|7dd^j|zyIHM-hNlfgShJbPoho)WFLJ~!<#U<)5lgUCFJWj*^KtM=oec{ z4vJW&VR#iXyvyaqY?)g9a)Bn8_{#Shd@qYSK`*%m{k6-frxZY=; zLg2}@S9~VeUb&DQ^eCwLMv6@6$#pxXIP6}_+o9~f;`~4V;D7tQ{w?3G{XaIPJoMk^ zDgRfW_`g_aZRXAlU+asnW-RDj8#*(p=;rim&Ki!*&nE`?U-9N&yX#Kd>AXX*8G9J(OujB#{a87)f@c(_C)XLeZIX9?62PQdT;u3)zY7Ah8Dpo$?q>| zZI3$9?DG5#v+IiE^OAcL4lUwt?Ebm$^Zde3_CNRc|4ENIQ-5#jwJRE{7JhTkT>c>0 z|I8azEmyfS+4^R(lk^N-XHV_8A$_8LtJT@a5BEOLe>dlU`__|38w@;h&IW)%W?$_#b_K7=+|1JM(|I>a> zeRa|FPxeo&DWdaXOkp6t3BYVWg*{=(r+OxQYvR6nqTS~?!FUw(px9@S=0Xb`aGTg5Br|} zzw-au#Q(c96*y<)tFZ}R^Qt63M7onD=&a!1E#`l|le%K!d9|J$ATAARM2jpvv5*Z<3GofIuR+to2- z?cF1Gs!b2vk1RU9>I$P*`AlQ()%}`|C)e(N6ngp1Kf9;@S3k91Q?K}c`9J%o|9>m~ zPu%$De&*k0k8W?+A<{m>$#-8(TbU}oQEjd2Gm+RV-LxYCIbK^uHnVrwoO`oh z^Z)wE|NrrZ)bDfr`}}UT_^12+pbDG&wf*nt@cM7>Q{O(9{!sr*O`>M)KX(1s^@bmM z{?Gq)f8*==Z|}~Q+W*fezoKVSzq7UPQj+@ot-m-X91K)c>MMJ^I&9t5eN0I!R!*Ok z!Z&44;Hu!U{4z~? zbI1g@jV&q0%xAV9jnP=X;=z!6eg9|t-M{=#eg6}C8MXiA z_45+^)@{Eww`~?nP1(fgCrdP0k}m&V>ULHl_Q<5&`~glIZ)P8Uvf!uH?*{*$^^yP9 zi~KkI`d{<^efFRAtAF%+FRHiy=UipfyMNa@l~uD(g_xat7klvHU(>WhavNRW2d7ML zmSnM+booz&W)yeuEB~MMYyW)De<0QU=f5$iZS}Z*`v21@|KslG3uzkd+P$D*)~fq$ zuaCPfcrm3a_o`TAk{Bovs|RbGj(!lX;M#w_%5R-_hqwRIj^91}43{ z@xE32Z|R@I^*foP{_%dB{<9o3&>(;0zfu3Ia}%=^mOnah=IN~}Pc^0{el>od%R)-k zPRV6{zKN|DxOTOiQ)U!Mm(CFQ(6HogN$v89 zR~MhYtIF29b+(;AliBZuOW2BJ{v6->WB%9q>i^k4%8P&8zxvlJhP^Mp-VNv5Cw6|$ z=E!gBmUQf$k>ioZY0|znYrS3PN_Iah_Vz2?lWS!DT=x3&dot@}gZgEMCw@4e{n7q= zJ;u_J$tUa)zk->N6s%c>pE=gppenbZ`r`XAurCVot@s?_<{ZUqyN|ZH~U#{-|>G>$NxRrE3X}7R}*}HHFdVfI>tr53zklpI%${0 zs_bRb4p~pMohC6bN^0zOsN(r^`0kbZ#9c!F`HTO~|D(U=KhySg|C#K=|3Cfs)3k2W zXB$0xn{5BBw*R8`R~E7?oV5Pof4x`xW8VLt|N8%v{|#T|^Ma#T<=*z)ni{rJui`Qr zL(w_g*2KwHQ)KJE{?~g|Z&CCv>)&_K7$*PYddJM(TE~K|TiRGYML3`Gl@;}GjMBRK zoX;%!nuu@Qg3eC00B#1)o*9~-EY5k>tE(RB{n>8)tR6JfU=A4^QnJu~Hp7WOHpfV_ z^sVVkp#-4?q6SBTFHKCH9dlkw)LAcv_23lthwo1PeNz8_?eqV;JxqS@_y2d_;{SH9 zwfkHC)n)CS^kbfso9MBasIv=>GE3fBBYKu=#kK}fCGn!|mL|`_g8KCuJzM_ty=UIn z_uu-&|9L;{C;#7m;J?wg?@_BVROEV3Fs|HS!g}1bSxw#Y#;l{;?o?M-)OOsQeK$X< z;U*i`iN?2;_Cmkwx7Po;zw@8}KmNz{GnotQ|C=jW`d9vQ z|G{SNDV|X;*LLc@=?q+u`C)FhNIsX7uFC`;u8LsBn&1ydkB3CB@i~6*f7H+Y;E^ba z|Am78cmIiRuv;du!HRvwy7~}7PcO|MhrUTweYN6Z+Hq>}@*pEq1(C^&l~-7b-&y>K z*Zp69?7z=H{zvo0K7v~5EgL%m^%R{%UMjsXYHH70zg5aI!! zu$m=$&x(>x_l5u4zkaG;4jQ79_|N^R{yXcztAFBKCS`}6f8ldgpG))Dv)Up>CbqJr zPfv81ZjE}g(r=<;^qQHQLf);rzyHtv4RQb8U-_^8KfkTsqUV3C%Z8gj`8Z8?8FBq% z4-WQRxkT&R_Kokkcx{5#-mPDD{6(>*)gs1}FWc5UwfnR`>fimI|MUOIANjv2wLX8V z__~emFCHlESn!C6=gQS|E~8EVSKVaTwoY52H2O{SnT-w7EC2g#kZu3BKkDCkWR1&L zX__o~QhZeK*>uI@cCQ+OPwMq_y8ia9);L-%=HBak?&|Njox2{_Kd9gOXTIcrduXv7 z`_JENLCUQ?W(&Mdt?Zk&e?pTctD30SqGf9QF{>@i*bNF@FQh%449i zdiww1XuorAlFm#yYHVIUuC7tsHv@GAy!?6;LuF-|c8WZRVNiIUVCHDg_b>eP|Ct~E zPyXNhqrSiU$Ni`OOTLM^r|hq|{84a2wxCj4j;ZG2#Dw{b*~uk^S6EBd7O1ax zJh=N_-;sauy8qMP{r3eWS8-5s{b&~RBI!S?Tz%iZQ+7{YaVPN@c7-idauQ&T-Oz5K zzHnC3v$(luKYBc>4+FWi9^_VtjXjIx5~qCe+nOGzEW5S9L&8U1V(-4q4xbDeC-%;c z3JG~W$ydwRYTfYz_V+yh)PJc^{dXTcoxJ^j-7en$k3T>Eb6qaR&vKVlMZaTIAKO*c zFL%o?PZpRZT7UkN{fX~o2kWa{|JdKN`X|4>`~UUypn0zz^NPKV*vuGr`2XD_|BcW6 zm=DV7`}h2Nocrki$BXY)-2K(RZptOCXU{Ha{CrvEknXH^u%uRs`P{rnshLU%Qv1Jo zNJXCzJh^k%`~UmnCfV!||Fd57zx~_)EC0(c`2Tp(kN>rf1*ZS**B7T;kM-oR3-e51 zT3sD(yRmP7*NTn{1USwWp1|>a^8eCb|3CKp zpZQ1r#Q(Lw{>M7i@BbgKVK+gpAz_Vyk(XX>)bT6%Tb z=M&G(r4_92S8e4C^tMYWOz`T-v|9H>Oc2iUke$%7x;hrPMvlBeDADP zdwmmreB1K#!Ob4YqIJ`ibf3xi+IVd5uUIr=(WYy&l8Wn%8qR9YGGfr2?0@s9M#tJ9DSxYk7ym4N z^k;vx|NLLA9@;9p{=a|aEKUKFs-sFO>#{%XO;I={6VT4TV3o?NbKyO+irY`!+Ic0- z>tNvr|Ll+UkCF0O+VtHsf1fq^_srTM-|WVnWR8uKx-7mOe13(CD^$Kqgyq%BB{2%3 z?8guOpZny0(TqR-|Lz<7-_udQZ-%4t+o|;jL!*CjHsrRpD@`rlKL5l$zMzgHF?%=d4azhSY;sXf8snI)#wb@SfSkCTqQ=&YE*Ey2Nb zq)OzYec|3e|7ZTU{%POypY`Ye-%a%oX8oy`pKLYtm2g-7$>n#BhWvZ@b@k2_{u?K5 zO4i|X@O2RAw`xoi@o-r3d-{Lz>!<(E2CWfd{<%N&-+k3D-#`BsYMha{e(`a25l&43 z%f<^$YSZ5R_4ws)8YnP-Yw&`N(hP>*yJBMZo&Q;1xcAR~XnCIc=KYRxTeE_@^*=Yh zR_{#mh>PhtwUBwsB%4Y7v8FvM_KVasMOko8OGrDsG;jX*i2w20|I?5C2Q_=-#Xj!8 z{@>qeWz_4ow9th7;ET6RvfkOQi2OGt`pwyF?+H;1@wI-+k_zS5e-(Z}R6g|)N9u2^ z{x-EmSX}Y<_J+w`ucD{O&GJs4&6s(~?Of)=j$WoCX<_@;A5^VwehF?xq=P0tn|~Y! zNA{$OE|&*9{{#XwtVP}*DWC3qF|OI;JnNKK9t;W+t_PO<$_SfWJztt>+nUKU=F8U~ z{kMNMr1q-6{O7XLzn3*^`!<@nPqnZp*jg#T_ia*PzZ!$mj9>GMlQlTAxJ6fVvgDtx zUr@C3&HcZ<|NG0Q{5O6Ks;6hw#~t~x5CfBXB{d@_5sTsV8p{F$`tyFGzS zyHvCSizUw5Rligd7EmcHdc)xK0@7?se+LTTNA~)U>Zkt?-Xg-g?bh-+sTn_*WNR{{ z+^+kVSsq)V*~xEvRB7W?8O4;Yh^%m1uHWtrr~k)3)xWs*)BelB`s!)l zii7`MKmC6uq&+`BZ}NZV{xbKsul_HOY0cn?<#2ixu_sLCYwgajeg|EPrcSwHcdf~L z;@i6uHd^N&I~4fj|D~#*_Mpy#{IUN{f98W~g8%AM-AoHI=7!8Y-640wQ|pHC!kKLM zeom_Lniccq>X~Lgg{9@0p%dRF{;$`MTL1q!sC#gq2UMJIm@c@+H#Q?MYQm+W=2*-e=(IpCT`w_4P{h8P{sYiG3?~7w!MK|MkE5pc%~llK&1T{%POap)j3wNtLDp zkDc?1qi33AWM(YAz%(_`U_o!vfp6Q|lbjl>)|yV6(Y$~DpY>DzTZ6Otr~3NUf9`v~ zc>nyr*p-;M%bwJ@UCPnkDYEh9!n68iJTFXFAC}VyDG1qNlD1{#4v8&Ce$V;8d$0Hg zw*Q;|9e?sa;a{TRf9tjTTb?yNdht0qY~{zeu7&T<+&SJiGtf)%_sp}e-p}32v{;`( zW-iOxi+A(?T|f1I{?GlB{~!JlzwO)m%HIpp>PsdhhWt4hI&)_Rr|p7OTeyGvBG$Xx^zV3#FgkOJHAR z!Sr844XFFD9-LOeyj7gSXJT^L@lI*aRS{;rUD{Xgrg{j*=-HeG7o|GC@un{urzVG;kl z;_cJf&M(&;J+b(6xU(^5%)>XaEf2J>y-L}_ZESonncbG}U-;_(hJV3LGf<9vRbTQk zO1tpn%{rb3HqYMNdGRlE_2jOix2_A>g4uG6!Yr=*Yq^>I+VtD+Neq9ikTipubyxqN zxD)kVmHCUvs`ne+mdmuyKYwO&%3_21wSPT56_QpddMouutSmYdwlyf-capEW$CLwS z{y%u(@#X*3SM_Ip+y^ytJ}dnz|7t&D@sYL|ixA#bg(AP-Shg#zEmSOFDvLAb4SFKb z5T(d9A*pNL&E1b5)NlPIZ~U+PQ@z0dOu_%Vf64o1Et`1jdhkS{)~eKJDO`^32BimB z>))+h)vf%8ea=d*Wn3)&j>Xg0mB{>AANrp;?a%oq{}uj0EIkro%dCrO zlckng)tjX|zCBrflHushMfZh&I7ON+4Lbby$^W<4|0}eI|EV|m`v2tr#y|I0{X4Gu z<@@XUA5uph7bZm9&R`DzGNne+vtiw_88wp_4!TFbb?0*MwcRzta7rAvNyYZR4CW8z zuR)d?H2(yx&e-zrit(xf!E>!w&Qx^leUQOx)5UbNzT@u+KCZLQ#*7W2QXJ+1ej?fa zRr`O&ul;xY%>TLIe$dwX^S6&LzLGAKl$y)AVB(?)USTdB8-q^?`KsJdS28(2YZkX% z;l`lN^sT-JvkM48(f9`hgxW~{rn!*^ zSBeNOiV3>brm-$S>-fR{SwH`SmpBOg-_h|u_TT>(wc>R)t*Zv*bxp>n{Zivpy^^oih)>^-~$zoNtcZmDmSwHp7eoefqy>Azn z?}XSK*Nx4Zf2=G-8T5Z8VIS0j+#_wr=|MagUC&f0M&=Bv)V;0G$59fn_S z%yn5|dE^GmiX&n+A&Sy@7T}K8{Ezma&dhUAefvM#zy6$RfvNV>TRl0RTRl%caQZek zF!#*1KeHz!oYeE0o|ILuHota3h03r0cc1(Rk8bgPo-g)szFu0wuiAwH-oCO&j&h{^ zRL^{|xon}qH&$t@V_{xzcZO@!ec^VSU8qy!f2#hE&i{v3)=vL#{rSJz|L#xq=jYvu ze)7NVc;2)Bap$G~%Rc=d7yJJ%sBNzw_ut(Ao$vMf-yas=4SYWN)pGUvi2vcI|IY<2 z>0|N77U(@hVu{;mJKaEsThq&%OqDu-@}owzwu_Q6)yu%HgjV8O}aXU(f$O;&j( zr#y3J!TnG5dUxBl&-yQ|{(tiS?MLlpj@i#SuW9a^a$f6b;%n>Uy49U0GsVJY^R&D( z{W>d(-^PrqRwTh-@4=(@KJAVa_*4J&&wbZ__d|c%pZmKXoD-D(zgPWo{`3DFwO5U? z{3pY{Tx8i&ao`<`c7<88!)$@Ja~q3vAIzHO6<~WjK}{#~!N0!SjO!o&&-+xrZsY&- zKmS1`%=C@*2WuD1NyvHsbB=Xq*7uMLHy`;u3UC+v;MB4=<)vTtswpchCJO}3$gRI> zFZ5gf+M{}KyX;Z@%v<#f-?~pv3NAJK^iCsvl1iv{cA%s2E9a0`L5x-nPN!G4@hxpz zH21A+y~>~Vtv}{N`q}*5KlsI8*ZXW+^gHm-V)s*T6bj4tsve%RaSM;$vLgxlJDw${ zgfp2o@2@_o@YUl7XfPF`vHrO0pT|FWdeWb8_4)2S9%Op^mA->O%qv#Krx%)-lK5|a zX$nc*Q2FUiC_MfoA3t75PB$Ud&(_tJ2#lby_BZ(be!C-pHZdtuW|?{$Hz7C(61 z@w5L*@xw)|!fI(&LjN*#AuC-J{$&dOFR^0|TD3H>?A({?`g8X}uUlJ~ipJ;sJ%6Jr z_nzX+zzJ4G&qE$%a2*KJWVIFgSE&kGAO7UO!M{qu|21~Z6B_QNKjYK1;}|$Z)fZ+ZbF3E?N)WFJoz$?ubW(%;F_p&aAL`XV{%_I$EYA#{PxAfz zf77G~`IA*1$iMBol`GU`{B*&jZ3|yaSns8J^`2L@lI5o4`HMAq{jwj|3z;&z>L^I= zT`9U_-=q&w|K2P8oBtr|fB($?#y|Hn{}Wf?e8b&z+LOsyX~F9m*4Gq5yQkmSAs!yY zBGA4zRZEn0LAsK9NRrwK%|PE*d$P;*1mlkHkI())|KIYab!waxYX*4b`Gf8-25tK76Zk&->hXLYUI=MNn-p6Nv{ zS#{#w&7WUBHLEd-1mwOs#bP9Um(gr>gm2|MlnX=N|dL*CSwA@oK+GjQ<%{ zszvm5HYEETTQ`#-BFRWGk0yG*(p-O@m=%v%int| zeO_-rXCLSPfBVn-|NfhPt^aZKm;ImLm;XOZ{ZgM{{qO#tc)Ne~$MrA%e`wDC{#PmM z%M*9Ap8bomiduTL?}lAkxUu}&DXxB1C44*m-rQO^HSE`!^y&pmU3Zq{AISey&-r)$ zf#SdS*Zt4^r+?r-=db<8+aApP=P#X|zv{T-Lg!;#C82M&%3bF_?&c7m-TJk!TSv`R zgO4{%zdhi=C9#L=pULZ=`M<6nr2T~byyO4(Dy>Mf+0bUG^kr2m-@^A!oD!i%zn^E= zEC|eJZp`|6ZDvK0#cf6PzU_ zKO8q&?l(E`b;l|*W^cX42e&YCtvS`Y`mWr6@frVpzvcY*-~O-sb3Nz3{TUuV>eXM^ zO9}byHNPzMfbn=pLO}WRTT!~XnMX7NmPIVIx|?ocvfL}%LyA-K_=W@7Z<+sy{TF}v z|L2{5_wW6`4@xe}H`brGy%3Q7a{ZPwo*ZVsGL$#!UFz7%?{;9usdc(5Uc@vdYno3A z{k(Pi{{QXQAJu;crHEm@EX;G8O|CX+3UViNi+Y;~YDs%lm-+oTl{@#UkPQ;C}ot-6kDLfx4zhfy*uvnBgKdF{SL?-sXMVce{TI=vH!dOfiwPBm4EN8 zCEU7uo}~AD`5F*9J1FhHm+552O=j)u?kQeo{xmbQ{(mgbg^lZD6=~W|EhYA8I?VO%6n^OEv-89?Uhle$NR8p-4d&>nl18})hQJg z#<(I=(_>5hj5~J!-$wm;|LZ^RhkX4*`)z-Iw5y6!zWkJ@M|RhZs3%sxX58|YckE6m z`IwO#wa*}as}Y~ar4qKjxa55d|KFz1{C*^vq92 zmdOlKuAegvx#hC^%(CV(=hyw8zwY|~-LL;!|EoXyFaFn~fARIde!u>|^!3;Od7!fL z?VtJkmi(W-ud?EL^FQ|mVGnv3Iez!}gzicEpcS`}cU`ZQY%;^rhlO=7v`(|^sm#^8 z_4e7<`jWl>?t_Zj{S5!rzx=l|V>$n;zB%HCbVKCpQi7R=q+)(d2i%DODT3 z%rkVD9deMPNcX^=C3mC#>&LGDU;h4o{y+T__H#kmcZW%?kv^)J)-QSn(E67o!iTP|E>?vJ79m% z_+RPo|I!ck@8kIY^<@9|`mg_^nvCA|mQ1q{5{tNysxxz@?DE(JJqu5AZPz@U@nrIo zyUQQ?l+TX*=KY~Qijm=+Hbbn-F6-5nqP?P$H|38vD)$>*u!@S>=)=y|Gwr{yW_w>| zRf^37OQ*ftSbymLTYv5U{@?Z6|JT?4ufMhJ{^7j%^V-cpY4I;qjaKsa6w1{9kzU+; z&Uxo$oi`UO;=A4FCBznOy|LJPf9?PJt^fYt{l6PjgZkh8w)_6u)grD|O_6aq0-on1 zwk5wd?TUQ#(1E?1K{qMi2>EVA@ zbteCd+%WT6YqCzB$E_%Xj2^isR;LwD>7W1q z`t#cJ&+Em1>(^!L#%COVFrSq*N-!#7`GF@7=Oo%KoIFcRKgx*pMC(f4=*9aO|GvLk z57&6x^UwWqgS2z`jArH{>Hx`-T8md^VWa(Z+`E;fBdEY|2zKw{`a48ZR55_HU}pd>0R_o zoNAfCw8`b;M9u>`sS*=7dJY9eu9c43|MRDP&E9|iWB=d(_&@vG|Igyz|9`$8|KC1- z{r~#k|Ihxfir=&K}CgNN|Nq|*uzCHTeYwJsn_gf3*hk*=p59nA z=f~aj?5)3|{El-jxa%wVJVVsz;LNR_@3&w5fBgFE|Mx-Jg8NfHxKd18CSm4$#<|{jPGlJ8SU*%U4S{qS*4nRGga_-QOqaPT*wP z866V6eg6OWwg2>wot3|36<}KJ>3WL!RSuh~kq_`J-nRS9mTm5??>bo?Doc zf78v9#wDo}VitYdQaN|Z@3)`p*Z$jo_y6Xf`x*Y12>t*5w_fR-VS>wip*}I~oAzwK z1MLD0HFzN#`g=Tb!5Pzp zbx-5kbtS_356;`=)?lhRvA_9B@^5?HW1qAjX}s+3d$u3{rLX`0IQ`3i+eiQF*qPnd zE?)Nd{h5j@A8zb@VX#j=VyCrK?T8fP@CoY^LYP9 z|LvM)iWKyGnp0Z;(eS;rG2er$iy2bl40QMIk$KLzYx@MLhIx#>vo9{{Vf@ScqJG`A z|J#4p=QaG_|M6%2AJxD0{Xe$1bGfm7$=vECoV#m{qxRaAJ^sSs$(gc?F9|q5nK%8c zROX=+Nx`$O=JWrbPW|#<=lrYxJO2J(_kZuafB&oh|G50;!}XK@>ucZE-=Fv6|Ms8z z=lv`Hy#M?Exa$A@ewY5AGM``hyVgx$^_C4cjhD>iO-i{Yr08Vm)%oF?_H{q)Q$Eet z*F5`l`OH+QnU7v*ZC~>LGrxVUbp4Nq^=FJ1H{5^l|3!DrDf`#!{>MMjo^-qX|3mwK zf9~y{|9;=EAN}w5)&Af8|I^#w^Z&n*6_W$$h{;Gf7pTh0;|CfLN*)_hlJmyUJ|6l)}$8&hw|9Kt# ziR=H*`SsuD|2;f^Uu}KNyXDzG|K;hv|Mc{}w!D9QrtLfVNBlb#{(n6Fe$tZNtN*@< zdKdQj-QD^1*XxgR|9dL_;d6^&jT%tNp+J zz1_d_J?HoRUw*v&|1mH zuNVGr`){eek)Hg^?Em-v|84*NZ+U;Y+Ov11$J8Ve9>u$|*}%zrQ+DasI48Bd(acsXi=9mwFaYD=WQZXzcmp?{52_?ce_!)&F>R z_ip^g%6$_53o`!|zTUs?oc)|5_VqST|J#{MdF=^%QRwk&&ZSx|fmLRKy15?|XH2-t zF#ULw4^x!gn>4S6)Y4mj;(P1&Sp1LvUs?+4(|y$Z|2->{XM$Gg7mcbLP03}uMB`%J zTOy;6Ph9D$an^B*Lx$VxmrIJu<1Q7Ny?XZF>(Aw*KkxrqzxuPk`bU5NpZmkT^~>u! z6xZq;a=j=m_Uy6770WOs`OAqWMJZ=4?4K2?anWij=jM*coPX<&*~icMANzl&)&Cly z|9__Zuim#n*;RN3*Q?>Rk_-v99?wOL<4+eA$K7%=5N33wx+b?Bcuo z<=OwNKd+Dey#HB#{ki?~j_kL4`akad!*#{1w@uE(?|gCU%>FemTra&BpBrqwzd_aVT-nF}hd=rMI{Zp~;KJp9X6O8`ul={*ZY|S<_tkmK?^ZK}ru1zy z(D-0sR=;q|(OZTECT^@VuUfH`N*>PABXv_Y@A0R$7-P`S-TW z(W&0@Pjqker)}~5H}%JQ@#pog|F1h&Z`=9**OdRi>(1Yd?JNjr40xy5C35_koW_ht zh9+yb`-yT-n!>}Y#HZ2q=??_d4dKKVz!|IhvQx@-L&h4y|Lc$b@6p__|E#^;)A)?% z|F1v$zvRjP%xC@li-W2-({f5#SqeU16?f0|z5H5v@z0bQYwlDj^F3Ev>$qL(#_Bg) z{;&EIzvqAY>;LP||M&cB|6|L4_V>T*`_8@1WW2EBm%_9c7muVxFHT#r|C49^TMped zCGVFQG2QC2GUlD37yZB5^`Cz1|HpIx$It(N`BnY#-}7!a{Qebx=x+P8)zY zGahk@v#ON*r1&%T=yfSU7F(Yq2b8L`b@r`2Ao^o}&HwxFKuLA^#s58jt3TbIwdnG} z6XM)wTDwlyo>OMlko@_4t-@6I?;Ij33H8xix7=j2bh$hA|Lc$SKS8xxap^z*+YA-k zm_G#k6qk#W@ZM^7V{Md#W>!dq-=T|1Oc|z=oOa}FsmWO@89L1(|9rjeKmGfl3S!;4 z|DJ#Ae{A{B|8n8~__YlsQ@Q+j(zN@S;vLu4ooHHcE^GmB`!mB&otM&C1vT%s-+1;v ztNu^?zW@2J>(|5ezW@DymyTS4kJq!FAA5yd)4qNds5aPG{#?j;$I4ydp3mpM+kd8Q zuaLsoxBu54|Nr#&|FXaDU;UYX<$t^X@Bbh6{a-&}an+e=aeHqYJ^%9Gysw)n2JU+DQxZ}yc7S@HI>rFw3+%K`lQa-@Sn%f^*%bP26u9uhK4)__<#8-+61+ zPa=Qi>+}Df-}=*D^H06h-}~(UbH4>@9n0dLZN`0h=AU$q3u}3`W^!zaTPyM7)mEic zu7GN(4pncS?;p-*e_B8NdHwbO>(Bo8eE9$Ji~n{%*h`-ZsAgpIJ*xEi(ap-lt-E)h z*g2W~{=ADXx(Ph%R$i8%Z&>-de*MY)vGe}N{@-u*U%mBzz5n9>zaQ)ueLbV&I*V;a zpXH7(r`ApRxwmywxwr7d`jV!IBTtSuo+|xfdR=PI&;3gOzkd4j{@4GlKkZlk{hs+f zzxKwT=UZ2tF5I!)qQ|P2JG6MF-NK7S_I?4fN4?g@^5!P=w{Defx6S`}KJ;fk+{JJA z`|qxQKfC@gU%jV)x7!Vgu!o&2&6yiBFW%g^`tgNZtNf)d<~*5f(Z{pU;pp4{>yOp{ z{Pk}B^~duA=70bH=Er}d{r`Xd|NG}{`%nGTg*6#b*vt!Pfi@ zf9eCK8b}_#6j7r7^-##kOF05lX1pj>xLv69WgGAMBla;f{>%QqukgP>?*9kLe-91+ zt3FKQm&|TsUF7xpz~a?m`d#k%6J#GVYfXC~)>`dsQV{C3d&941|EK&wk{8 z{m84ujE~JdsVHG4mSybZCCIdJVd~44(h`A6>Dm9o zAIa;V`+x3#eqX&!fBhex|35VU+upT#wdlzH(6AF0|7S40TAI9)*XWY??2F4UwD9~` zcr@p@=c26}7U80G z-^ar(;g8}UaQ;`@^7X&@@&9*q3zAqq{7{y2XY7}+m*EU(eHaq0FSf>=H{jZt^^3h2 zd^LY{tom$W&GUN!YZzaxqRTRFw@s&6*B`WxoA7^a{r~-*|323I`>6k+zyIg;jBJi} z$M>gZvL7k=qN-cWy!EB*vka!FTeEbN*?n|~fZ|M`FC=XjTAi{&3JNPA&u{PTILS(X}$ zifx6Z`n!v_a!d~?B{TDDc1sDqb3CYj);^{VRCwie*IVTN=b!iX|G~rmOZA%DSyoK?Z!e*0$j8!vOFL9|TI%H2{ zEPdPfVEUtYz4QOq{l6>rzewu;r~01y$_M+;`rO#qujL!v`E2T|AT!OF4&i?-veVag zTspaE+B4pyl?Nw1%s$VuljnZ{@89$1{^xhrTloHGKL5r3L&X2heVOx1{lX=do_AX; z7QLwWiLy&jn)jvXTP;UVC+IDe{&;Rbf|0{+WeKx;%EcChvkGinjWliS4rXfhx+Ahy$6wlH$pZoF~_qS(O)qzKnwQjIX-xl0( z`h&mt^ZNJy?@RnIQTqR7&VP5I1!XcED{5qZylUj;HTvqTp%NRQWBfnPC0g<>(+3GT zjdv2Qw#E%%Wq;}=|NRX8xjg;({~PcA?==1Q^T|v3{rmm~KmA`nU;cN>ujz$?v$H&c zVnPc{dJ4)<-Z>CRWIeql!{g3~9Kk7gKs6YQ< z{5+rkUyP(gS7sFp%(`yz>R)!K{j>UYOCzML&1VL-PIcSZrd7FJA^Y}Yhq(Uwy%zti z|Lr&Y_toa#SK~jgm;aH!Cs%LnIlCpUX07S;ZC%PYR`|S2ZvB3dDQfOpi7$#X@(n*+ z+;PfI>A}|@+q*ySfBoP5*#5c4_t&=7|DIA`dL*^>>JvGe%k^6K7Dck=H}}~7t$km+ z&M4zb=e|=>LbcC?lY3*iD@^|te*gb>@8|kQ-~NBT``>-`|EMLQ=~JUlTDvPpZLL2s z|NioS{&)V>@B95fAV3M;Ke%UmCDoy~Au#%TB3PT)_{pU?09|E_*M-~aLa`5!@J zi^p1S^{t4nUi{_dS}9*PEp4Oq%cn~2`|#juQ@vx&nbzcxW6M_5zS8>_-}PVn%m2K; z?{h!uFaM~2{zv_l|J|jZl;*E4f0m}G_*sIbZ_fVzw>rBVCNA*#ZtBbWCGv_^R?C;X zRkQzde_TKP+5J=N{@)k-UnTYbS5JNIgZur=cCFR6eLpmAad@^0e~PQ@oe_72Ewgdv zdaINJSqJxK)}P+8@awMUe`34pcia5m{jWay&+W`Vw~hb3o%qAwCMV(Fzwlk3!??Ge z`5buE;kd(uZ828cL(?P|PTuNzt4ndM#4~U6|KgAK$AMcEy8m8h{<)t1=eqmHdds$N zPFtRd%}wI$wVYzR;QGDNX>rr;&E-6GTv_fSj|$uOK1s2hfBN-D;P!66{3HMTkNo~` z|BWx`M_gj*=;;Xbe!ItLkG_G`?sSF=ZdJ9fjgy<~!dRz1yLbD{^mm{4>m9M*_v?@T z?XUl(AN-H~dzy{GUz(xqJX^!V$BYR*Y^6TaMc2w`Hl#^xPzsw{>e1BC+cRrY|E1=$ zZL2n9)J@(Va<_i@pP0V?;dB0f-Shu^#r*%Z&427=8OkJ@q3nb1r(WL0$LZHn8WKKw${{U&GfFVv-yv@ zMr@b(F!ksDEucZbw;$_`|H*IrzhCG7dYk|J-~Y_N{rvwCUWST&%pXoNIAomdl1#{0 zDq!=k^M%1Om-UxZI7_otmvmcRSz1z`!@phfnvuhey#GRf4j=t_|Lgwf$MSwp}{{x7I!;}Cf!ChE%jLgJ-q|HZmMpP5>s#nDR}^;n~0rU@5pkLusJ(AO>J zU%mc8`?x#*^Z(`d*4teC|G4=7{}t>Ooc>!THm^Kju%vVGnxlaWPJA+ZzQ)({U!ADMnjLg3tmT<{nGGKxl_5|rcUkjzj}xE$JG4${_Ov?AJc_@PJjNV zzKE?r?ayHi33eX&t7|)7b7a-ZY;=g7_|Z=Ha%70w^lMEeWjW|BQ@8|62t@wZR`LFnz zCI8>9X3_V_kDs`R`>ioLDV*G1ix zPG4|gs>0iY+gR5h{r~#afAjzOjsHJOHGDLdJ@8`*YekBIg7&*-|Gpz3B!*F}mUvklW8`Z0Tbm)k0*dPvdZrK#Bm@kjIZ&;FnHzqa_#e2xFr z>;6@%{Cj<}wzn%V^~$!AYjt0kzGb~?RH@&)-SUQ5+L8O3@vN&0E@#wwq%rLN`8?^* z;iaIwIQy}@-(&fCAM5Y`5#Jiha=@rZ{6?1QMZToo4R#D``<8lWC-~}KUg<63|EX~c z&&}EO;*a9>-v2lMZ+`55=coJ6U)^_qbiZ`Y%joQt7KeLX64!)fW`23ptMj<|&$W}D zkv}ffGo{aSNacHzEcl+;LGK8pAm45H&wt8)yYT;ZLjR)*BWAvBu3UXLHnZw*#s;>l zTNAo0#4c(&uc>}`Nr{({H)pet6ezAhy}R$A)`|M5`uVHtgmI;0+^^+* z_pp^^<42uR-wre7&2{{Zk%hh+Emd;a>ObcF+baO>RsQ=g{rJDj&-cY&-z$I2-#%g0 zOa_yvLvo9^CAP%Kif}#-v7HkzvsX3 z)BWeK?(aXc-;jOnJ?)aX8`E~J&5X!db@ilz%`6uaxy`zoxvjsolA>aNXKmnT*v;|( z%dPt7|KI%lZ+_n1*7E=J(@*TbypUKBf5pC>-&XAZ1CEGLsmxm~uE$TDH;S6MX@}Xf zYepdg+aGUOu$VtW_w3;#Q%^d!%jF(tT7Tld=(+zlKn)}Q^pE`Kf7UDgOU_R-eK6yH zcc4J-p^J<>Ta!<)teLyuirejQ z|IhxPVR%q1cwn-Cg6(f6oj~zzmf9>u`N#QNyjOlw*|6wFa>2$kd~R>E^-h*=J;R-J znlY}oewPKPy06dvbGh=*<@6uR)&JVBOU)?ZoM*G3@q1_MPCu(>%%<-$YNtldl5uBU z@$EyLZE+i$cLG@RK8yd=|KDHx@%;0T=jT71pZ_V|V#gu|p1f@mO&%SrmY*38hN)hz zTc04)S{QUuaE{@jPb(he=KlYm^#{~|{9V8O*#0@k_t&)5*H<3;ziPGLJm%{;*L>Jz z+L^p&`mQxMT0hI2V~yuU>tw068kP&zo3!5P9=QHUUVs08a4XP$UaP&`a{2jJ{)a?! z>)&|(<>}ObqZ-N8Qv`}L+3sfN&y+Z^%4Tcu_tr}iGsWLNlwW_sK6YOH-9Pum{y$&( zfBwmT^Hu(v>`Cf9^P_$>Z{pgZ9LI!$sFtN0JE}P}zev0?x)hPHvG2ldDaGC5KSX~% zKMh*$VSem?<;(x+oBpex+%LfKS>eo#dk!gAR=wM5u)9O|87Tu ziu>*AzyC7@A78=DwyulUFl)xu#Lyh4`LEagw3kVq`BkIWMKWzgU|Mp7#|8wha z{rU6%18#r(@B8t5`q%#-KmW6@yY)YO_Sd+*q4G5)|G%ncPuP93M{6#}hM?YhpKnVO zEo7S+``H*Snr(=RyL0T{)*tPsKktA1U;459xksReh|3@S%`QHAcbkkEJ_Js4ica3L zr*g|0&tgWy&7#qgf0wU)p*=|C7r9_t*WuFZKU9E5nDG91k-8 z$G@!9{<6+^W!}t7$9K(Ul+$uO94#InCSLCnYn&sx?r+AQwX$mh{eN%tJ&^s8UmP^F zmf!o|n7QG+D=0fg#9aBsQS?=B!q589m8DAIXQwRK@Kx-xx4l#&=fZDJ^PVxXy|OvR znENljy?&3$|K0z;Kl^d~^N-`_Km2!Licv{PSh(=51t-H*g}xMroCif58dIy{nM-y~ zRj&U#{gkQO`qeug-}$p&?tekzzwQ5?fBVt?`A7Tt5C2d8oPRg$J8SZeO6eRi!Nbxf z&WjhHexLWKz3)Ygh3r40@|O(fN*&UeXaB$cXujUN|K|Ujz>Poq#s1e6{wx0r&(Qyu zupU^JJim0xgs|C+?WQkv&fM9s{+h(1lZsp=tG%TxxA1Ve@LMu)=lzTCtlv}fH~)2g zUeEu}m;Rqm`R_mJ|ADv=r@ z@9@N2-nSRS`mfGeU8M73a>>o8Yo1#^-TPDR`tR$dKhZZq_Qs!o6hHs-djIqP3m+8D z`PF(ip?BY$CDz$n|0L@jkXVxx)0cSQkS^1;D;rLTEM&_47vB%*>y#(|xgGiEcJaUY zU;fwYbDVl0cXSEI)JILFYrV2JDXy^--P2X^USl%bEdd*=)C|Iq*WZvBsb`~BbFKi|FH?%(6x z`S<_7+h6nh-}Cz4$M5g0{w}`ep!~9a_hk>__y2v#Z~uL_^8xwE_Wyr8znxL%k^J%Q znf=cno8SNGUvJENXuWz%{pSyr@qh2s*ZseIK3=gt_J{c7584;s-~0R7{{K7s-|hCb zzyDnd|GM`$zx@7RpSkVIL;t_rvEawU-ST!dzu$kB-Shizef9s3&*kg?JUr}Qyyy4B z<3A79|N8cK|GwWp?Ct-V?Ek;~`2U6V^Yi~0)c^W<_;>k-=jUh1+t$^Wd;h7g|86_S z^6%sAKiR9E{bw!zQ$KNix`FMlrSJT zdM(5C2lc=Izy8D@f6PAT-~Y6q$HSk=&p-cP_|C8SuRrz2AG5#r`9HsF%@SYnd`F(3 z>slMxAN{XCsDE9*?zDZabWO?p`o5qc$+qbZ|^ez2*boPJg$Me@8u+RN_ zzVzpF{m1j=e;iLxU$OZ6B)0<*PR;Jxd!1&UtehIwS5?=ZnJG6%ZF^bC=T3P?$D4od z%lt2>uLKo1xBeWS{*nLtpUvBpC(JMLDDIeCDE08d;n}8{ z&*Ommn||)s{rB13+Iv*SF^2u{WW$uaHur*Uw+^J)4%`k{a;>R`tRZCAN#-m&z?5nk;Yv2 z8D=qur|puRSLg9IZ%fNHnZrj#w7u6m{oG~YR&($hsCawx_y2zTe-BUp`S1Mqy?mS0 zM8m3$nof!@?k21Ws=j#0wz-!1@~!GA4u`k>(wg#5zG`}*$)}uu`91%&fBfJ3zdjdg z-`>T6n=PZi)F-FikJvNK;m4$Toeql^F1h<>1J9LP7k5WDYn8U0s5xN%-~70JT;2ct z_y6N(*Z(p4_c8pR@hg4SoJo8WA`@Mvsy$h~SUdRqnF9_zy{})SUa?HO$7~q>KCb20 zv;WI}EPwsx|Jxt`XZ^W6{q6sYkN@shyBpPOD0MLA2AiyU#g|Kgy7jx3S3XESG+mMH z=7XKD<}@8ov|Ag|#sP{|`ECE6zwfXAVf0V_>HkxP-P;$p@3yL7mNE&u;@G_+xs9ph z4M)KIU0cpAJMLMp_S)jz^49BT|M!0EkN*Gp`*Hg^$^ZRd_KRG2Wn<#doN#v5zP${h zSCgyf$G)9$%XrI*-nPa^6Yfl}ztv;8YuefWYd_ZW{(XP#f6UDKUq=7rU)EnPyY7`W zxozc*HkK?XWKV$8_KEw%930l`B%T=@riR*U8Ou)aT_MC_3K)+W!wM#y8q(q|JAcI z*w6pJ@%;ZC8vi+etbg-d|Bv~}|5ozn#B1Nn*UyqS+fYCI&;K8}e?ADQHr)U6Kga)v z`JIpdr~diBeE*m8(oOO4pFf;U=Vs(it*olPevvuRDeX^lZHh%hE??_SiK`1U3?eQv z_4Ph4-12-zd9TC%x_@T6*B|_M{=a>(K#f`3{`#Z)XV`uH&rtpUztx}rA0F5I|M@Jq)*ZK4HWBl>D+S30Xv$m|azjXcI-v7V(-~aWOua}kj z_QA6J^sE1U{{^;g=$vtR1(V6n`=!>-jPp9)Zb-0Myo0|vRBVmuiR|UhKWw&se1HG% zN&7wjr~f=${(jQB`+GV6J(T+M7_?q^{%QL?0{;un|2Mqy#A1%e+}M!%y;pXfh*}d9 z@cA)A^RA>T^R_v--QtYksx_<>UbpwA^ppR8I3Ack|G%uW@{s+fd;fRy{qKMGTV3wU z<<42<`c+@fu0L$@etE{fkLTq-oSn?S$Gx-9%;9U_X6r5Ml(nQcuKLF3e&0Z_&xd!a zV*HG6O^XGKGL+4%pZ&cr;Z?u*qy4=4mH+-~|Ik1GcmKN||Ji;VH~x6s|K;)OA9HU{ zSf;&KO?>7aCx$ld@2|2?^+fD*JM-sS^lM?2$1fabDSqR5v+v=4h5se2|8kH2H$PxM z_oRL8Df_#h@4vk9vpCmR(%4^4^8fCwHERqrUYat$w41gtV)2RD?i&}EK5pf17Yvi?lx~Z@kCN- z^NUc%%RwjZ{E44Xzmp9#bJ#)*g$#&Xl9l_WWSKn~3dqpp7 z6yDV)&)igFX8JbRJ#pj4pZit*SMmP){^!5+gZT4L>f`O7#=rl$-p-(=LeM`xf2rK; z7iv*Cy+Wc(HG`I);Wv8uesZE$rmMh|^mZrEit~I>9q~V}q278jXcT<+^Li$ua^2zx zZ9l&!Y%~9QZ&mo{Va~5?C3YlEI$Wvo)LNO`!^(ZeOlJSZAMcNA{%`yLGuw~#>7U~5 zpYFf+*}k4>w*2xvug?hFH@dPs@R~zlrcC!~3$E9)(W`a6GIP&PeQ-WPW5c4nfBGlt zceDMk{&$@B!~Jtl_Sc@OufFmBHR~OrXF-m+Ql$s~G%r69!WuiV)4_P=OtBC?xlDy; zt4xeIPMk@6{(t)8|99Tq7k>SJ_W#wN|BFXA{P+6z`S1OjUxoGG|7=$idE%XR`PiYQ zUbBBLPHB1{;?8-oM=;(}EZoSys7t-%I~D zXPaZ-#pThuHkN7k|HM!Dzxv1jwf}cB!tDK1ujy>O<^8gj#S?g(j$Eo=HnB?Ck6A(G zXn)uNGi_;}ReFcwjF~TNdi>w}Q+@Bh`D_30X8rfk=ikTRfAYWT7l<1xIzKs>eQ?#n zh~;1Gx|Mn^ocXqrz0XIOYo{~g;^avQ*?jw6*H3@)U+b@Z^#5|^KbL3zxxD<3{g?kH z@iryP>gP}E+q+7p)$VQXw`WU}zO1SbS3q$Hj&GaSdticHXK9yoA@ho;ge!4Xg;vklUwh5ZFST%5el_`X zec-?Km;P`53ffpQ=j8sHQ~#a+^Ea*Ba!Oam`SND@#db-z=1O>+?(o{garcy=T|rlf zcKwxx!`gjKyZ?Wm^e2Al|Mb`Oc@6cplk5LZ`QQFee*K0cPJbKaEcSmJx7@Sp=gQ>3)P+l9 zr+djW&#sy;e0-Iz+I1^arMdMJua%~81=Od0u6O(wzx%(teC__n|Fu8=H#hkoZ1*zW zDw$!0&AXUO=NM*g+#zmdrYC;Q$3NmyisvkihH2VSOH&0FuV{1j>Hpgkd3#D(_Qccq zpVz1Vm)&ps|NG6K@~P+l-}y8D^!|N3fB7R%2feaAlI|j{wx2R|G8f6|2LyQ_9?o%7!;MNl-@6PSlV<) zeA#XO@GW754!$3{UDdP`5AjXSb((F*w#WD1!lbkH@e}_)|GZyx8)$cl-v9k~cIv0F z)&1NOzxLq$V`4}0KgXZ{XYKdtKWKA={pA1Rr~b(o{jYa3uB~bN`!ij0F~{WC;2f?#1T|%+l8VlKz~2CDh2*&!>#mYz^rpe5$>Fn?104!-}<|2O}% zpIl!d`A>eASSR0C$Muu5Kd;hmZirmCHevNC)+H9@8%ln?+WBKnqGW60 zBS~SMPdse*?)}_<{8fDQzvIup*zfxO-|T<-=l@A;4=z3tiu94$E8wqeBbIe(@t12Y z-r{8+H@a2*j%&Xypx^Aewf{ux{X0)C?Qg5!0je49|CxXGzjrFbQ$_ZUo3Ac5uaV@4 zxN(n_RiY%XB}6N zyJZ6ZoW-AJZ8lqykzMlS;-ZQ+7OT*eXRT5voe4E8zH5HMKDPNkXg#w1?D{IrfAVV6 zJy<*r&C@7f(f-H3x&4vH^Ld$#{PCNA9lBOqxTfd7VuG6+*Xz6)7p3c;%wK=t|2$AY z&9AQmYgM^kS$}MbQTK@qADzA71!fO|Y=xWd9V@Jpym4m3e*NcL16XS`wf8vwdn)zk z{m=Qc|8M>|efp#SiA9{DXTHoooh5uq@zd(!z+=BoR^|52Jk{0nRkQY=m$bpp4Xmec zABpsO{e|u4_3RJ(e}lrd{_}eMqyL@x6FR3o{L8U6(Xe=K;AJHV>ocA&if8dy`|0M( zor}@@uU&C=x%I^LcJ~zim+}59|9}74|D1nsm;R`K!I&c3S$EurQETnuTlWLcTv=0* z_W#wSd;2FaAAexlrSpvQT6zid%C~Pn)^B6@pz`;8-+%M}&p-VSdb+>;mHfF|_2L|i zhSO&XIw(%iY@V~~YiPEK;EGmnL#eRvp!ce}4d+?A{_4J}|Dg5f{g3+3^?LvHL;qE; z`1iH>eR7ClAJ6M#BNtQoZcgsP>1>6h5g z=c_;L|GIzn|KgwZD?imSf==Cantx(Mzccz&?^|!jr-8t=^EKl3^gHz({rwfHz zOl~-qsS$8r>3@;vKk)uCm{UW0S2~7VdaYj&$H!rI(rxWpKaIUllU6>9dfOqI^Qr#H zLTA^g?w$9P{#T)CbQI|K)3DJN&D+Vtr7`n6d&7FA(ut1qH%~J){yu%$Go~*A9Lv{g zd=dM(9nG!!`cc&;tf#E23S}o<_wi_K3*&nBS-Gk+Vk?txuHUMKt-HQn_@(y!|0~lU z%j?(vzx!wY>H1p5fAVS!Z5+D-qK_AHS6N@*8-mYP(0y2Ir3Ry$Ih+Gp7<>6 zS$b^APqCl*;ScMtgCp{OT*v=!D}I-ot<$&_uID(bq)#)XBV5w(hWa-L!~VYJlT$q^ z*Q^M3OYb&6@&D%2|CgWDzXe64+JF6!fAuT=)t@(uzIT#0T2t+i26Ob6bwO1xA5EFg z=XHAP!vOWHp!C&!oBh}?np^(oUT^$A8?=yX=b!x-e#qC%_$R#Y(sO-Fwd(L$$BitK z>jdPtU3xs7O*B&|)j+{4I^);>0N$Lu?1#}`{$IcNKkx7TXa8gV#e4kk?*Fp?tHu5E z(Gs82*LjoH3cg9@S^F;g+XQ}@?V-AU3^&+X)YF1n|(!TjcQFuks z+h1bO|351IvOgMB(og>{e(C?i=6~xgc~0E8mn@iGpub@A3}`;+^&cnx+kWBVr`Z#0)xPgETCW@S zcH@!fg)A9~YfW~h=rFVyR4fqGb=n+doKw;LC*Jk{?yvQrf~a2cufE-^f5!cp|Bt%s zyieP_J-OE;-QoI+U`-C;@=&e0*>iO#Xz8h6zj!zJKMAB>3OySA5Nd z|EsR=TXoc>^s7?bX^9u^N90W_k~lbI6aQy896EcM&!pVxyXEufEC1)j{495^a*1yunn$*Ztv_e{t-qIk%k=o0d2~ zKj^U#B7f`|Rn+B7SH4Poofn#^dqbHqhZ*GbypEdWJTQd4Ia%8Zisj{EVSHw zP(^u|NeD|gnNbUz+pay4IYm-HOZ`b9ka7*)=qmzy=|)&i>;_PtN#A(7H4ni zlARql)eE%q1OK~&JPFS(?)`rMbzbMKv+tEV)mv>85wxKgT`u`mxebF1WEMmpSZUAkQaN4R7y!=f!=c zK8zb~`QA(VFCXg;NqWUUK}pZ{MZNK^^-6I)KW6+gzOu{Yipp*#Z`q$u13$T6xj4OV z!LzIEsf!AHSXv-%-TiNWJv1(ZYD@m5FSL3t`0n_eOQ!`MbEJJutbLeKx@+o;$M1L! zuts%n|KnfS!sL>_5fZeZZK^x}?4R&&y4;uj-r;S3Zv3zRc5kicxjQF>?xg?anpL(o zH+}nRmi-49&)l&4;`?_~a-9$MyPY59#HOftzq%K{zpp+eG<6b>S7?vEvGxl6 zS58L85|VufERV}t6ugnHtu6BU`%2hV_=T9OcDhgMn>YrMpD{XC_v3ia@iadYyZ(P& z+`s=O|KHF2KmW&mq5tf<|L?E=SKMW}-plBH&i))^Zul{fS(f^MB;`e?3KW*cZzMzF^rTlvh($=2ORx(jl z)6%NlGViA2$wv)gYX9$+Po8k`*^#2|@Bcr3{!#D$|9$QtXxI``;kS2i&PoD!0{ z!p@y|WK~C-lCQPX`bE>?=O)i+%}iqul=>_7{r}I(Kl_*ee}Clv)*tpK{-6H-FMi9d zpl8vo`*#1@SfF?^>%f}C<(bV9lB-fC8kD#eF)#33Id`V@iu+3c<{$rG{p-KqpZM%hcB=ZuTmW0XjP7z<=cl$c?Po0?Q;lf-K z;_^5D=Lc!L^WXksz3xB$Pyavd{V%>?dO)C8WP7GvTjE@kinBp$9TFRM-pDNKm)PsP z)UZ17QvHn3yo>+OpMU({_WOT-Q1~?e*>59v=l|4Bn_FD{m!iLHY!I9N!t_Yn%@;P4 zn76!fQ#jLob5H2i31TefH~;^C^>n}g=l}D5{_p&+{jvVSr~7|j$zRYBW8K@gt!m?y zA1yY?Ts6us_XdYVhj5);Y0>MRJ6Y_^pR{A8v;Wq={`{l9-v2Mmz1OP$=a;`dYck_D z*UYTnVeic>82NWCnUI+FFLgeL#_6oW?_3hs*u!}Cdj74K`~Uvse`}~muT}qF-yW`a z!S|F$!E_DLFym7m>euBir_bH?mLWA>ROyLpu5REL%Kp85`-}f;L1FZ_9-3M1SH1tw zdpKfqrDI@Q#NwMWvIQJxT-S<6nHV@{+OAk1bwg%t&jp1z^PB%y+jT>uQwkKFulN2J zuPjN`-s5!rN*iBJedL4pW%7HQ+5F%8rL9U%o0Jf{`A7KdSDt*?_fV6q8N<7BhA@*% zgXCrBytV4Po0>ItDx}I!DDzhE-Qz5qnlbx#lYofEhO)~EyN~|;|I6mz{bG1tiGKfg zzqfUYYJTL??3;QI{7$k)N$kwnXtuY0%fo#tTlb$25?FFG%2ULS{p{?R|Cqu1a7&c8 z*q>J+ELG2MRqJ!sKe~53?)B$OrC&2-UR2vREYN4lYWgg8{{OY-AOFw$4J%RZ|61@r z|NUCM8Hb;G*$XO%F!`m-*xgZG{1)#o*VQQ_r)L zmF^f>{bVis|I@P`Y%!t?-1+_grHHxHw)*^RWqYxTvpAr=ho$;;*dfVjZ2cS;^H!gC zGAc3WnE6%hD=2>>3M1|B|KeXYrEt3)GxC0DR=)fGp{1g0EVxoDyi!sR^xX4mi^^($ z72xMBCArSCzD!GHka9@4_ABzAxv{4AuLo9MFM7_1 z9P62N^uN-@ri$*r`=3Tai@>X(B2fGLzx%b@#Do8|hYRVvn!C4=>#W04Gwq+BM3Z*t z)FkNN67y}D$P@5a?C<_hHvjHl{$CCa->K~84S@+d@&WZy=ezPA7%4PNtUcE`v2s7J zp3&rZ3uaMsjVzqysYb zi_c{)b=BQ`O-{%4`l>fZy{9DB-dptF9mCSAv)&(JO<5CH6Z$5rHz!f-_l3i{#DoPh_}AC?NmDIFZp;q@z`?DYQ2_uC&a<9)EmF^`~O9=-M8Lc=G4HUKlA6l zi+j2)!X8e%v%&ng+skDO+YZkB^=rHh6vE~kUR$(m#!ma-xiCJin7x*8wFnfFN|Lt2b zSy#eard^duN?VburteXwT)4mKrg!IxW&q_*X=wVyO@K6_@t*`zlonVTDzs%n3kjZzf$8!_CmW_b4Q zk-22Sj1L*goBz8-ev;-{5OJD0s`1h0b+@T45B4yWNLC+DT!*(RmAjk4~aS~hM~3S(7&`|dz?$H5&( zf9~@IQCvas4L|dXnB@KX&svus^H4Dj#y}-ks`0^(H47dZX>k z|JxKKr7@%F{hz=8`+ukFQRyQ53-4Z8zxLpw?vsafcQQnCJ34H8(h@XLt?;&})72~? z^O^r4Q3`9Ze5?Mye(jY%QO_3CKb!FN->QtokDKC@FE_1W-*oQ%Z@q?H4n7;K%5%iH z6He|r`tSc=ly>j!+s$A1&j_ZAlL};?3$`PuS%(IbyBRONZ<@r<_8zJ5|wD zlYjp||LFhI;{Wi(`~L5Kp*zNAhrBcc&1$a5Mc!BETq7lF;JG06#=W2qcT1y~Bky)P z&E6ip=KuOO7pBHl~_@k^`Et@8CUrFf9Q|>x%>Erb= z`pth!)av5#z5mu}PkyJ|P5)PW|I^9UPG2sq3h2!+(Acr%g3-#IEPZC5`5*MHa(ycH zvHm|wy(s(rUwkW<^OO_cdiSj=eHE2@I@EK;#g+!_$k`xw0V$gt1q)e-=sTG`hq3L?YQ$%OHcc*1E(TH z(R+OF|LbacZV#oVdT)ea_w3~{VIm5Tg!weO#Scia_zb}@#1B_uXvq5u&m)>!s;c7wO6C}{7<(* z>5m-W`#*eVsN9_$g0s2TYw~scT$g+FP4UJR{%fB#@@)?HU6nCatgED9_MQLLV$fE) zDX2Tr$Nukr-xSWh=?oWsFPPb~VLgL^9y3>cv|ZR-8%eHPCzjkl`D>r%8jA~yKw9Pg zzlXI3QyFS5{0~1={X=TOyP2>1mt9)y$1velaErH3Ngq!w*ZVR@o9q*B?x=0KeYyVM zrz(-UuK(ZHfci4+|L5#7 z7g?pX>hO9sUYu>d~={4VakqF5i1XYjv0{p0_~FaO(u`ZN7r400(9R~o8H z^pi`2Ry#Vj)!uSgH!&l=RrRlu^)$+Knlk^h^2{Qvmn|GauotD{8V z-}}G+uVy`}OaF36)%bUksQQ@+C)OnB^FMm!QMg^>Mwap2x`jLi_nD(Md+c!iW8eK> z-v9r5P}l!F`@{c^|KE#L2fS;ZzAEW1ubs5mw4kdYGK^eh&8oL7Zlr7yC|^6JFtjNe zV&@%5x9znfXwgyfjC!}+z_ytNR_dG?X@8_HhGxxH-EXk$ek_+s_5HZU$Q9n#IGbYg z1VQDI{rmqmAL~v3JyrN~|M&mbcDJ`HEH5toe6?+QXUK(UlZ#s$qSwaFj;@e4F-er? zUdtNZmjo)XU;eLt2kA`z1!=6GIhn!W;oVzDHf`ZPFY>GY%x~+rYWq#9WY+ch0FsTU6>@WWxe*W>_4_+5PWd0w2s?z;tEJOCk zcR{zi*fw`{T=!u-miK3JNGU zzy1IF&OYPt-B+`j6+SoUCG8M;vQ{rrl{t0ArEjJ6K2N5oGQPQ2zxQ$o!)x=-|G#X0 z*#F(H{%`$}|Bko+^XL7Kn`p$}eK6*b`ew}tkwbxtxEjTehkf?mcH_20@^-dqmP>{C zx6eMZ-=?1bA2=m}1`oddZ@&9qEb@NxM9Z2P0T)C5MjUqf>{~v&>rUA8jX{59Yx-7s zFAdjY=qsH3BmaE!|I7cYLAi8$@`wKqzUA|1OpV^`Ql5Ty-Tt)FsF_j|0v+e)?q*JP z*|_z_B-yC<-V?ogZ=d=9`}2eUU;fVn50~An|5e}ocfaA1GdGWKu}m;ITh1HOooTY- z9W!^Ir4i5TiEkKUjF)XP`ZhIwr{^F0%YXMT|Nk8vr6>LszyCM$u7Y-@(%O};@^YW- zITzA!Rb_v3@5I$>bOd$<$Xg^_(t4IAxGE}N;Q!a1zy8ntVgIpS^xtd4zyDt~|Eo7k znsQ=}-1Rs0OH)l!zXY-}WNF#2-!QX-U25y26I&|{9slp&?fm-r z9lsu*-oB&q_wgfBj*I^~_3y(c|BtQpzn|yt`xW;0YyQ8M{WtIbtpBI~mto8Q9sdg- z>fhh<=iBW2e~y-aWIidP{qFJ%wM-qkmAmW;=O1ZYVVa${Y@0&%x6o5lrpA9h$Q!xh z?A9l9Pg^M0eg7M9WOetFPxAZw*T+BqJ>h$9Yx(^h$w%b>eVAQ7|KHQuHS5i^xk_FX z3!IVa`YAe(EzVkUdtb=RX={6!!s`n?|Gls|#lXy+yT5K@{Fm_ao&WvwSV|uK|9s%T z_1}_ty#Mc)Klb$DeY>$I{U84~*&5%^(;o#^u2>efy|Hs`+m+AK9H!h~+f-+;MV1~F z{%_Cx|3_-$@+1Fu{{PQ?`2ReH^Zoz->eU_CKb6H#I@|nSteMs1r(a%XWoIQk_~N?q zd;MhX=;(=0Jpv!s>bSGDToL|n&;P%F>HnUu%zsYr{Qv#*Vf%kdANs#{^K^&K$@NHD z={u`?`5A`3OBZ9emUj5P%6;p$=jb>C^ZVMe~y44>;BrPW+H(YgGSWzkP(t z8G(K3JJx?KEjs=5#W&%1|GuZz8P5N7xcKXC^ZU29-(MsCvG?5iN9E-eAH{!Oy1!%J zC;1i5^Y?9QzJGk<^m(qC8S@AKpOCsg-t z+JX3k_6-+y|8Rd$HSd4rq;}Q3_&@pof0y5XasA_??(6?w9zC63_qBfipJ%)4|NHN+ z`uK>s=*N$q9Xw0l&;NXQeSE~8xl!x&1CI6UfBkUtfAIe$f4kRzlm6wjzwF`r`uU%k zTR#LjAK1BdZ_#^}(@VcSI~Ug;eUtrDb^EHW)(L9cpBifM-QRZS$JcIl#lP=<%g>qk zfBOGVtLv|Y*Vp|#tDh^+(tLpPwIB4_dJK`<3sc_)TxMYd?RQ zeSd$&U-^@h;{QKyFMfIbr+EC)+3(|OKQrCi7q%ztcl4=sdDj1bpD;PD{_y|jKiA)W zu$ObM`62v6{(YtYsTB!pH*URDe#%02TG0C>RZIDRuJ1KYvZgj&yo)E;rEN()c6(x_ z!hid327Aue|K~sEm>BwG8dJp0Y0ARk6GMYuO9dU)nNmC<6lo01A$+s*IdR$R~c z{N(@S|Mgn`FHipPf9Jn?>p%X-1?B&;{9DfcvwrQeeO6PhmEWFm^G2zQ+OL_9jJbM! zx^|YRX{KadW;pbG-+|RHLhPpem#>z%_xwNmtF9ZyD8@sLub%N&Wm4|yx2eef6RY)_n-ggEK-vC z@2#8~IdkoiqDc|Gl~*?=yG}n?fAUu(!`U<6!&R5xT=ebe&)lxb|NZ~{U-{=h$Ls%J zo&VYYt>1q5e}T-$*oYr&74ZymdNurKeD-fz>?<&T+vnOT8@F9_3zjoES)jZ9Of&0h zhu*$iS6``=xo-m)E4~y~#52nA99feRxAn^|C(TT|#XgD)E>@@>+i}CLaALj3#4``; zvtAVUG|apjc=bRr>x(D<=b!lBzW%@W-U*os8X$#uhd~|R8@#y~UKYl-+e^8b?-v1-GX{bRD-C(C;`Z+rZ+`hq>R>GFIh7QHiFVjdy+ci-}D zFJyk6zY`wjRlM$mprw!MmFap4ih*ZNt-KvCdM^IapNe>U`JUrKCgy3nEWHk*lUoC% zHeHk2%#(fFxWRD4(u7Hw+O09!?{mC9t^DIcX72gZZp>5N@cr7Pm%H^ACNYF1STZX7TClYL z;D3KpneTu8Cpa*4OlK`sS!-c?a_zcnA#Ub@u_2QlIIXhk-KcMTWR<|ra2uP{M!Dwy z^0f}&ls56@ftXy+D^rzrd=Cy{tUA?r-e9AL->iMdovSyB{+zP2KIv)Ctj+86er!MV zzhe8Fj`mOWzZ3qtpZhIuXZ`Pg-7}fy5AWmOtj|2~-T$}Y%dL7#gVlC4uKil8`}kCS z_Sa*%Qxc9uJ)dy3N-&qRVC@4}G2iTf7Zsuvw;X>ua^8~`GtmCs)fISs-<7af%L0+} zGUXpP95UrB$ecZCje4ZEi|LK}>ocy8fPM1v$7hJtyZrj&M zp$_j$QtvY|DiviFs)zn zKf%FE_tZJw3A6bnrrfNbW^c;2Ys)^NX(A7rQdzvdi0X!3Vk`O-V^YC$uKo*S<^1>Z zJ?$HLjqdCDhi-5zpC+>`)rotP%K}x|D$Pi-wG)1BpZs5b@4x;Z zb^o^)|9$@XNxco<{U5uMHJ7PPvsUktVxv$tvf~ zQYY?DJTJm~==g*G?(!49|NMWjVuGiehWF+Rl8l-~axv3WUnVd8smIwG?zd2*IOIXf zzgW$)^X?nGum5!YxO05%UvAmHZef*0PHx!}+4pl-DQ2hXxDvrmLO?!4{%w*Ml z$|tl^c`4t{H98GRJKx#zC!D>rpyBbV;P5x+6pp|CznK5T?_d8DY|`eN#7rp?>M2ls z*H-OaFqJLxOKPIUDXH2X!HG)ZlYRzVd3r5k%X#+;|J9}YP79};*!Nyzxog=*=5Po8&@YU%0havxU=0{(>JLT+^YgS+XZ@yYz!SvVu`+qz4zwM7XcS|?r9o|1|I5gywtfHX&lcD$ z`7Y0%vMlSO)V091Qw_Vkp4nL>p0(wWSzCN;UCheM0mt@L^&jlpu*{=L8X|Le&%a*ICPzgKtfe{KD}|GVt#-~ay@AOGh3@7B7<`a)eFU$MXPnsM%b zMWKCYT+MXNL$mFVbeCS&{&=*$dg-^&JwG10{(1V^e0|)x_hs4F#eEjsa`>WQc^xEIAT940v zv^xL)kJ6gY_0QhL{`+`!`@gww=WmXG{62oqx#xc!7R0yj|MTv3Imeg0o11>;0eq?|&VmZv5iE@7CV1nX7NRXjNZbB-SaCGq-E9)1LF3Tf{f6R(sxaS5N<1#_{E5$65bw zy|sP4{f{Z$NB<n&F|%*Y+ly~GUM=>$@qN3#cH0+m;a~fg zetB~F%l~fseO>l@d+ZM@{+h3Pz53Vw{MQy={~NFVe}Ar}{7aqMt|z;~nlBx?Dd(wP@3{Eux4-rgy3%-;?&w>)I97 zC2-v+>iHF^Se7$4qNl1nbDwl0{!oQ&O!AMy?l5?>Dx1*w_ z!Sq?C*^FTeizE$mOqaPEi2r%y_ImHjtwlTx#-{2w-RkGINU=|66KddXzsl`ya4>{a^Y2bNY(^@?XFIQ(3jMdg1%{XAgt-|Cn#T z@0V((d0LbskCUg`?pHUzCU9NUDqbIM7LlD+vW}WbFR6`{>1~lm4YJ zf6$wIsv)Y|@tMiwS@r2!!QrRM_&l<KJn60cIyvv- zN5&sFcl}QJxZj$!;gp9;N&LIT=bx=D%vHSAntWxZ=E-+c&G-KJkhpSpy}&Y^NYBM7 zfwhS&eyV??uhv)8{9V8N|Nr7E^%iZv9~gZ*eCI zJG$@dd3>zc&e$#5w#%Q@%jHsi>#U;&Qf$p`uP<-@WgGT?eg?xm)&D%#CY^kJPx0)9 zgd(knt0H-~-8Gt4*>JSu3VX(kosPG+Ch)O5+r0MH!LR?5`46)Gjn__R44WHyM_=G{ z{ha8DyK1iNzWpJ^??BiF-@E2+iEr7S9O!LpkYDxRU*vy%we~BQuxlBzMh{<4E1umr zBRjkC+MH_=S6G%Yt?)Zvc(B%MS-8}VDd&Fuzw&>(@r?fO|L4B`UoZUYy!?KJ$IlDy z-#uM(qP9GK-;)1v!C#lK_^&ivm_0qh=$FXnz+ZRFnbzt2NqA@{6kag(Qh>*5{*GtI zU;Y>7J5YTz-g8>~hSz)QHx<0wdf$#GX@_6w9nt+vtm2WawyW=bxWw)%81u}v@ACiU z5>4K({|m+DZVUNx@Mrv%OW$G>jEvOpxc?N_-ex+*D&^mGjpt|VKAD>r`c6CiUm|{q;l(y z_EG2G8-M+GVgB&%Uw!}GB{}+ki&JGazenEsW>)@u)4n-7B4)Ezy*_tB%A+g!fyV0P z39uAbAC~JI&Gap8GrkQ9A7y%bcvaoMDmooKQ}}&ZrNE9uzu$62m5q(AK0dqW~B1;%Kza1^>YqB z|Mh?6|M|=QSMYp)nEGz_o`3c=ft#X?V(Yek4+=jiRB^^huZ=bAuGyQ~q*amb=@?<4*c&S?yvrRJ>Jf8NPAmuZEdFI#8C@lM@Lc@yo!p1+?Yc&A=Jq64S0^~;$x{ar*myxQ<*g> zPDFFsXG7!G5XPeV{TF{u{q-MI)cv&9T03uJ%fVxo(0+WS;-4{?-3};~$#WKpuh@ZLx9x>#xt8+IL>*L~`Y|pWEJl+C1^hdR=eZvb%ee zZd56*HmSLKZ`ziK41)XcX&bT*PDqj4a zpSke*)ct3ILD{8{&Hm`G|2O}CFTPT5)Asv=(f8Px|L@NvDQA2)G|x*t z*swH4t=}i2zppdM2w81AN%pWBk3FPZTm3)#^s0J)jZ;T-zTV*~T5^efYVD2u`$bC@ zzu8(hBRB2c-Ca6uHTS|!zC8X4Qm~oNl$@z>ZfAIt(eB`T+V^&Sukz7aVVpHHc}DT) z+MmHU#T!n)SQq+x;jjNLANTKPNs+CY|0F!d-1v@7+YzY2gu$t+~MW>xsYaCY_ z=o|@+iY=-KmD2amC)7;(`hWAk|9`&7_ecIdayol{Mdjc97hW;gP3O(Z-Vl&{uBM@S z{k+x>WwnmlYk5=W&e(a#Wd2O;i21h-YM1=8zsazt{NMWH6KW4THrDo9R-LNNFWr{5 zx>U!YV0%w$sF)_p)YSO;xNi$jNbG|rHP`DCPSoe{WoueWxQN)8imrS8Wu^DR^pElj zSgfpdn3^ zv9=2bR;MnEUV1wwx5R7d36qm6QrZgE{ImZi5Od+bgsxOy-d4drp*^+>CpHV3{C+Z( zHNRNr@P%lWiNV~79C~LiXUKqSo!!9-pCvmt^?%l_mkeVnXFt*xxZ~QN9jCY4`t|LhS_ zly&<}U}?&}#j$PY&fODI6i6MgE`vtKPiX_TQJy^~dVtFV+kEarm!2 z=k@>jGygq5v(u-hJmmX?)1PMMrzh;$wfsQs{|B$lzx!0YbpNAxW&e-7y6M@+H%m;a9f&5#Lu2{h$2Tf1tOu zBJ~63l0Vmf$lE>mA9OnMzwOD#x;yXJ2mkN?^6z@Wj|8`v^4cqZU)Q7@iq(2$Qv7-E z%&i*|ek7?+-!|>@ilwvH`sBHX8OSEGSV=maPM`Sp+_Z;33f(X3YrHvK>r)|p+1U8_ z&EI)hR(GN_bmuaKEEWpX)vlPj?f0B(qE~lKf7vj%PA|Lm_wkCQ`Ehlhe~YjG|M=_d z8*fVM?L*Ji{L5GWzkmMp4=#V|pZ(u{=zoEL;30RlJ4an@U%J(bDlpB@F*eCc=Y1;S zV&uxb;!xZd=Ynttr~S9zNUe+EfAHU(|M#T+tE6_3vpoeir$$+RGH*^f1sPo0Tca4RqC)l4Q~j-3gSXFM0OfB3(+y;k$T z`u8A>B$LTHDc@>8HHIB~_gdH?qA)&f&v}z=Cx8FjwIb{C^O&g(Zy{d$Ed0@a{-1i~ zKj+y673)(D#XkD~_Guc+;-KiBr)+j>L}pKYW_Q$hapn8pV%i}rPgLuRkKB2C=XFf* zHO4>xUnIt#`fn-Px9Zw6MxSK1@PaJY6tCA44b@*;ujvpfjlaLu>*I+Z;a?xB|DWHV z{d2#a;Q#BB|L3>-f9>cJ0SZRBSAoZUDwnTT5Ir9F?caNkTgIKCN1hct5Zq*?KVxpN zYDKw?f|2ZFj(_!EHt7G1Sk94MugX~bvyUyzB6?jGc-fXn3vDe-1tt; zZkz4jjy?VLKI@q!uRW?f@(UD>8~YpIzpivjfBpM{+xc6|H%Cnl^lEvkUoR_uWg~yp zFOKOW&f331qWtnGI&|Mv?1v(J$K z^2tmicHhOh&$YI8SLhzp&XT{CbU)8dL;Lud@7jEK=EnWn_m=rx&;Q-`O(TzY%igV1 z`)^-#W_oyC)yjP=&P)j%lkv1{F=pb1e1MuC1sIdaOcnV+3n z{mSQ;kD^5VL#x&CUT4IA+&`UndCRd9t(7@Ktudiq=eyiCZPHwDxozj{)03Dqdzwn! z^H+*JKJ)+lam7FS{zv~m|MkE3!+*!u52jB)sIT|0UOVgoXEx6lpC9e+)6e{`Tp7k3 zHvQy<oFTD8LaCm>e%xBeq{`2DJ%(TC<)VbjMi}Wb38UHs#zV`fM zrCG3}r2Fpe?S+TVxdl7e{rq1ebMXJ$l|S~+{ZlXf=YHSALuHk_VjumNoV#b5s@l=4 zGd{n(KR#?(bY@pW{WFEQ-+sbhB9tbuL}tCcutY60?)?9Lna@k5-z@Am%UCk)i8GJ?T#i4AZp^-2C~lM&{7}znwqkpZjNTe(3*S3B5Pd zm)|}r9b46@)Wo}Rv)P?kuf!6zuSUMyA<@6}rmOe}YhGO;aN3J^!lBaoEw6w6pP0Pw z%0ZjMbA6u0E!NLqSgZ11d)=xDYwWW=UsYR_aXWM7{A|NL>mKlbyw z{+|ci_EN#SMfjCFRKm^eb0#&S4t_}-g0bD2|N z!_UtXllL9?U#-Y(b5Q80aZA1D>JYBYa-|9@Z{Pd3AeM6}&kZ}yfMDLU?q4I*)`Rl- z>L2xg{#47?Y5kx6t?~c<3orlwS^D|^j!o15svY|1sQi0-{4ST@yH7et3#mkX)4c9x z5Egv?ik-X`! z?AXhxIwk96ZJYi?v*`;sLlY-jRlQEM@!MuE-~QR&M)Uvtf9K=v{vT#s!XZCNDdyS# zT|U2DdL%?&-w5+KKj(UN+P=jmNsQe4A6GZ7P!-srnS5A;wRCUSe|f_z-hcMzr@g## zLpJfjz7C0rY~>n@zk5isx{pixQBb`z8CeCsp1s5yNy{?ft|NqC5KlR`K|9tw{ zUe2NGhoWZP6Q%DD{We7{ylMP&?$y+_mKkodOH~i@%P>#p6MFdc)#;t)u}9kiFFh&! z^S@(ZT-4i0-l(hwA9<0;^E@ZKmbYFE2%WgI+{!J*@PO^Kjj0z8FMhw;L8;0l_Ul?xh~HulYEMD!^(juU<92tFQIyO_Y`Lx^)q6?7GK%QGo{OCnLT?={k zkM=dU&i_~f@?kaiAAa@;iZL@X#NYo(a*Ln+$UwW%)Jn(T`x1-pHCzkoyY*)q9pT#b zC2F#Q?aPg6X0}Yvrk?qqu`n*`|8kuM=?QuTeg;$6?yAm7=KT^m>2`XUsob?>*X@CO z-xXi*j-D_4=*geYg*yL}E2I8Dzxn_3^mG67(~p!c`SHzE&u2^bzw>@9Ej)X-xfKU~ z&;9zxq1?`fGo-f8$zNsN=TR#JuB~ zVf!@8&GS5$rQiBxu>GrWI%7`O()X$hSqtC&pV$BR=YP+?^V9#Imwr%h(IE2BIp|Nv z|6t?2y=Eon?!M!l^#4{IljfFXW<@hv3n$Otn8*HNQ_`(y6-%!p2D`vngZoc>^fasb z7ircp>IaXiZEn7Pr7>apBdZO0!dDg;hA~c!?6NxOvaR&f|DP6f{?EVizjOKj&(qKU zuVB!8)V}10;Q#bx{~C8_O-cEmreY(rLCsO?gof}c{k%1-sroG*9pTGsW0SHQ?yP_G z-<{`c(DwOfzAyDYZGL~sP2<=3GoPM6DHGLwQ6sf}T1e-MpGO|N^SH3gXPs8|&y)Y3 zKQ8!JAN2qH&Hq2ye$3}naQ!tw#QxEL!TYa&@t&As{oTlB*5Wf4r4N0%d%H15ENe^H zDu%|gYZK;F#@;DEe@^?ye?jNHCFiSys*|U!DZX{1JW9(`K1gbXl1NV1rY%V#S6NqI zmtjwSR4cNs#A%KWna>K4e)ExcO1|4|{p@E8Kt1+p4a-YWJU-y^cV|@LeAHUZN|IJr@)UN(dLm>W7_4NCk|3y9>VLl;juX4Ws zt?-+tLj5;ytk6H4bShVMewV~bLB5%0t`ko8Tw9^nU-RotV>0jVDK`6gBfd`k`*6C@ z$J^hF-uJG}e*RA{QoJW|x6zENEtxaLm@gWfw=mwvIr044(2ZfbJEmX$^SJu){+@dO zpO=IrU3?}rdWv0R{G1$HoxNn5$eGA%ht{;*nzi<8lHP58fsPwtS1zUfd84{X{@MTf zeeH*yEA-g+|Ce9>-}!0PxB4Gve*Ta8{fB>jQDIQr9+iFNuXn2!H8gB#n24lXUM)l6$vGuwI*F!yzI}}{8(hgam;;A)v`|2y| zT5Io`MvIxJzn^>NS%~=M$X||8A9hTPw=$94ZLARK`ICRHqi?#w5H#6dRnW`Es!^)z>BaS^UOEo$J{Lg*aJ7uRUk8~AI3JO6c-oJ{}sfBH}Pb6@{Y{%_y;fBk)% zqx|On9~XaTu{h_byj*6%trv@CCUSf&c>c<+J9+!bOEYXg=Kqd2J&{s*U-L3w;=kkl zKlYl+&xxyEy{h$Md=r*53Vk>bCeXpX{v*c@F^>vda;Rn7c_y~AyE0>)GLE`?jQauAFIjyKRsc}tw|9lPJLMA<9lvA+R>xn-uFgn(eC^X@zS4PXr)Y7D zmFP2O*Uy<$Zny42eO1t3``7!=yZ?X5uxJT?=O^Xg_PZ73{8UakZJ6nJ_?_}j`{Mti zc~KJ@tBUgipz!{+KE$8XBX>paLSG-=8Qj4Vn;BaE9Ft1z zm||pkdP&pT87oslOUhTu-4y%<3h!HQ#Z$auqn$JAzg|r~v*wl2{*xws3)&09n&-y+ zR*-WzRlIYp=ce7Nd^QgM?Z zFu7-{+JCE=x8lqE`=W0^14j2}PXEyItNxe0o%-K)<_;k}pA+5I^((*ZidMds7m~Q_ zgrybllT(o*v+6f$XuRh>ym-5vXZ2lg#$yVvLi#WMKi>BvHdA1JvGuQG`@XH5z5Bov zvGr)%Uce=mI@vXXt}?AwxtM>n@Tn=5kA@z?(h!}tsJZ$h}7CEoXO$oyUxzx%UL zidsNvLK@=*E|=!Jyem$u=-}1bDY3Z6`OE)}%yr+L*DFEI&&;{iDwQIaQ@mF2Ec^Ul^>%iV|6gAGW&ft=P0auLWyhW0{J(ws{O|qG zpZ`s&zo-92x_;t;{&4$%#7Rzd@9Vnu{Ll+-Hm~mx_l|$R{O@+_N7WzKuMgS(OaA}Y z*8MeqpItru^X}~F_v=2t7O($au3vxX--oyB<^G-c{?BROo!7gs|Gs|z-);N7KVB_8 zYQFyQ`}jXU`SsuO>&NY@+ZgBiZ%uyu-VZ;5Yrejf-`|&i@6O)S_WOQa+rRm5@we>K|Fn_PMU}Wc!|nvr6-S zUWqy$v{8y-bFpk}+D-MPbLT$0vGU&6&U0JmC$#SW!MV+G*PU-dVb2yRwplC^ewxm{ zRPWIPxt}+`PP3G8{qA%xF?2%hh13IAE6<9`Kd}E77Nz^&Md|++gMIaXrq};?+y61} z#HC4=nZok-Y=XD=I3(YXsE;cBo_%E|++g>HcOxVMDS$7Mkdo0 z=YmX|B3D28Unw=Y#4Pnvn$oJt-zG7hbo}(Aruk!@C^(y;p$j%YGxAm~R z&ivx{zn`C8b86k1H?QVRzZ8L$djsCn*KB65x-_Tdr80y2$+o7JW1Cbp?Gj}2&)n$C_Sm%Qr<+2f z%Qab7rrL{(R;m8%Tl{lfR&_$9_O4e!oE+J9P2VpbRPvXaayCA=R{Syd>vegSyV7=c zz23lZx_;JjPcs33hE+?~c(3AKUweE)ZRA9Qpp8+TFV+42opvw#w?5>f{QQic^%mz7 z(zdvtopK>%CHDf&>TT(-Ha)f$V`UC>S5J3m=Wb@3{44>!?^nVn@{m^3;wKsRBz|`DSjS*{S@zvO(vlYDbfm8 z4`f{B^}hDx!1kE4oHAiX zZ}D&YP*K^>3j?pRIIf?eaNUvnfI`Kt<-5BUHO^|@zDVaLw@v4*Ne_3m)rf!={c0vKw<>n8g(p+s3l;dYI>OFRt3LYS}E2v{$>=v0Gg8Wi^rSj};9* zo1pipp0W7c;wa7u?p}H;wm96CI3K|Ms_^IZD?)eW(sA9Z}DE?gzS;cq5#)uhDR zSZ3`m?tof3r+?bqQ~qE5`G2y?|EcvqKe#V#Q9J!)|C3!p5texmUQb)z=wsk07BNrT zdL8ebppB(RzvdogOI+XN`sDPgl&opbgQJag+qED*eb_YPxpy5ylYK$#=`FFItdA`w zgi0=HetmP;q~7^D z^T`P_gPYT{8nsSOW7%|mN#p8MZIUaNb#*%E1h6v)OkI)07<$I_pMJu**4+#<_)dL~ zy?>=)QR*tsw)GPGR4Xf%DOZZEvYf=_V5qBVU~@K**(U0`@8Qh}k|Ce=|2m`cf9vAU z|5tzeKR@H=dRe2&pd<2IKmPH&wIn1^ZmQ$6dT#|*p3B=0e!H%7vnb}~|sFnR$JxnN{|`(+c@kBYni? zLFlH?p6`0~?0t`3PRp(Cdu83m_36Tvm3%?M-|go(pZ?E!*0MkA>{Y`u>9*o)D{~+4 z)`xDsakD@1_AXyl*0_p>ocjg5+8;vZ|62DvbCc@sSuevu-qrcP`tN_QfA(|!On-h@ z{;AL`9bU$SS+n#b*R8Qym1p>G#V)(6sT0~}J-3>s|J!Wy#Ck(DlVhh!a(IN218*Kw zI0T8-#Q*VOvDd$*PT+3LxwR}gW8bUHUGG;lF5NwiMQr^tw#N0I`@|b`Us!g%GJc-r zYV_>k`SL55^|)CUSS-`iZdAA4^!~xIHdkhYU#i*{awmLPwKl7dE%k$xf`+S*!maQ> z3>^n1=NzBW{U`oF{Tyy_JKmGqn5I7p<)0fA$tW@7$_L)7g`p=~PfBfi^Fm9*m2qlK z@JExAS7fgj`J69ad#ZQeuQPgZZ-zfREI(CfmX7bg$Gd0cuAa6mvn?rVnexey@{(Zo zb(%k~EVO&UuD}@*T9)gx@TC-2L4bV43Q3kWbNQe98$8A9`C1)$PHjqy?t1s|Z29d) zUFkpip3hovWrl(<)A5ZC0a2?KRrI-PX1FRigjilE@tijqoPM943iFvzyeiwvYr)P1 zhb4Ed4L)wR;@vN!rOMY^P^!O1Tm8(bV~Ci7S(Yw#?#;5)t z{q;Zm+yBYR|DXPR(|_vm@5RD@{yXx$n)NnI>qN1@`>utWs{~){T6l8Zqg%TkW=>nu zkWt`Zy-}9z_ zi#-+YC*GT-pDg2{KSAd%*PH{JLc*`sI|}kK-8L4zS@wq^+Lq5{_pw@>|d4t zPk(-J-`S$(?aaUy!YcP7!J*{jw$S@Vw(13?6L?Gx%-O$db<-E-h3$EdCUsscuJtaq zJ$<>P{}v<>D{>jIO2;4naJ(_cYr(k_ZVzTjEuFOX5(ZKPfA^@9B)bCsK{;U#xq}*rt1QQQxzqw$lz_20eT?_I0g(>9-(b z8gEEKlh}%vm%vdw$9=1I^%bVi_69aRzh7(4Q(L{@VAH?k$Yn2Q=&>=D=pN?Dxo^hv zD)Gzd10l9IuZb+5^#5vl+0Xs;C;tA|`UftG;U)1imXPv->&6BR#<%t@|EagZRkuLp zcxkG^beWqILai@clw_E(bg{&$?9){V(X-Ugy8qKpxWu|RU{YcC^#fDNg>L-a=URGt zA=?U*X*$+driWZ!mcXe!Yjw1kMBBbRE3Js*3xqvB@AwbOu@nE-UzsLyx!mxFY*v+! zhKb&+fBW9A>{~3gOUtw3@!1Kc8?_VUTh=$fcf%=lV&xOKqGgud(Ufu4(Ur=U06=U4OYWp?g|Vl+cs_1OHjcO*>smk6(DE{9oMQ zWz*k$uU+X`vpAQ{Z+zL4xJyXlSXZ*fw6t04IHe|JRZL3vo~4+%PH+X|fkS*I)*DtD z%KxmNa#?TU|4mG0>x4bnri$D)lf7@sd;gP2>{nZ9m&J>#su-dga=hm`uH?V9;FaZq ze-@MK-E*(b0u{t_xL5G;)IC^ua$k?8OsT;q-m`|G?#4Xc(-K%C`W6R@UUB5fSaW;Q z)0g|!Tsm+`WGN_G)qbwm|M9Q>>HqIbPSn@heP8_brO0F z_neh-bKUYLU6y{IyDaZA6M8}pPb?9aSR}omV+q&QdPn6AeER>zO0650}Lpoo=9|(8jo+-Tr_4g*n_G z>qCwP#l&BhIT~J{bM#{9>?ENC=FjYnZ>}$OxcZT+of<_4z{W8|D9vuKlO$7kB;t+;XCR!JMLJCvGGzR9S9g<#AKxnLJOs=JqpTHx~8j z_uUCBw@8}4H0fPM#>c%U42unoE1zuke6U!~QrvCNjeW^>GZr zU1f>>Mf@qRmaX%D^#Aew)T0xo3cIZT@&C}r_dI6qGeS*scAPVqBmZyt$@-l${)b;P zU3}|*{E6pJg3kt8WbAsIH@U2wLuqfAvz^xjnW*S3mzOt3y^Z|i+LD*=k+I$U)*U6z zg&S)2Xi9QEVKg}Wc6VL1!x6iB!D)H>YGf^+dQQ`xk@vm*yQ56QPp?k@=CbW)Cw*(P zWy;Opx_frYWT)9TMAE+P-TzvlT<)9OJ+Uoc8KiD!Z*n`b#Vq;A;yg3`k6RY`NnAR( zLDb^yxeSNP?0YY6u$S6q5V(?=sryQPtHSCqqqEntt2s4Z?0tBkGG^g~J)JDZHWu|Z zDO$;|I3N6f^IE3z|G!W2_aurM|7W*_{H&K%{^$RGp_EVFovL?-*FMjS-B+}-^y8tU z;@6_C>))wKoNBmz+4G9%kPh#CH4m3=y_)-6@2p)$?C!ea+E9Ubb+4cgkB)|(@2>BN zy?69zcKH1Le-1{QSM;8_{aU})pz7qVbyuA(?63d5d|LONZ=bGyoh`mDCiCu&vbSnR z+X^g-PHtO2`M}E-le!1JY;#|5ekiT#uUfqDaaqQdxaH3+KkU1^(7-kF#P<&j^Y`zs ztm2_Vyn=fA8IT_w&h_y-x&9&Odm(z2Qbo!j7GKPU-F2+V+NB*vEd2g*UQW zL9J!!Wu{rTTR7@-X0Cd{$0Fuso{{fl*|^8G<@dQV_bF0Ehc)(8%njX`Xlr^PN2w#> zn}8zU&@H#VdEb0+5VD0HvC%av+}wA{wm>#?HBH6>)Ce1 zy(}4q4OP7SMk;&WItZ2OL!ZMx{xl1?`S6YZR-cj_o@6FddTmp_oc{Y7Bfr^CY2Si`Qpp1##AY}VA?H%^>&EV(RC)!trWj968;@nhA8Cy{G- z4%ZbQT5_+dn?Gq!T497o;ZeO}6ZZ3)rp$Gkwm+@mh4o?Gil+O8)hAeI^)P%ncCc87hW@~{vw0a`bX{&Y-^IN8!p|^I&9c@t670LmTUeT<+}dn zdHU?zX8h<<5ZuYUQoTez@SDmSy8{muJrj+q4Z|*9jjr&YSNZJL+Sywt`|H}4C;n}{ z_4N7m@blMJY`@yP=*A4P`Q>kJWA0>|y=mH^ip5MhjKW1#PfM8i_^w~=$ee4lcalh-M}zU^sh3ZF zmSpUBTA_Yu-{UF|71dquw;YqaujF778@1Z^m7-GYJ(E8Q_hvgjGZfT6cGuvWT;lA^ z>$hEG5+Z9(PLt@GDAu(zY>9{X^$3>oO4lB)H}$HIJR+QCay&WQrZ++KP)D|Ng+`NN z^%~0s+k!6y&#yWx_C;>fvw3#~rkS_MxT@ZDtMIO#zfv+~^NyNJ>>swx6W)LJN$lK4 z9V5*fm&I&)722k8Z&UGEp(C<(VvlB<(S$9BE2dBU)oFO_>;{|NXHNMjrpl>44O%!` zSN!36(*?D!>K|NFxUaRoJCVm_+w~ZE?dNFYRj=>)BhbwT(W;g-?VFf7laD;i-a6_=W<4p?{UQ0hcEniZ!4_0 z`Z53GgWwOoYpTOU%5NXm73_I=HEw>{;SI&x{GfRC@wcDnuP|u%!@V%Iu$LpTcyZzHZ(WyP_H7G)cgJ$` z6_>`_XV%}a>XS?PwDh$3jz@Yuff5V4Oym7B9V8Cq>+K8peA|)X%-3mNbNs3|-~RBZ zK6{ad+IbOAGuM-1sl6JXx>DBHYm_N({BlB)Q{>96na1hIPQP}!6kd|-YJBX}=YRaJ zA5ZF=T~&@^km*T^XPUqiSQW6$cZSoE7hQYZM0C@Zwj6fceSe|#mSElK?z>}VtvvQ> z+5MlJPVTXOajEe1D;vkt?sj6Q(|sfJ69`hqfKxmBNrG3;_?8 zOlW%iVT!?mzVqk&pF8sv77J%6)x|3GIIaD=QdzRpNvT!s-pLZ7<|bipMuX2wB}!5X z+z!i?h*s^bm$m9J>&;tGx7_T?$}5ZaIj?ZP+g^2LO4XIcOXa?Llul7foU&1P({9(@ zE%#oR--@f|n8who^i@9E?C_SVG?6Rn7k$26F|SwI9i<<=$v0nwuln}aa+b|nirY5_ zHxxMpxx8QSq0VB-?I%(u`}WnPx-rdeZmpQq620YeBj4WL33uw-DpdCEstcT$qHJmT zeZj?Qxm)#0CbhrKe~Tc&ke ze#`E|4IJtxjTgUbSoD2e{k#o6;?j3{6=#`FeAxI(Kxs1fV&6p`r`k4LoXR1~Q`Nj- z<3-V9>KFI#)^uxcn%sL=v#y@$EXQ2mAN&mhzDzpTB41i&xlb{yd7gJ{du4g~cEP(cN^D|_HN`RlZ#bIVRd z+cG$7^jK~_wqB}sm+keZ!4pF6)GKSJJXtd#u+^%|UadhmsQa4tog|+rPJ8-X>?12y zo{2cP_)AKjw9~4Y=T+7Vz1eywcA-$l=cxK~3!8=Ogip+{7G7}qlA1zWhxL+wd!?5j z`7E8kcHO-D5$l*e<_S)#&}5X|(AF%Nx=uOr|K^(PN^xVqq6OZ;{2TARofw;bA-CN8 z@aB}w<}r$ozi!q`DSG5oCLs5uQuxP3&mztj>$=m0cYG*ZYxy>BP4=VnWf$0Z`;6u< zn6N{{yPnCJE3=$K_g9I-tdbX|=QkaT>n@zB*L3|vS#@#t37r+X>FrL!BDGc*6d&vC z+GcINcbh!#xue%^JFm;#wp)(1!qR!uZRygQoXxU#+&Lz_%edV-ubT10HrWYV-$X2E zyt>HK?XiWy@w1cD`d-_e(3`h+Mn~g+xBEBNxl}Gx)0bFT&;H^3P4kESFYdF)Y~8#0 z?mQ0GE1Tc6t*sCHBOoHTK=|TK&$o_mJ@3d`IR2X2t2M{9?+8P}=952fEfJolQP9P= zWA)E$mYWaF8~-T1s-EHXWW%D|+aK4hm7kh%+uiEp>;8=uN{V0In!kOhThe;9@$Rpr zvXh;BMemmuEyI^`2FlwP{nuq8V16>%MVJX63wWHG9KG0sY2<0k;lMC~K-0opizN zcb>Jo%$q5@FW!G;uK#V@@3(x?KBr&)T6A z>(sM|pd@e6y=fPFliog!a;&@Z?cqDqHIqN8?7sc3cw)D=s#;irP0ecKM7I-G<#Q)2 zkT=|7`8n;UPtdmm@AN)w$Z?O>SU6E_-RWob8>Z*H3E5NI7{?M^c4N8X%ZA-b9|QfI z_Is@Dc_?Q4`eV$7c0=_KB^!Fp3)O-)UNZRjrob>HCPnw`y#>5mTnvwK3TtpHeSUL> z-zj^|i$fW`U&~UqnDwtvY?97|t0}v6 zcd@&_-}-T1)Rwnmx`{Gdd=6AFuuj@J>GoGCGxOUGQlDblRm?@6en_75%t~!#;S0r+ z#jL`@mDZ}svkJ8<%A_~X`RMknWV!64t1Et-DcWp%=Y^VuXZ^me#fiIxm*ppD%}nCW zT)ca?=VnvsqNI(>)4yrgxEChBR1s`ktMySWsb*R50k^q{$;qCU?iuXKUQ?!9xi^`e zob&&HNp)iN4e2}n{@q=rE$wzuwsEg6cAfd8uDtVp^%kw5Ya%gE76zVsaI$Ka$j;Lb z{b#D3l(=;7P1A)#XP>0huX-=Cvsh<_c)se)Z^;KMH}O1Icz!ood5?#+Z2AO8Gv|pP zW_;9L`Y1a1=e37B#cq`CK6gOfX4d5Ex9^qh+IJ%6`K1efelt1^1xn_e{SY86`8&F- z(1mG^Wpk2V+2x6q7kzI?&V2RST&`$U&4t#pS_`Tkef`ZdBVlsfuMgeR^S8~b-(U9l zQB?NZSFO+2F);5ra_msv-I&Pg)VE%*U$suZ9wwL@Q5}CdXQ5r=$&j=;CmnOnEH1V1 zDc`6cx1Tk{dV%7uZB~o<1nfGBpK5%6Q(%5yx@?(#o5?SKA?Fts_g7l-$=RoR{(R0p#cq3D=Dr*KQnn1g zo=RSq+}+`Rnw!^Yo%dfXP+YRv z@N}2fw%yKFFRbQzR`l)bC{nw~yI|J6;%&cWPdR;ccRiH0E@#vAhhKkvPi_&vU}4wA ztn(nVyZBO6&m7?!Qx|{Zn=8Nnlv7#MmUV`HS2OZ1=FE8d>F39w$;+RXMEbnkGp}Wt zbbrL74++A?o2LJ9)2hFn{`7;eaiH7$O19tLN-CfJMLg&<%gno<|0zINVnZ`)c2dE{Z?%JwfWtoPj#=}@cuuiH0jCVUYQf0lS@C{dA3I4i~GAdB~4GnXa5q}X38te zz0v7rY}V3+g3DjK^NG~;f70GoD`DbUJ>yl-LenQZv!?MszH{LC2L8OtjrGbQKPuQa zx3`>p%sSK1fzA1F-aU047axxge1G08uwBA`oLT+HNu}$j;=XC_>$Z%NGKsu1H!8VkFvT_y*Vw#2p{ZH@4@>ClvxKSu|!}ElV zj>|und%J2F-f_7l-*0E^oLyoq(x+9Q&>FSMdz0nHgO~Nr?KryE<6`!X*VfGTa>?8; z7mLPL>n=&ZS&g7)~cRqey(`qRpNuS zW%b*S?R5K>_?c1q>CLy_4%}U>dU3*X(MJa-cdss(tv#>j-XqJkB560?Rn48~KYLA1 zvUc2JmV_DmZ#EoVtlpl`wr2L zC9`MdC+pN{{dDnPq_=o-O<>RZo2s){d|ds*GbAxaxR3wAOg6g{dEeGdVE_5x?DHaD zSH=0~C+@9nva)AceV$Qk;c<<{(aqu+J%`fvWjIZ3m|1(cZiA=K!y^}UBCi}=dsX(< z*Xri95bgVKQ);`9)IYp;lu<|^d2Qk0#t3jZW;M1oc&n11C`r`0cH|G0S zvXiZi9y8|^G3}eYd%w}j8!aarR|SSKr$@!`uuBFiDJM$b9&Fwy^uKCJPVX)T$DY*dZ#(PGC-b@0 zmv4Gqa_noL!^7k=dOvDC=P#^}zjQpvc;dg5TbgSngNoG3da)TtCfs@7%l0Q#hoO9Kfor`+d%CsC1-n@_{}w7}i7d_i`}GZn z8OzQ@lO@xX@;OS2{$;vWEO)FgN;)F5K*)mgt0#BD6>&q3rN&Fz4@K3i&vAy_4gDlEd6}T^qG4@ z`lOy~=Y69D>%|-*Y~N`=N-${4e^K)9(bDP9cw+9Xue!V6n$6s|>d%8|>ymae>|gwJ z@3+T1T9Hv2Yf@Gw+Vbq^sEv7`DzCf8OH5^V8q;gR{23<}sdR7pE5NX&kDK9aEAs`P zg!Yxua^^Sg%JeiXaF%5GZJVKWFaGAMukZY}M0`wDzSHIF#WuTMdU4+L*xy>)f~MWt z&@n+#o^7^Z`5TuhDf5!F+J2M^@Af!Xv1sFwW658N(=Hd*upC+|9nLbT(k?T;Ca9sW zj5!50_kYVLdsUS%ov7DZcO<$0SW_FXoc=<8Zbu0Vo{ZcUC-ts9!7RaT9{o%K z-{)~SsJ@d}Q@;Fi-Q-Ey)939kdf5D0g0H#i@V$hp1KmaU71^$>SQzTK$Eo1=t7lcO zpWXU(R;)+({r)$m<=f{ZPJX9zgMWHSO1o4@9i z@ssxcNdGqmUNQ-pGhW|vUniP>qA2a~Prq5KVg>FiBo(xF*cQ#2VzF=@+txF$C(kJl zDo%dcSoi74OEtBmYhC-imNL(~+P~TCZu8{KdQag?v!_>|zISpC>%$`xlb64nccRtv z4EN%V6Do9AC&-rU(rGSM%&-1=L(S~d494C!4Ld%cejt`-`C`s#JzI`H4tF-{o}L;T z9$a#Ac}P+2{qWke=Ax<_Y@LfmuYY7ZKdB_XjQ5q5+6I&ByW#P(Jqd6y~ zG76vd`}~a&iRtHA5q#vK#Dwmshr%4sGP+V9_}!HcGL(=}-68x`x>kMHUWsE5SM=XW zl=<=V3B!AnM^BdQeET}}NoRe(@s`Y$S3dX#U(~$!#8AbxIOWx>S4hTaTp!kCu?EA34>uRCI=sBU?}?o1hP3pyjkT3AVb23UZc>q`kk)U^pY)?-@!hBF zt|vEg-U?>6;wpZ2C6Iff%+@5Hn^$fc@=gn0RWkKf`k(xBcHMlt)ueuAipoSTulGLk zVd1u=o8F$Ox>J1P1G74R@06H7O_sWM+Lt(<34hB|!=oj%Ve#(VJy(0Lev7>R(R9I` zcY)s?ZoE=2$2oKQ+tj71%W`gqq}cjho4oZ%9K+N}dn#ma-Id9cohZ5^;>Z!>oUct` zR)@oE4hyZYpHngW&Gk8r*-Ux&{&EH86lJ~QsGq*v!eV(Pk7^N@$=V$YpKf*uJ+X4S z{>u+*%@x|*{MPO-a1<218zFWt&^oLC=Rf(=@~-Tk@BKF}t-bVff6j@t!vFqL&t(07 zf8*`{jTr?xuN=*+;zd+`lrFlGy>idK6MO16@#|gVx@04N)o`MOxc<7T7bl(X{4Ugp zdNygFU!3Zu`XfvmZDvfGrQdgAO1(uj!{yj%IRai^*lp{d@WyN2aX32Br{h>)dREn6 zhmRJQR_UZL^JlAUc+cK>WTMOGQ*7Z$jWdn5vqjEMzBt|E8t-IL#uNEEv3q8eUwD$g zLtoq@?4R$OZ{I#0-EjPd?YlF3bMk+4Ce+pHP0C(tk;dMsbnityZ>GKdX`%h6?xb#g zbLMn@(d3hkrdfuT*OVkms<*!Uc~kAk|0iEeOsAbt7MSe%Z@%HN=W0yfKK?i2-Fo6b zuK=Uye|x(>|6i@0&V5nRe`EKmQin=fW;axgvHv;B2+%5~+W^vDw_+>QG)o)j(b zUyYg(D@Vp?M*Fxt+>IxrdI$aB4>iw%? zwDZHam)6xxf|^#GA`R+OTvg9R%sSB@=JD-8O;a_OSd6a{|FSmci`yG-^SLfr^1Ys) zCtZnyUBWW%#oLtfuY6|zdMxY@JW!8#`E=>*Ib1Wu|Gz0d7v`7F|3XoR@wVUX`k4ZU zOD^sC%-xwEkRpEINNiWmZDEE9nw!dJWWL|MfP{R>svXs#yAnV`kBv8nc1J0=bF7ncG;zLsYf2N@kxao z6MigmU*-~I-ZXCmfBRVm%hxYMpR75$TGjHR;YRPaI-k|HT$azKew1DMCw4N=qQb|P zFM4;?#Ra4mvoPlsK6s-PSz@hcqvR>@-gE7y*GJNN|BC)zCR88nyZ6|~2bbr*keos*mg~J}--yrk**uO{Rs#WsZf^N>|>)MT0Rw*vMn(9HEj+ot^xO4>df#u?lj`3}ZEqHJ^ZS7!vvJ+QQ_^ep zz=@h^*EZz2IQPDh{*(H&j`3~7U2dy;e9PBG$(RYKZP;OH=Q>9Vw&W;+#htI>=o3;4AoV6Bk5oEh_TXgb;pEiL)-EZ63`9Avp zko#s8^5%<~>jkci^wR5+B@bOKz9fD#{%tm6V}7$?d&Q5*o%P>>ShALxPoI#v_@aQ( z#q*K@o4hBw)p_OwCv3J=$z*zPhUtiS)AfUIO+;qaDtJon+sV9~ds6vr#=}Jpd=DBg z9%y@%nB?%!LN4do&Bj>A8w)mx@;_l|au#@`sO~3c?C?jafl;ySz`jo$4eU3UHhh=f zxc12EH9X9}jjyNi)kw~%KbkpL|5?Mi3G*CP_LqB}b8(1F+--QM$`vURPI-r=6a{ZC@Asf{(k>r#m$EGEJAiU z%bp6KuMc#&U$SJT*gjjAP4Y{1GNYbu+4W7esL zcz>R;_WvW_$BSeBuhI$sC@**UtNcaJ(-)%dO>4G%{$jz@7>kMD{)W8%U$O508`ft( zPu1VlSy%6RZS{}-{+GY*n}<1W-6wzi>wH_c`Wc)5>5HGQ7foQe`m5gNdi~Zt^LxI| z_qP;K{QmIQjqv~e_mBRr-xPE6Kljg?>+1X79hqJqxJ3Ql*Q1x0$N#(Y{?8&c&;4I7 zrGE6DJ-_aJXa4)L`2Tl0&;Mil+1kJF?^pW|&GpZ0#rLQFUG%(C{qW>h)%Qw2M&B#_ z6dV70-dFkGOY7JF-E9A9pL}f9{p){@#Q*-t|NpE1zF*DT|6lsbUw?jkefp1=|G!Ms zkFDAMe`fsuebNWZ|NW1*`Y8T?$@gDB^Z&p4kRA88`Mp*3%csTiKM%_Pzf%AG@cX~7 z(wpP!e@SP>|F%9{ZocII)A_acxBr_i|2r@9gQ>dR&wJJTOBOv+=})WwJN@G~VfW4d zLR~fI{GZVlb@M-W^nd$rkDjlaUvXXj|F`$`kJsD%_LVQJ%YVPVukPjbe@Fj+o|>Mg zUw`}j-(T{7c1QoJzW?{z%KU$?)>Zwi-?iuG`m^=F&)5B2Zdd*MyZz6}|L>Rod1Su# z@3-gE{(sQEwf^s|^R*HGKJow6eLeMjef`hJ^)DaC|2kOz;o0>1pW^?zZ`YUqoVx!1 z>HqJvrSnUs{Eq)=UH|(1{r~>*|NHI#)}DHM|L>{!zi;pVTmS#U&ic>Q`Tx&^zyAN@ z{vUq(pWFXGv0nGLegFSw@3;M1_T&BjAF{jmfBFA!{{M&de?Hpp{mftgWPaVt^8f3X ze*Ra!{?D`N_4Dgqp09r-etYq`nfrg0|9igljmf{Kr#j#NSp0mi@bXonw#&cTmwov3 zq4v%0f4xcn*n?Move(J``+w^FYUU^ZB}M-Kntt_uSbg^A%lD6+f0IA=N6-h~|1ZM- zZ7;Vk|F~HG_Zj}bf5huvaNGZH^{@Rh-TvFf^C#^89QEJ-ZPBmi^MBR9$p3#Z{&#$< z|9bu_{w?qSCjI~X-s%X&4yP7Q@@vrIY-}pb1e(=Zt)J`w?o$~t7 z_5F8$NZ;L`ZW)^^Z)-@ey{E8|JL(+{+_-6f8*2pH-0ph@Bh&`{oe1+ z{+Pe_>mR?#kF)#z{ogb5f8W!O+W(HfeSQD?@P98>+86(t{r}1Gf4}_yzNr7b^8Md= z@|A_Z?_B?T>wfL4_Wl2FH!|APd$4^twf^6;tIO-+f?sE!{l#AQsQ%sZ{~?c0|4FxF zN>Q%6EpH#c_H%pW{~1MkF>n6zvo_m`{`t=nx$@e7B|G-r{{yRW~sB!q>H>iW8W-^Dmp6JVSd)- z<)sDY3kvg2XzUWI-{E97ZQcEd`s#n5R)3u({6H~vpGb9E>$Uv29hKR8Xh)VBG=)3UJua+sT z?0?XS1De(8e`co7>$Ex>J2zSUM$w0Jp{r$|2+f{xsHRoN*26Ppz2tqiC&{aq)?Tky zayY!1gX7}e?KXlvyVzBlmn29kE?MiN-kN0jZA;*K-ffRv4;(7t-Nxy5>CnUvt4&$v zZFmr6@Xzzhq;0WohOH0fJJPz={SiJm?|8A5fT4nnZn4`ZGeP!)cBx5AiUp24ZuvAb zdYSJ_i?q<1ny2+Hg2lWHJLmr~@BU}MX`N)~pZfKWRsMe#^gQ&&_jy_Q4dpr2eRs9G z-j!{x=($)PC!~7yD}U^*!{=C!O*&P)+)S#Iem~`CBVRo5aMGHr~;!o;$gG zviFiXpZwNNa9^WxW6D*7Bm1&eCR-jqc8X6UZ$omAkn5zzxthYO8Zr+4f8uku&1PCd zS=P(8$KUtF)bq&mO*><0@5a1>-_iN@!jv7Zn>+X2{q`YHQT(-jqKvmv)e^of>SY4A zQv;v1`AMhDWV&y&$L-lkCH{+%W!K|m-gGew{-6JM)^(dnv*#+lH1tYuF1>WY`trhw zdsv;M4%Z6BD)=uu`B<|g^t6){Lv4k``^`BUex7A~tIo4vs>{Oqd1hxcGoQKNWqi9~ z#qt%mKIv>&tT(%IPGVx(ja`1?|HRb-J8{${ki|{vEMg7-({Fl_uqS3 zYN+<9`U_lIKkI9r{I}Z~xV*i-e#R_w(<1$@6MBzROE#=2JhJ!x@uvbp_nay}b*t-c zyz^&L(Odrg3wlVFKsIbD~+TwGW>W{EVtxVUtJ z{jE74k8>IRUR&!^b$Ow)mGM5cef#SkKJpf~+hG=aR5w=Tcq^BL_6)0yEAJ%kpY>iw zbWzI=udkh5*OmqQEM0KMAzXOtRQ36%(k_+u)iXC&CwcC&imm-~uKuUqr$688m(Tt0 zwaaMR|J5Pi?fV}7%&))jj_V0&aXEwI-FSDaZc&R)upG+4IHZO*l;v!R2mhT|Emkl z;M@M&H&Lgs-mP#&%hbakwx3O0fAYB5JSAoGR$j%KN8C*2I5A5zt^E8mWx4W(oj+`) z9&zTR`F)(ibV*KV|J%peGi07x9prEe;^$0QXZxabduI8JnNKJB7|e|Gy!xs0tcO6S z_aqJz&LyI*9r<|&m(1o}=Ap24+N1xi+4}2!kJ;@zyUncL;b?NbyHF?(>|Cn()+qSgAwRu(Ct1D6Zl~X_0KbyD1`=vsX|Ai{WkM2PVp7&H+ zz8_Y+D>mbgWPZcWIiFMZY^axs%CUU%Y*ONu8PZ2vJA0n*b19$D^qEInXTzDjk1O|j z)L&qJu*`kk%zKMZKC}3<*=cXstL0}m?VegOKP79k(q!4fhf61Hd|vd<A#t{*{zBq+jZfZe6JFLk&rt6;eDRrD9pi=#0gu;6+$fF7Z5Jk6XGa;6dUZ*SJZ%t7LlE zBlfc|mcJICR;P1S@7Jw^_CKfi9KFe5^FFvnSMlxUl()X81Wa=mv>K|uwEQL+w#Rnb z*%eb#65XFi3aP(S&fImsRmGoOpRJ^u!Qk#@H5XY&a1`mydGX{dIp-e6Z<{t_%OB~YZ$}@*`Yk81YtHfhOqYj>>g-5t03wRq~uX<30WJ(ucleo*;* zwA|v}*6Lat#uRt|6{3aP!}2e@<3D_C$v=@$v+SFfPrqQ9IsgBG<|ox2zgL&qs2C+)+`katoQxO3yi zgWKO6WacJyA37qo&@y9--V$A>r8^|IEuB~YUhdR15mv6`+kXt4EBe|c_v*QReW$YX z((A9BZdVkpFoyC9n;*Bn__vR_WB;E&zqD?gxoai4AV~e!k~npxh!1?)GLzDez5KRz z`w!OlW!IN~Zx9n$RCqdI#?{?_-^{gDY%_asT;)nn^Vr=Fi<@?PnUwztCIDU$Dd3is5H>_1e2`A<42TmnVE_ zVmPnp*ejd+xG#H&`)8*b`_!qd?~+1)$wnN$;mpEnAO$o94XAZk^EZdU!&;T{)DM6bqCk@g>V_{Y1zxc`IbpQsQ&(ib8S6#lhaPDuFl+FFOT~{EG;(I;-`o86K*pm*FW3Bd_~XP&m#LGE z{Rk+SwcKyww^b#5Tjobr6&S7SIL#n8*V1{~bm6|qJ>rRTro?33_bd=F-+wBS=e?Ge z;Np{paKRrQhEdEnc-v>)G&9NIb2SD?G-RNq5> z_KeO|fg$RCle%TOc#^NA2RNxU>FP@SdQ_=PN{TY2UMB$(XIu=B{^ExXMn z;lsA1KJaLiuFy`-D_ja14qD6+VJk&;bQ~AD;HzRRQ1jTx_m0f5fK#2@nHe59OL%ZU z^>B)`+}b~Z-7u+WmAvq^pNR!4byEswzON{iS=938qsKzmSG@rT!u4z#AMTs{z1}Ep zz7E4nrg#5m?6ML2f6+wycfI2L6Pv|-ED~3-9bS^YfWtTvxgN z=C9Skua}i>GME0jbb`ec>F(qcNnyvWm9_uyb6cI**ZRiGMWe88_ezf>C^9PsbG zu(qw^VNu+(l&E^2ywEi|A1kg;oYTjY>iCVk2K#K zhZbKIi{m^Qx$H+n#qGLJ4_@7Bui)SFR5WLn=E1__{ELLt!@sp0Nf9Vt6x+VczkJr+ zz~z%QW@g$i_|Rlv>tUR47`sQ#?&_Yud(T=gpFXc@Rp0r7xtjB`&EIHx^juI>!4mb-hh-f!NSubV!d<%zs*9QtGJ9_E}cjb=Np^0jT9A|
8nw4 z!YLMht)2IuEXtMl+j`ze>*Sk5IVF!}MT`FZ`LgYt>TPXH{}Zi`s+o2?o*S}^Y17~O z%|C=#?Egl;kO*emV#Qi{nZteE(%t18uVU467S1e~{%iG}jgu#3mYn=vbbM9Xtf!G| zVHdfLA6aDxyZO&_oGJ2krS&ZqoQpl-sTqO{e$pOqW~ocKxaysg3nz-;ZS%POZ9jtm~{sp2m?mQyLYr z%lzWlQsny#9xR(KaIiU0aZi)xqN!KB=2jQEL{188%yz!Hgk!0s*rUTA-fV5iVPebh zixZq)bWrrh0R-4%aS;w@@w*pm*8aqIOX@`Z*>eM4eVelLj_}==CtWv091`Scy(TE} z=Z;+yA zdWSs~@5w(pYxt%6q+X@Y%K2yCw7qxT)g!R3z$ofw$G^Khn)XWd0hV*i-sn#BdsvpW z?)V^y1l)g>HD5A?EcnY3n=L{p7(8S8iJ zsf8b&?s}?xO84!KyDjhO^C)hjUx=ugP>JE&N33wzC zY_(~}*OF+X+~OEJpAS16{Xb2Z?{-A`=*NGNn-~^xx}4UK(rGAqdF4ah{6*Kcon)H0 z**?GUy?kJt+M~}q4VSuc6s=@m8qw2dQt}tM}{a z>+71fiJ5CIsfwAia`P4)^JfBp6MQuCjZ8+y50c$>nfem~XLxmZ(Pc|TXw@xMP6kLtdE;U~!d z@nn;IoAy~Xk-Jhmb$%#+4m$s=xT*Z))SwM>_B!4^IziN#UFVJXHNBXw*>@)9dJCtz z-ifJy*!1B7Lz%|5Agl5@QAX2zQf|8&zUTNK`GuR?!Ty}ltT>r7y+2pWNC|wDO%t2R ty-P6$W_+)w?oav`J}oRv{@MTds-nA!6j67x`f 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 WV@Cva`~Bztj4D6Ov>9ITG5`ST$-fH# diff --git a/testing/make-archives b/testing/make-archives index eb3f3af8..10f40a3a 100755 --- a/testing/make-archives +++ b/testing/make-archives @@ -16,8 +16,8 @@ from collections.abc import Sequence REPOS = ( - ('rbenv', 'https://github.com/rbenv/rbenv', '38e1fbb'), - ('ruby-build', 'https://github.com/rbenv/ruby-build', 'ed384c8'), + ('rbenv', 'https://github.com/rbenv/rbenv', '10e96bfc'), + ('ruby-build', 'https://github.com/rbenv/ruby-build', '447468b1'), ( 'ruby-download', 'https://github.com/garnieretienne/rvm-download', From 8bbfcf1f82ed7d1970e21a9c0323030805fdba3f Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 8 Nov 2025 13:16:33 -0500 Subject: [PATCH 10/29] remove redundant system spaces test `test_args_with_spaces_and_quotes` also covers this behaviour --- .../system_hook_with_spaces_repo/.pre-commit-hooks.yaml | 5 ----- tests/repository_test.py | 7 ------- 2 files changed, 12 deletions(-) delete mode 100644 testing/resources/system_hook_with_spaces_repo/.pre-commit-hooks.yaml diff --git a/testing/resources/system_hook_with_spaces_repo/.pre-commit-hooks.yaml b/testing/resources/system_hook_with_spaces_repo/.pre-commit-hooks.yaml deleted file mode 100644 index b2c347c1..00000000 --- a/testing/resources/system_hook_with_spaces_repo/.pre-commit-hooks.yaml +++ /dev/null @@ -1,5 +0,0 @@ -- id: system-hook-with-spaces - name: System hook with spaces - entry: bash -c 'echo "Hello World"' - language: system - files: \.sh$ diff --git a/tests/repository_test.py b/tests/repository_test.py index b54c910d..f1559301 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -80,13 +80,6 @@ def _test_hook_repo( assert out == expected -def test_system_hook_with_spaces(tempdir_factory, store): - _test_hook_repo( - tempdir_factory, store, 'system_hook_with_spaces_repo', - 'system-hook-with-spaces', [os.devnull], b'Hello World\n', - ) - - def test_missing_executable(tempdir_factory, store): _test_hook_repo( tempdir_factory, store, 'not_found_exe', From 95eec7500464500d2ca0cc13d0986000508830e5 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 8 Nov 2025 13:33:50 -0500 Subject: [PATCH 11/29] rm python3_hooks_repo --- .pre-commit-config.yaml | 2 +- .../resources/python3_hooks_repo/.pre-commit-hooks.yaml | 6 ------ testing/resources/python3_hooks_repo/py3_hook.py | 8 -------- testing/resources/python3_hooks_repo/setup.py | 8 -------- 4 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 testing/resources/python3_hooks_repo/.pre-commit-hooks.yaml delete mode 100644 testing/resources/python3_hooks_repo/py3_hook.py delete mode 100644 testing/resources/python3_hooks_repo/setup.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b1623a64..fa077365 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: rev: v3.16.0 hooks: - id: reorder-python-imports - exclude: ^(pre_commit/resources/|testing/resources/python3_hooks_repo/) + exclude: ^pre_commit/resources/ args: [--py310-plus, --add-import, 'from __future__ import annotations'] - repo: https://github.com/asottile/add-trailing-comma rev: v4.0.0 diff --git a/testing/resources/python3_hooks_repo/.pre-commit-hooks.yaml b/testing/resources/python3_hooks_repo/.pre-commit-hooks.yaml deleted file mode 100644 index 2c237009..00000000 --- a/testing/resources/python3_hooks_repo/.pre-commit-hooks.yaml +++ /dev/null @@ -1,6 +0,0 @@ -- id: python3-hook - name: Python 3 Hook - entry: python3-hook - language: python - language_version: python3 - files: \.py$ diff --git a/testing/resources/python3_hooks_repo/py3_hook.py b/testing/resources/python3_hooks_repo/py3_hook.py deleted file mode 100644 index 8c9cda4c..00000000 --- a/testing/resources/python3_hooks_repo/py3_hook.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - - -def main(): - print(sys.version_info[0]) - print(repr(sys.argv[1:])) - print('Hello World') - return 0 diff --git a/testing/resources/python3_hooks_repo/setup.py b/testing/resources/python3_hooks_repo/setup.py deleted file mode 100644 index 9125dc1d..00000000 --- a/testing/resources/python3_hooks_repo/setup.py +++ /dev/null @@ -1,8 +0,0 @@ -from setuptools import setup - -setup( - name='python3_hook', - version='0.0.0', - py_modules=['py3_hook'], - entry_points={'console_scripts': ['python3-hook = py3_hook:main']}, -) From aa2961c122b4aa834c77e612232c154f9439c388 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 8 Nov 2025 14:31:11 -0500 Subject: [PATCH 12/29] fix missing context in error for stages --- pre_commit/clientlib.py | 9 +++++---- tests/clientlib_test.py | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index c0f736d9..51514bd3 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -116,11 +116,12 @@ class StagesMigrationNoDefault(NamedTuple): if self.key not in dct: return - val = dct[self.key] - cfgv.check_array(cfgv.check_any)(val) + with cfgv.validate_context(f'At key: {self.key}'): + val = dct[self.key] + cfgv.check_array(cfgv.check_any)(val) - val = [transform_stage(v) for v in val] - cfgv.check_array(cfgv.check_one_of(STAGES))(val) + val = [transform_stage(v) for v in val] + cfgv.check_array(cfgv.check_one_of(STAGES))(val) def apply_default(self, dct: dict[str, Any]) -> None: if self.key not in dct: diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index 7aa84af0..2251abc4 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -309,6 +309,27 @@ def test_validate_optional_sensible_regex_at_top_level(caplog, regex, warning): assert caplog.record_tuples == [('pre_commit', logging.WARNING, warning)] +def test_invalid_stages_error(): + cfg = {'repos': [sample_local_config()]} + cfg['repos'][0]['hooks'][0]['stages'] = ['invalid'] + + with pytest.raises(cfgv.ValidationError) as excinfo: + cfgv.validate(cfg, CONFIG_SCHEMA) + + assert str(excinfo.value) == ( + '\n' + '==> At Config()\n' + '==> At key: repos\n' + "==> At Repository(repo='local')\n" + '==> At key: hooks\n' + "==> At Hook(id='do_not_commit')\n" + # this line was missing due to the custom validator + '==> At key: stages\n' + '==> At index 0\n' + "=====> Expected one of commit-msg, manual, post-checkout, post-commit, post-merge, post-rewrite, pre-commit, pre-merge-commit, pre-push, pre-rebase, prepare-commit-msg but got: 'invalid'" # noqa: E501 + ) + + def test_warning_for_deprecated_stages(caplog): config_obj = sample_local_config() config_obj['hooks'][0]['stages'] = ['commit', 'push'] From 725acc969a28a6bc9a7e2260f035426bc932e8da Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 8 Nov 2025 13:13:18 -0500 Subject: [PATCH 13/29] rename system and script languages to unsupported / unsupported_script --- pre_commit/all_languages.py | 8 ++-- pre_commit/clientlib.py | 47 +++++++++++++++++-- .../languages/{system.py => unsupported.py} | 0 .../{script.py => unsupported_script.py} | 0 tests/clientlib_test.py | 20 ++++++++ tests/languages/system_test.py | 9 ---- ...ipt_test.py => unsupported_script_test.py} | 6 +-- tests/languages/unsupported_test.py | 10 ++++ tests/repository_test.py | 14 +++--- 9 files changed, 88 insertions(+), 26 deletions(-) rename pre_commit/languages/{system.py => unsupported.py} (100%) rename pre_commit/languages/{script.py => unsupported_script.py} (100%) delete mode 100644 tests/languages/system_test.py rename tests/languages/{script_test.py => unsupported_script_test.py} (63%) create mode 100644 tests/languages/unsupported_test.py diff --git a/pre_commit/all_languages.py b/pre_commit/all_languages.py index ba569c37..166bc167 100644 --- a/pre_commit/all_languages.py +++ b/pre_commit/all_languages.py @@ -19,9 +19,9 @@ from pre_commit.languages import python from pre_commit.languages import r from pre_commit.languages import ruby from pre_commit.languages import rust -from pre_commit.languages import script from pre_commit.languages import swift -from pre_commit.languages import system +from pre_commit.languages import unsupported +from pre_commit.languages import unsupported_script languages: dict[str, Language] = { @@ -43,8 +43,8 @@ languages: dict[str, Language] = { 'r': r, 'ruby': ruby, 'rust': rust, - 'script': script, 'swift': swift, - 'system': system, + 'unsupported': unsupported, + 'unsupported_script': unsupported_script, } language_names = sorted(languages) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 51514bd3..eb0fd4d6 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -6,6 +6,7 @@ import os.path import re import shlex import sys +from collections.abc import Callable from collections.abc import Sequence from typing import Any from typing import NamedTuple @@ -190,6 +191,42 @@ class DeprecatedDefaultStagesWarning(NamedTuple): raise NotImplementedError +def _translate_language(name: str) -> str: + return { + 'system': 'unsupported', + 'script': 'unsupported_script', + }.get(name, name) + + +class LanguageMigration(NamedTuple): # remove + key: str + check_fn: Callable[[object], None] + + def check(self, dct: dict[str, Any]) -> None: + if self.key not in dct: + return + + with cfgv.validate_context(f'At key: {self.key}'): + self.check_fn(_translate_language(dct[self.key])) + + def apply_default(self, dct: dict[str, Any]) -> None: + if self.key not in dct: + return + + dct[self.key] = _translate_language(dct[self.key]) + + def remove_default(self, dct: dict[str, Any]) -> None: + raise NotImplementedError + + +class LanguageMigrationRequired(LanguageMigration): # replace with Required + def check(self, dct: dict[str, Any]) -> None: + if self.key not in dct: + raise cfgv.ValidationError(f'Missing required key: {self.key}') + + super().check(dct) + + MANIFEST_HOOK_DICT = cfgv.Map( 'Hook', 'id', @@ -203,7 +240,7 @@ MANIFEST_HOOK_DICT = cfgv.Map( cfgv.Required('id', cfgv.check_string), cfgv.Required('name', cfgv.check_string), cfgv.Required('entry', cfgv.check_string), - cfgv.Required('language', cfgv.check_one_of(language_names)), + LanguageMigrationRequired('language', cfgv.check_one_of(language_names)), cfgv.Optional('alias', cfgv.check_string, ''), cfgv.Optional('files', check_string_regex, ''), @@ -368,8 +405,10 @@ META_HOOK_DICT = cfgv.Map( 'Hook', 'id', cfgv.Required('id', cfgv.check_string), cfgv.Required('id', cfgv.check_one_of(tuple(k for k, _ in _meta))), - # language must be system - cfgv.Optional('language', cfgv.check_one_of({'system'}), 'system'), + # language must be `unsupported` + cfgv.Optional( + 'language', cfgv.check_one_of({'unsupported'}), 'unsupported', + ), # entry cannot be overridden NotAllowed('entry', cfgv.check_any), *( @@ -402,8 +441,10 @@ CONFIG_HOOK_DICT = cfgv.Map( for item in MANIFEST_HOOK_DICT.items if item.key != 'id' if item.key != 'stages' + if item.key != 'language' # remove ), StagesMigrationNoDefault('stages', []), + LanguageMigration('language', cfgv.check_one_of(language_names)), # remove *_COMMON_HOOK_WARNINGS, ) LOCAL_HOOK_DICT = cfgv.Map( diff --git a/pre_commit/languages/system.py b/pre_commit/languages/unsupported.py similarity index 100% rename from pre_commit/languages/system.py rename to pre_commit/languages/unsupported.py diff --git a/pre_commit/languages/script.py b/pre_commit/languages/unsupported_script.py similarity index 100% rename from pre_commit/languages/script.py rename to pre_commit/languages/unsupported_script.py diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index 2251abc4..93c698f7 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -380,6 +380,26 @@ def test_no_warning_for_non_deprecated_default_stages(caplog): assert caplog.record_tuples == [] +def test_unsupported_language_migration(): + cfg = {'repos': [sample_local_config(), sample_local_config()]} + cfg['repos'][0]['hooks'][0]['language'] = 'system' + cfg['repos'][1]['hooks'][0]['language'] = 'script' + + cfgv.validate(cfg, CONFIG_SCHEMA) + ret = cfgv.apply_defaults(cfg, CONFIG_SCHEMA) + + assert ret['repos'][0]['hooks'][0]['language'] == 'unsupported' + assert ret['repos'][1]['hooks'][0]['language'] == 'unsupported_script' + + +def test_unsupported_language_migration_language_required(): + cfg = {'repos': [sample_local_config()]} + del cfg['repos'][0]['hooks'][0]['language'] + + with pytest.raises(cfgv.ValidationError): + cfgv.validate(cfg, CONFIG_SCHEMA) + + @pytest.mark.parametrize( 'manifest_obj', ( diff --git a/tests/languages/system_test.py b/tests/languages/system_test.py deleted file mode 100644 index dcd9cf1e..00000000 --- a/tests/languages/system_test.py +++ /dev/null @@ -1,9 +0,0 @@ -from __future__ import annotations - -from pre_commit.languages import system -from testing.language_helpers import run_language - - -def test_system_language(tmp_path): - expected = (0, b'hello hello world\n') - assert run_language(tmp_path, system, 'echo hello hello world') == expected diff --git a/tests/languages/script_test.py b/tests/languages/unsupported_script_test.py similarity index 63% rename from tests/languages/script_test.py rename to tests/languages/unsupported_script_test.py index a02f615a..b15b67e7 100644 --- a/tests/languages/script_test.py +++ b/tests/languages/unsupported_script_test.py @@ -1,14 +1,14 @@ from __future__ import annotations -from pre_commit.languages import script +from pre_commit.languages import unsupported_script from pre_commit.util import make_executable from testing.language_helpers import run_language -def test_script_language(tmp_path): +def test_unsupported_script_language(tmp_path): exe = tmp_path.joinpath('main') exe.write_text('#!/usr/bin/env bash\necho hello hello world\n') make_executable(exe) expected = (0, b'hello hello world\n') - assert run_language(tmp_path, script, 'main') == expected + assert run_language(tmp_path, unsupported_script, 'main') == expected diff --git a/tests/languages/unsupported_test.py b/tests/languages/unsupported_test.py new file mode 100644 index 00000000..7f8461e0 --- /dev/null +++ b/tests/languages/unsupported_test.py @@ -0,0 +1,10 @@ +from __future__ import annotations + +from pre_commit.languages import unsupported +from testing.language_helpers import run_language + + +def test_unsupported_language(tmp_path): + expected = (0, b'hello hello world\n') + ret = run_language(tmp_path, unsupported, 'echo hello hello world') + assert ret == expected diff --git a/tests/repository_test.py b/tests/repository_test.py index f1559301..b1c7a002 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -17,7 +17,7 @@ from pre_commit.clientlib import CONFIG_SCHEMA from pre_commit.clientlib import load_manifest from pre_commit.hook import Hook from pre_commit.languages import python -from pre_commit.languages import system +from pre_commit.languages import unsupported from pre_commit.prefix import Prefix from pre_commit.repository import _hook_installed from pre_commit.repository import all_hooks @@ -424,7 +424,7 @@ def test_manifest_hooks(tempdir_factory, store): exclude_types=[], files='', id='bash_hook', - language='script', + language='unsupported_script', language_version='default', log_file='', minimum_pre_commit_version='0', @@ -457,7 +457,7 @@ def test_non_installable_hook_error_for_language_version(store, caplog): 'hooks': [{ 'id': 'system-hook', 'name': 'system-hook', - 'language': 'system', + 'language': 'unsupported', 'entry': 'python3 -c "import sys; print(sys.version)"', 'language_version': 'python3.10', }], @@ -469,7 +469,7 @@ def test_non_installable_hook_error_for_language_version(store, caplog): msg, = caplog.messages assert msg == ( 'The hook `system-hook` specifies `language_version` but is using ' - 'language `system` which does not install an environment. ' + 'language `unsupported` which does not install an environment. ' 'Perhaps you meant to use a specific language?' ) @@ -480,7 +480,7 @@ def test_non_installable_hook_error_for_additional_dependencies(store, caplog): 'hooks': [{ 'id': 'system-hook', 'name': 'system-hook', - 'language': 'system', + 'language': 'unsupported', 'entry': 'python3 -c "import sys; print(sys.version)"', 'additional_dependencies': ['astpretty'], }], @@ -492,14 +492,14 @@ def test_non_installable_hook_error_for_additional_dependencies(store, caplog): msg, = caplog.messages assert msg == ( 'The hook `system-hook` specifies `additional_dependencies` but is ' - 'using language `system` which does not install an environment. ' + 'using language `unsupported` which does not install an environment. ' 'Perhaps you meant to use a specific language?' ) def test_args_with_spaces_and_quotes(tmp_path): ret = run_language( - tmp_path, system, + tmp_path, unsupported, f"{shlex.quote(sys.executable)} -c 'import sys; print(sys.argv[1:])'", ('i have spaces', 'and"\'quotes', '$and !this'), ) From f80801d75a429d5eafa1d87e9f88f73b108d1890 Mon Sep 17 00:00:00 2001 From: Radek Hrbacek Date: Fri, 5 Sep 2025 15:01:10 +0200 Subject: [PATCH 14/29] Fix docker-in-docker detection for cgroups v2 --- pre_commit/languages/docker.py | 42 +++--- tests/languages/docker_test.py | 230 +++++++++++++++++++++++++-------- 2 files changed, 202 insertions(+), 70 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index d5ce1eb7..7f45ac86 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -1,9 +1,11 @@ from __future__ import annotations +import contextlib import functools import hashlib import json import os +import re from collections.abc import Sequence from pre_commit import lang_base @@ -17,31 +19,33 @@ get_default_version = lang_base.basic_get_default_version health_check = lang_base.basic_health_check in_env = lang_base.no_env # no special environment for docker - -def _is_in_docker() -> bool: - try: - with open('/proc/1/cgroup', 'rb') as f: - return b'docker' in f.read() - except FileNotFoundError: - return False +_HOSTNAME_MOUNT_RE = re.compile( + rb""" + /containers + (?:/overlay-containers)? + /([a-z0-9]{64}) + (?:/userdata)? + /hostname + """, + re.VERBOSE, +) -def _get_container_id() -> str: - # It's assumed that we already check /proc/1/cgroup in _is_in_docker. The - # cpuset cgroup controller existed since cgroups were introduced so this - # way of getting the container ID is pretty reliable. - with open('/proc/1/cgroup', 'rb') as f: - for line in f.readlines(): - if line.split(b':')[1] == b'cpuset': - return os.path.basename(line.split(b':')[2]).strip().decode() - raise RuntimeError('Failed to find the container ID in /proc/1/cgroup.') +def _get_container_id() -> str | None: + with contextlib.suppress(FileNotFoundError): + with open('/proc/1/mountinfo', 'rb') as f: + for line in f: + m = _HOSTNAME_MOUNT_RE.search(line) + if m: + return m[1].decode() + + return None def _get_docker_path(path: str) -> str: - if not _is_in_docker(): - return path - container_id = _get_container_id() + if container_id is None: + return path try: _, out, _ = cmd_output_b('docker', 'inspect', container_id) diff --git a/tests/languages/docker_test.py b/tests/languages/docker_test.py index b830439a..e269976f 100644 --- a/tests/languages/docker_test.py +++ b/tests/languages/docker_test.py @@ -14,40 +14,173 @@ from pre_commit.util import CalledProcessError from testing.language_helpers import run_language from testing.util import xfailif_windows -DOCKER_CGROUP_EXAMPLE = b'''\ -12:hugetlb:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -11:blkio:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -10:freezer:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -9:cpu,cpuacct:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -8:pids:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -7:rdma:/ -6:net_cls,net_prio:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -5:cpuset:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -4:devices:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -3:memory:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -2:perf_event:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -1:name=systemd:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 -0::/system.slice/containerd.service +DOCKER_CGROUPS_V1_MOUNTINFO_EXAMPLE = b'''\ +759 717 0:52 / / rw,relatime master:300 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/PCPE5P5IVGM7CFCPJR353N3ONK:/var/lib/docker/overlay2/l/EQFSDHFAJ333VEMEJD4ZTRIZCB,upperdir=/var/lib/docker/overlay2/0d9f6bf186030d796505b87d6daa92297355e47641e283d3c09d83a7f221e462/diff,workdir=/var/lib/docker/overlay2/0d9f6bf186030d796505b87d6daa92297355e47641e283d3c09d83a7f221e462/work +760 759 0:58 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +761 759 0:59 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +762 761 0:60 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 +763 759 0:61 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro +764 763 0:62 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,mode=755,inode64 +765 764 0:29 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/systemd ro,nosuid,nodev,noexec,relatime master:11 - cgroup cgroup rw,xattr,name=systemd +766 764 0:32 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/rdma ro,nosuid,nodev,noexec,relatime master:15 - cgroup cgroup rw,rdma +767 764 0:33 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime master:16 - cgroup cgroup rw,cpu,cpuacct +768 764 0:34 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/cpuset ro,nosuid,nodev,noexec,relatime master:17 - cgroup cgroup rw,cpuset +769 764 0:35 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/pids ro,nosuid,nodev,noexec,relatime master:18 - cgroup cgroup rw,pids +770 764 0:36 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime master:19 - cgroup cgroup rw,memory +771 764 0:37 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/perf_event ro,nosuid,nodev,noexec,relatime master:20 - cgroup cgroup rw,perf_event +772 764 0:38 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/net_cls,net_prio ro,nosuid,nodev,noexec,relatime master:21 - cgroup cgroup rw,net_cls,net_prio +773 764 0:39 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/blkio ro,nosuid,nodev,noexec,relatime master:22 - cgroup cgroup rw,blkio +774 764 0:40 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/misc ro,nosuid,nodev,noexec,relatime master:23 - cgroup cgroup rw,misc +775 764 0:41 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/hugetlb ro,nosuid,nodev,noexec,relatime master:24 - cgroup cgroup rw,hugetlb +776 764 0:42 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/devices ro,nosuid,nodev,noexec,relatime master:25 - cgroup cgroup rw,devices +777 764 0:43 /docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7 /sys/fs/cgroup/freezer ro,nosuid,nodev,noexec,relatime master:26 - cgroup cgroup rw,freezer +778 761 0:57 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw +779 761 0:63 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k,inode64 +780 759 8:5 /var/lib/docker/containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/sda5 rw,errors=remount-ro +781 759 8:5 /var/lib/docker/containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/hostname /etc/hostname rw,relatime - ext4 /dev/sda5 rw,errors=remount-ro +782 759 8:5 /var/lib/docker/containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/hosts /etc/hosts rw,relatime - ext4 /dev/sda5 rw,errors=remount-ro +718 761 0:60 /0 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 +719 760 0:58 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +720 760 0:58 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +721 760 0:58 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +722 760 0:58 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +723 760 0:58 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +724 760 0:64 / /proc/asound ro,relatime - tmpfs tmpfs ro,inode64 +725 760 0:65 / /proc/acpi ro,relatime - tmpfs tmpfs ro,inode64 +726 760 0:59 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +727 760 0:59 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +728 760 0:59 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +729 760 0:66 / /proc/scsi ro,relatime - tmpfs tmpfs ro,inode64 +730 763 0:67 / /sys/firmware ro,relatime - tmpfs tmpfs ro,inode64 +731 763 0:68 / /sys/devices/virtual/powercap ro,relatime - tmpfs tmpfs ro,inode64 +''' # noqa: E501 + +DOCKER_CGROUPS_V2_MOUNTINFO_EXAMPLE = b'''\ +721 386 0:45 / / rw,relatime master:218 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/QHZ7OM7P4AQD3XLG274ZPWAJCV:/var/lib/docker/overlay2/l/5RFG6SZWVGOG2NKEYXJDQCQYX5,upperdir=/var/lib/docker/overlay2/e4ad859fc5d4791932b9b976052f01fb0063e01de3cef916e40ae2121f6a166e/diff,workdir=/var/lib/docker/overlay2/e4ad859fc5d4791932b9b976052f01fb0063e01de3cef916e40ae2121f6a166e/work,nouserxattr +722 721 0:48 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +723 721 0:50 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +724 723 0:51 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 +725 721 0:52 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro +726 725 0:26 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw,nsdelegate,memory_recursiveprot +727 723 0:47 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw +728 723 0:53 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k,inode64 +729 721 8:3 /var/lib/docker/containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/sda3 rw,errors=remount-ro +730 721 8:3 /var/lib/docker/containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/hostname /etc/hostname rw,relatime - ext4 /dev/sda3 rw,errors=remount-ro +731 721 8:3 /var/lib/docker/containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/hosts /etc/hosts rw,relatime - ext4 /dev/sda3 rw,errors=remount-ro +387 723 0:51 /0 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 +388 722 0:48 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +389 722 0:48 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +525 722 0:48 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +526 722 0:48 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +571 722 0:48 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +572 722 0:57 / /proc/asound ro,relatime - tmpfs tmpfs ro,inode64 +575 722 0:58 / /proc/acpi ro,relatime - tmpfs tmpfs ro,inode64 +576 722 0:50 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +577 722 0:50 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +578 722 0:50 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 +579 722 0:59 / /proc/scsi ro,relatime - tmpfs tmpfs ro,inode64 +580 725 0:60 / /sys/firmware ro,relatime - tmpfs tmpfs ro,inode64 +''' # noqa: E501 + +PODMAN_CGROUPS_V1_MOUNTINFO_EXAMPLE = b'''\ +1200 915 0:57 / / rw,relatime - overlay overlay rw,lowerdir=/home/asottile/.local/share/containers/storage/overlay/l/ZWAU3VY3ZHABQJRBUAFPBX7R5D,upperdir=/home/asottile/.local/share/containers/storage/overlay/72504ef163fda63838930450553b7306412ccad139a007626732b3dc43af5200/diff,workdir=/home/asottile/.local/share/containers/storage/overlay/72504ef163fda63838930450553b7306412ccad139a007626732b3dc43af5200/work,volatile,userxattr +1204 1200 0:62 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +1205 1200 0:63 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,uid=1000,gid=1000,inode64 +1206 1200 0:64 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs rw +1207 1205 0:65 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=100004,mode=620,ptmxmode=666 +1208 1205 0:61 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw +1209 1200 0:53 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/.containerenv /run/.containerenv rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=814036k,mode=700,uid=1000,gid=1000,inode64 +1210 1200 0:53 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/resolv.conf /etc/resolv.conf rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=814036k,mode=700,uid=1000,gid=1000,inode64 +1211 1200 0:53 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/hosts /etc/hosts rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=814036k,mode=700,uid=1000,gid=1000,inode64 +1212 1205 0:56 / /dev/shm rw,relatime - tmpfs shm rw,size=64000k,uid=1000,gid=1000,inode64 +1213 1200 0:53 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/hostname /etc/hostname rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=814036k,mode=700,uid=1000,gid=1000,inode64 +1214 1206 0:66 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime - tmpfs cgroup rw,size=1024k,uid=1000,gid=1000,inode64 +1215 1214 0:43 / /sys/fs/cgroup/freezer ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,freezer +1216 1214 0:42 /user.slice /sys/fs/cgroup/devices ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,devices +1217 1214 0:41 / /sys/fs/cgroup/hugetlb ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,hugetlb +1218 1214 0:40 / /sys/fs/cgroup/misc ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,misc +1219 1214 0:39 / /sys/fs/cgroup/blkio ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,blkio +1220 1214 0:38 / /sys/fs/cgroup/net_cls,net_prio ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,net_cls,net_prio +1221 1214 0:37 / /sys/fs/cgroup/perf_event ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,perf_event +1222 1214 0:36 /user.slice/user-1000.slice/user@1000.service /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,memory +1223 1214 0:35 /user.slice/user-1000.slice/user@1000.service /sys/fs/cgroup/pids ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,pids +1224 1214 0:34 / /sys/fs/cgroup/cpuset ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,cpuset +1225 1214 0:33 / /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,cpu,cpuacct +1226 1214 0:32 / /sys/fs/cgroup/rdma ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,rdma +1227 1214 0:29 /user.slice/user-1000.slice/user@1000.service/apps.slice/apps-org.gnome.Terminal.slice/vte-spawn-0c50448e-b395-4d76-8b92-379f16e5066f.scope /sys/fs/cgroup/systemd ro,nosuid,nodev,noexec,relatime - cgroup cgroup rw,xattr,name=systemd +1228 1205 0:5 /null /dev/null rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1229 1205 0:5 /zero /dev/zero rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1230 1205 0:5 /full /dev/full rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1231 1205 0:5 /tty /dev/tty rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1232 1205 0:5 /random /dev/random rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1233 1205 0:5 /urandom /dev/urandom rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1234 1204 0:67 / /proc/acpi ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +1235 1204 0:5 /null /proc/kcore rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1236 1204 0:5 /null /proc/keys rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1237 1204 0:5 /null /proc/timer_list rw,nosuid,noexec,relatime - devtmpfs udev rw,size=4031656k,nr_inodes=1007914,mode=755,inode64 +1238 1204 0:68 / /proc/scsi ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +1239 1206 0:69 / /sys/firmware ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +1240 1206 0:70 / /sys/dev/block ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +1241 1204 0:62 /asound /proc/asound ro,relatime - proc proc rw +1242 1204 0:62 /bus /proc/bus ro,relatime - proc proc rw +1243 1204 0:62 /fs /proc/fs ro,relatime - proc proc rw +1244 1204 0:62 /irq /proc/irq ro,relatime - proc proc rw +1245 1204 0:62 /sys /proc/sys ro,relatime - proc proc rw +1256 1204 0:62 /sysrq-trigger /proc/sysrq-trigger ro,relatime - proc proc rw +916 1205 0:65 /0 /dev/console rw,relatime - devpts devpts rw,gid=100004,mode=620,ptmxmode=666 +''' # noqa: E501 + +PODMAN_CGROUPS_V2_MOUNTINFO_EXAMPLE = b'''\ +685 690 0:63 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/resolv.conf /etc/resolv.conf rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=1637624k,nr_inodes=409406,mode=700,uid=1000,gid=1000,inode64 +686 690 0:63 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/hosts /etc/hosts rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=1637624k,nr_inodes=409406,mode=700,uid=1000,gid=1000,inode64 +687 692 0:50 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=64000k,uid=1000,gid=1000,inode64 +688 690 0:63 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/.containerenv /run/.containerenv rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=1637624k,nr_inodes=409406,mode=700,uid=1000,gid=1000,inode64 +689 690 0:63 /containers/overlay-containers/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7/userdata/hostname /etc/hostname rw,nosuid,nodev,relatime - tmpfs tmpfs rw,size=1637624k,nr_inodes=409406,mode=700,uid=1000,gid=1000,inode64 +690 546 0:55 / / rw,relatime - overlay overlay rw,lowerdir=/home/asottile/.local/share/containers/storage/overlay/l/NPOHYOD3PI3YW6TQSGBOVOUSK6,upperdir=/home/asottile/.local/share/containers/storage/overlay/565c206fb79f876ffd5f069b8bd7a97fb5e47d5d07396b0c395a4ed6725d4a8e/diff,workdir=/home/asottile/.local/share/containers/storage/overlay/565c206fb79f876ffd5f069b8bd7a97fb5e47d5d07396b0c395a4ed6725d4a8e/work,redirect_dir=nofollow,uuid=on,volatile,userxattr +691 690 0:59 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +692 690 0:61 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,uid=1000,gid=1000,inode64 +693 690 0:62 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs rw +694 692 0:66 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=100004,mode=620,ptmxmode=666 +695 692 0:58 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw +696 693 0:28 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup2 rw,nsdelegate,memory_recursiveprot +698 692 0:6 /null /dev/null rw,nosuid,noexec,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +699 692 0:6 /zero /dev/zero rw,nosuid,noexec,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +700 692 0:6 /full /dev/full rw,nosuid,noexec,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +701 692 0:6 /tty /dev/tty rw,nosuid,noexec,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +702 692 0:6 /random /dev/random rw,nosuid,noexec,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +703 692 0:6 /urandom /dev/urandom rw,nosuid,noexec,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +704 691 0:67 / /proc/acpi ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +705 691 0:6 /null /proc/kcore ro,nosuid,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +706 691 0:6 /null /proc/keys ro,nosuid,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +707 691 0:6 /null /proc/latency_stats ro,nosuid,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +708 691 0:6 /null /proc/timer_list ro,nosuid,relatime - devtmpfs udev rw,size=8147812k,nr_inodes=2036953,mode=755,inode64 +709 691 0:68 / /proc/scsi ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +710 693 0:69 / /sys/firmware ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +711 693 0:70 / /sys/dev/block ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +712 693 0:71 / /sys/devices/virtual/powercap ro,relatime - tmpfs tmpfs rw,size=0k,uid=1000,gid=1000,inode64 +713 691 0:59 /asound /proc/asound ro,nosuid,nodev,noexec,relatime - proc proc rw +714 691 0:59 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +715 691 0:59 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +716 691 0:59 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +717 691 0:59 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +718 691 0:59 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +547 692 0:66 /0 /dev/console rw,relatime - devpts devpts rw,gid=100004,mode=620,ptmxmode=666 ''' # noqa: E501 # The ID should match the above cgroup example. CONTAINER_ID = 'c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7' # noqa: E501 -NON_DOCKER_CGROUP_EXAMPLE = b'''\ -12:perf_event:/ -11:hugetlb:/ -10:devices:/ -9:blkio:/ -8:rdma:/ -7:cpuset:/ -6:cpu,cpuacct:/ -5:freezer:/ -4:memory:/ -3:pids:/ -2:net_cls,net_prio:/ -1:name=systemd:/init.scope -0::/init.scope -''' +NON_DOCKER_MOUNTINFO_EXAMPLE = b'''\ +21 27 0:19 / /sys rw,nosuid,nodev,noexec,relatime shared:7 - sysfs sysfs rw +22 27 0:20 / /proc rw,nosuid,nodev,noexec,relatime shared:14 - proc proc rw +23 27 0:5 / /dev rw,nosuid,relatime shared:2 - devtmpfs udev rw,size=10219484k,nr_inodes=2554871,mode=755,inode64 +24 23 0:21 / /dev/pts rw,nosuid,noexec,relatime shared:3 - devpts devpts rw,gid=5,mode=620,ptmxmode=000 +25 27 0:22 / /run rw,nosuid,nodev,noexec,relatime shared:5 - tmpfs tmpfs rw,size=2047768k,mode=755,inode64 +27 1 8:2 / / rw,relatime shared:1 - ext4 /dev/sda2 rw,errors=remount-ro +28 21 0:6 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:8 - securityfs securityfs rw +29 23 0:24 / /dev/shm rw,nosuid,nodev shared:4 - tmpfs tmpfs rw,inode64 +30 25 0:25 / /run/lock rw,nosuid,nodev,noexec,relatime shared:6 - tmpfs tmpfs rw,size=5120k,inode64 +''' # noqa: E501 def test_docker_fallback_user(): @@ -99,9 +232,9 @@ def test_docker_user_non_rootless(info_ret): assert docker.get_docker_user() != () -def test_in_docker_no_file(): +def test_container_id_no_file(): with mock.patch.object(builtins, 'open', side_effect=FileNotFoundError): - assert docker._is_in_docker() is False + assert docker._get_container_id() is None def _mock_open(data): @@ -113,38 +246,33 @@ def _mock_open(data): ) -def test_in_docker_docker_in_file(): - with _mock_open(DOCKER_CGROUP_EXAMPLE): - assert docker._is_in_docker() is True - - -def test_in_docker_docker_not_in_file(): - with _mock_open(NON_DOCKER_CGROUP_EXAMPLE): - assert docker._is_in_docker() is False +def test_container_id_not_in_file(): + with _mock_open(NON_DOCKER_MOUNTINFO_EXAMPLE): + assert docker._get_container_id() is None def test_get_container_id(): - with _mock_open(DOCKER_CGROUP_EXAMPLE): + with _mock_open(DOCKER_CGROUPS_V1_MOUNTINFO_EXAMPLE): + assert docker._get_container_id() == CONTAINER_ID + with _mock_open(DOCKER_CGROUPS_V2_MOUNTINFO_EXAMPLE): + assert docker._get_container_id() == CONTAINER_ID + with _mock_open(PODMAN_CGROUPS_V1_MOUNTINFO_EXAMPLE): + assert docker._get_container_id() == CONTAINER_ID + with _mock_open(PODMAN_CGROUPS_V2_MOUNTINFO_EXAMPLE): assert docker._get_container_id() == CONTAINER_ID -def test_get_container_id_failure(): - with _mock_open(b''), pytest.raises(RuntimeError): - docker._get_container_id() - - def test_get_docker_path_not_in_docker_returns_same(): - with mock.patch.object(docker, '_is_in_docker', return_value=False): + with _mock_open(b''): assert docker._get_docker_path('abc') == 'abc' @pytest.fixture def in_docker(): - with mock.patch.object(docker, '_is_in_docker', return_value=True): - with mock.patch.object( - docker, '_get_container_id', return_value=CONTAINER_ID, - ): - yield + with mock.patch.object( + docker, '_get_container_id', return_value=CONTAINER_ID, + ): + yield def _linux_commonpath(): From 17cf8864737af2ce75c73839a0cdedc26ce50598 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 8 Nov 2025 16:11:43 -0500 Subject: [PATCH 15/29] v4.4.0 --- CHANGELOG.md | 28 ++++++++++++++++++++++++++-- setup.cfg | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42a63f78..b27af5e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,27 @@ +4.4.0 - 2025-11-08 +================== + +### Features +- Add `--fail-fast` option to `pre-commit run`. + - #3528 PR by @JulianMaurin. +- Upgrade `ruby-build` / `rbenv`. + - #3566 PR by @asottile. + - #3565 issue by @MRigal. +- Add `language: unsupported` / `language: unsupported_script` as aliases + for `language: system` / `language: script` (which will eventually be + deprecated). + - #3577 PR by @asottile. +- Add support docker-in-docker detection for cgroups v2. + - #3535 PR by @br-rhrbacek. + - #3360 issue by @JasonAlt. + +### Fixes +- Handle when docker gives `SecurityOptions: null`. + - #3537 PR by @asottile. + - #3514 issue by @jenstroeger. +- Fix error context for invalid `stages` in `.pre-commit-config.yaml`. + - #3576 PR by @asottile. + 4.3.0 - 2025-08-09 ================== @@ -71,7 +95,7 @@ - #3315 PR by @asottile. - #2732 issue by @asottile. -### Migrating +### Updating - `language: python_venv` has been removed -- use `language: python` instead. - #3320 PR by @asottile. - #2734 issue by @asottile. @@ -159,7 +183,7 @@ - Use `time.monotonic()` for more accurate hook timing. - #3024 PR by @adamchainz. -### Migrating +### Updating - Require npm 6.x+ for `language: node` hooks. - #2996 PR by @RoelAdriaans. - #1983 issue by @henryiii. diff --git a/setup.cfg b/setup.cfg index 17c3fe0e..be031c3e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 4.3.0 +version = 4.4.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From d5c273a2ba0c712659640e9487adb38bd7da68f6 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 9 Nov 2025 16:57:40 -0500 Subject: [PATCH 16/29] refactor gc into store this will make refactoring this easier later and limits the api surface of Store --- pre_commit/commands/gc.py | 82 +-------------------------------- pre_commit/store.py | 96 +++++++++++++++++++++++++++++++-------- tests/commands/gc_test.py | 9 ++-- tests/store_test.py | 25 +++++++--- 4 files changed, 101 insertions(+), 111 deletions(-) diff --git a/pre_commit/commands/gc.py b/pre_commit/commands/gc.py index 6892e097..d1941e4b 100644 --- a/pre_commit/commands/gc.py +++ b/pre_commit/commands/gc.py @@ -1,89 +1,9 @@ from __future__ import annotations -import os.path -from typing import Any - -import pre_commit.constants as C from pre_commit import output -from pre_commit.clientlib import InvalidConfigError -from pre_commit.clientlib import InvalidManifestError -from pre_commit.clientlib import load_config -from pre_commit.clientlib import load_manifest -from pre_commit.clientlib import LOCAL -from pre_commit.clientlib import META from pre_commit.store import Store -def _mark_used_repos( - store: Store, - all_repos: dict[tuple[str, str], str], - unused_repos: set[tuple[str, str]], - repo: dict[str, Any], -) -> None: - if repo['repo'] == META: - return - elif repo['repo'] == LOCAL: - for hook in repo['hooks']: - deps = hook.get('additional_dependencies') - unused_repos.discard(( - store.db_repo_name(repo['repo'], deps), C.LOCAL_REPO_VERSION, - )) - else: - key = (repo['repo'], repo['rev']) - path = all_repos.get(key) - # can't inspect manifest if it isn't cloned - if path is None: - return - - try: - manifest = load_manifest(os.path.join(path, C.MANIFEST_FILE)) - except InvalidManifestError: - return - else: - unused_repos.discard(key) - by_id = {hook['id']: hook for hook in manifest} - - for hook in repo['hooks']: - if hook['id'] not in by_id: - continue - - deps = hook.get( - 'additional_dependencies', - by_id[hook['id']]['additional_dependencies'], - ) - unused_repos.discard(( - store.db_repo_name(repo['repo'], deps), repo['rev'], - )) - - -def _gc_repos(store: Store) -> int: - configs = store.select_all_configs() - repos = store.select_all_repos() - - # delete config paths which do not exist - dead_configs = [p for p in configs if not os.path.exists(p)] - live_configs = [p for p in configs if os.path.exists(p)] - - all_repos = {(repo, ref): path for repo, ref, path in repos} - unused_repos = set(all_repos) - for config_path in live_configs: - try: - config = load_config(config_path) - except InvalidConfigError: - dead_configs.append(config_path) - continue - else: - for repo in config['repos']: - _mark_used_repos(store, all_repos, unused_repos, repo) - - store.delete_configs(dead_configs) - for db_repo_name, ref in unused_repos: - store.delete_repo(db_repo_name, ref, all_repos[(db_repo_name, ref)]) - return len(unused_repos) - - def gc(store: Store) -> int: - with store.exclusive_lock(): - repos_removed = _gc_repos(store) - output.write_line(f'{repos_removed} repo(s) removed.') + output.write_line(f'{store.gc()} repo(s) removed.') return 0 diff --git a/pre_commit/store.py b/pre_commit/store.py index 9e3b4048..34c5f0d9 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -8,6 +8,7 @@ import tempfile from collections.abc import Callable from collections.abc import Generator from collections.abc import Sequence +from typing import Any import pre_commit.constants as C from pre_commit import clientlib @@ -96,7 +97,7 @@ class Store: ' PRIMARY KEY (repo, ref)' ');', ) - self._create_config_table(db) + self._create_configs_table(db) # Atomic file move os.replace(tmpfile, self.db_path) @@ -215,7 +216,7 @@ class Store: 'local', C.LOCAL_REPO_VERSION, deps, _make_local_repo, ) - def _create_config_table(self, db: sqlite3.Connection) -> None: + def _create_configs_table(self, db: sqlite3.Connection) -> None: db.executescript( 'CREATE TABLE IF NOT EXISTS configs (' ' path TEXT NOT NULL,' @@ -232,28 +233,83 @@ class Store: return with self.connect() as db: # TODO: eventually remove this and only create in _create - self._create_config_table(db) + self._create_configs_table(db) db.execute('INSERT OR IGNORE INTO configs VALUES (?)', (path,)) - def select_all_configs(self) -> list[str]: - with self.connect() as db: - self._create_config_table(db) - rows = db.execute('SELECT path FROM configs').fetchall() - return [path for path, in rows] + def _mark_used_repos( + self, + all_repos: dict[tuple[str, str], str], + unused_repos: set[tuple[str, str]], + repo: dict[str, Any], + ) -> None: + if repo['repo'] == clientlib.META: + return + elif repo['repo'] == clientlib.LOCAL: + for hook in repo['hooks']: + deps = hook.get('additional_dependencies') + unused_repos.discard(( + self.db_repo_name(repo['repo'], deps), + C.LOCAL_REPO_VERSION, + )) + else: + key = (repo['repo'], repo['rev']) + path = all_repos.get(key) + # can't inspect manifest if it isn't cloned + if path is None: + return - def delete_configs(self, configs: list[str]) -> None: - with self.connect() as db: - rows = [(path,) for path in configs] - db.executemany('DELETE FROM configs WHERE path = ?', rows) + try: + manifest = clientlib.load_manifest( + os.path.join(path, C.MANIFEST_FILE), + ) + except clientlib.InvalidManifestError: + return + else: + unused_repos.discard(key) + by_id = {hook['id']: hook for hook in manifest} - def select_all_repos(self) -> list[tuple[str, str, str]]: - with self.connect() as db: - return db.execute('SELECT repo, ref, path from repos').fetchall() + for hook in repo['hooks']: + if hook['id'] not in by_id: + continue - def delete_repo(self, db_repo_name: str, ref: str, path: str) -> None: - with self.connect() as db: - db.execute( + deps = hook.get( + 'additional_dependencies', + by_id[hook['id']]['additional_dependencies'], + ) + unused_repos.discard(( + self.db_repo_name(repo['repo'], deps), repo['rev'], + )) + + def gc(self) -> int: + with self.exclusive_lock(), self.connect() as db: + self._create_configs_table(db) + + repos = db.execute('SELECT repo, ref, path FROM repos').fetchall() + all_repos = {(repo, ref): path for repo, ref, path in repos} + unused_repos = set(all_repos) + + configs_rows = db.execute('SELECT path FROM configs').fetchall() + configs = [path for path, in configs_rows] + + dead_configs = [] + for config_path in configs: + try: + config = clientlib.load_config(config_path) + except clientlib.InvalidConfigError: + dead_configs.append(config_path) + continue + else: + for repo in config['repos']: + self._mark_used_repos(all_repos, unused_repos, repo) + + paths = [(path,) for path in dead_configs] + db.executemany('DELETE FROM configs WHERE path = ?', paths) + + db.executemany( 'DELETE FROM repos WHERE repo = ? and ref = ?', - (db_repo_name, ref), + sorted(unused_repos), ) - rmtree(path) + for k in unused_repos: + rmtree(all_repos[k]) + + return len(unused_repos) diff --git a/tests/commands/gc_test.py b/tests/commands/gc_test.py index 95113ed5..85e66977 100644 --- a/tests/commands/gc_test.py +++ b/tests/commands/gc_test.py @@ -19,11 +19,13 @@ from testing.util import git_commit def _repo_count(store): - return len(store.select_all_repos()) + with store.connect() as db: + return db.execute('SELECT COUNT(1) FROM repos').fetchone()[0] def _config_count(store): - return len(store.select_all_configs()) + with store.connect() as db: + return db.execute('SELECT COUNT(1) FROM configs').fetchone()[0] def _remove_config_assert_cleared(store, cap_out): @@ -153,7 +155,8 @@ def test_invalid_manifest_gcd(tempdir_factory, store, in_git_dir, cap_out): install_hooks(C.CONFIG_FILE, store) # we'll "break" the manifest to simulate an old version clone - (_, _, path), = store.select_all_repos() + with store.connect() as db: + path, = db.execute('SELECT path FROM repos').fetchone() os.remove(os.path.join(path, C.MANIFEST_FILE)) assert _config_count(store) == 1 diff --git a/tests/store_test.py b/tests/store_test.py index 7d4dffb0..4b04a8e7 100644 --- a/tests/store_test.py +++ b/tests/store_test.py @@ -22,6 +22,17 @@ from testing.util import git_commit from testing.util import xfailif_windows +def _select_all_configs(store: Store) -> list[str]: + with store.connect() as db: + rows = db.execute('SELECT * FROM configs').fetchall() + return [path for path, in rows] + + +def _select_all_repos(store: Store) -> list[tuple[str, str, str]]: + with store.connect() as db: + return db.execute('SELECT repo, ref, path FROM repos').fetchall() + + def test_our_session_fixture_works(): """There's a session fixture which makes `Store` invariantly raise to prevent writing to the home directory. @@ -91,7 +102,7 @@ def test_clone(store, tempdir_factory, caplog): assert git.head_rev(ret) == rev # Assert there's an entry in the sqlite db for this - assert store.select_all_repos() == [(path, rev, ret)] + assert _select_all_repos(store) == [(path, rev, ret)] def test_warning_for_deprecated_stages_on_init(store, tempdir_factory, caplog): @@ -217,7 +228,7 @@ def test_clone_shallow_failure_fallback_to_complete( assert git.head_rev(ret) == rev # Assert there's an entry in the sqlite db for this - assert store.select_all_repos() == [(path, rev, ret)] + assert _select_all_repos(store) == [(path, rev, ret)] def test_clone_tag_not_on_mainline(store, tempdir_factory): @@ -265,7 +276,7 @@ def test_mark_config_as_used(store, tmpdir): with tmpdir.as_cwd(): f = tmpdir.join('f').ensure() store.mark_config_used('f') - assert store.select_all_configs() == [f.strpath] + assert _select_all_configs(store) == [f.strpath] def test_mark_config_as_used_idempotent(store, tmpdir): @@ -275,7 +286,7 @@ def test_mark_config_as_used_idempotent(store, tmpdir): def test_mark_config_as_used_does_not_exist(store): store.mark_config_used('f') - assert store.select_all_configs() == [] + assert _select_all_configs(store) == [] def _simulate_pre_1_14_0(store): @@ -283,9 +294,9 @@ def _simulate_pre_1_14_0(store): db.executescript('DROP TABLE configs') -def test_select_all_configs_roll_forward(store): +def test_gc_roll_forward(store): _simulate_pre_1_14_0(store) - assert store.select_all_configs() == [] + assert store.gc() == 0 def test_mark_config_as_used_roll_forward(store, tmpdir): @@ -314,7 +325,7 @@ def test_mark_config_as_used_readonly(tmpdir): assert store.readonly # should be skipped due to readonly store.mark_config_used(str(cfg)) - assert store.select_all_configs() == [] + assert _select_all_configs(store) == [] def test_clone_with_recursive_submodules(store, tmp_path): From 063229aee77ba2da3e9ed5c8217070b4128234fd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 20:59:54 +0000 Subject: [PATCH 17/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.21.0 → v3.21.1](https://github.com/asottile/pyupgrade/compare/v3.21.0...v3.21.1) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fa077365..e47d56ca 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: hooks: - id: add-trailing-comma - repo: https://github.com/asottile/pyupgrade - rev: v3.21.0 + rev: v3.21.1 hooks: - id: pyupgrade args: [--py310-plus] From 66278a9a0b69a69fde820d2b85a7e198eae52981 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 19 Nov 2025 14:29:50 -0500 Subject: [PATCH 18/29] move logic for gc back to commands.gc --- pre_commit/commands/gc.py | 91 ++++++++++++++++++++++++++++++++++++++- pre_commit/store.py | 80 ---------------------------------- tests/commands/gc_test.py | 8 ++++ tests/store_test.py | 13 +----- 4 files changed, 100 insertions(+), 92 deletions(-) diff --git a/pre_commit/commands/gc.py b/pre_commit/commands/gc.py index d1941e4b..975d5e4c 100644 --- a/pre_commit/commands/gc.py +++ b/pre_commit/commands/gc.py @@ -1,9 +1,98 @@ from __future__ import annotations +import os.path +from typing import Any + +import pre_commit.constants as C from pre_commit import output +from pre_commit.clientlib import InvalidConfigError +from pre_commit.clientlib import InvalidManifestError +from pre_commit.clientlib import load_config +from pre_commit.clientlib import load_manifest +from pre_commit.clientlib import LOCAL +from pre_commit.clientlib import META from pre_commit.store import Store +from pre_commit.util import rmtree + + +def _mark_used_repos( + store: Store, + all_repos: dict[tuple[str, str], str], + unused_repos: set[tuple[str, str]], + repo: dict[str, Any], +) -> None: + if repo['repo'] == META: + return + elif repo['repo'] == LOCAL: + for hook in repo['hooks']: + deps = hook.get('additional_dependencies') + unused_repos.discard(( + store.db_repo_name(repo['repo'], deps), + C.LOCAL_REPO_VERSION, + )) + else: + key = (repo['repo'], repo['rev']) + path = all_repos.get(key) + # can't inspect manifest if it isn't cloned + if path is None: + return + + try: + manifest = load_manifest(os.path.join(path, C.MANIFEST_FILE)) + except InvalidManifestError: + return + else: + unused_repos.discard(key) + by_id = {hook['id']: hook for hook in manifest} + + for hook in repo['hooks']: + if hook['id'] not in by_id: + continue + + deps = hook.get( + 'additional_dependencies', + by_id[hook['id']]['additional_dependencies'], + ) + unused_repos.discard(( + store.db_repo_name(repo['repo'], deps), repo['rev'], + )) + + +def _gc(store: Store) -> int: + with store.exclusive_lock(), store.connect() as db: + store._create_configs_table(db) + + repos = db.execute('SELECT repo, ref, path FROM repos').fetchall() + all_repos = {(repo, ref): path for repo, ref, path in repos} + unused_repos = set(all_repos) + + configs_rows = db.execute('SELECT path FROM configs').fetchall() + configs = [path for path, in configs_rows] + + dead_configs = [] + for config_path in configs: + try: + config = load_config(config_path) + except InvalidConfigError: + dead_configs.append(config_path) + continue + else: + for repo in config['repos']: + _mark_used_repos(store, all_repos, unused_repos, repo) + + paths = [(path,) for path in dead_configs] + db.executemany('DELETE FROM configs WHERE path = ?', paths) + + db.executemany( + 'DELETE FROM repos WHERE repo = ? and ref = ?', + sorted(unused_repos), + ) + for k in unused_repos: + rmtree(all_repos[k]) + + return len(unused_repos) def gc(store: Store) -> int: - output.write_line(f'{store.gc()} repo(s) removed.') + output.write_line(f'{_gc(store)} repo(s) removed.') return 0 diff --git a/pre_commit/store.py b/pre_commit/store.py index 34c5f0d9..dc90c051 100644 --- a/pre_commit/store.py +++ b/pre_commit/store.py @@ -8,7 +8,6 @@ import tempfile from collections.abc import Callable from collections.abc import Generator from collections.abc import Sequence -from typing import Any import pre_commit.constants as C from pre_commit import clientlib @@ -18,7 +17,6 @@ from pre_commit.util import CalledProcessError from pre_commit.util import clean_path_on_failure from pre_commit.util import cmd_output_b from pre_commit.util import resource_text -from pre_commit.util import rmtree logger = logging.getLogger('pre_commit') @@ -235,81 +233,3 @@ class Store: # TODO: eventually remove this and only create in _create self._create_configs_table(db) db.execute('INSERT OR IGNORE INTO configs VALUES (?)', (path,)) - - def _mark_used_repos( - self, - all_repos: dict[tuple[str, str], str], - unused_repos: set[tuple[str, str]], - repo: dict[str, Any], - ) -> None: - if repo['repo'] == clientlib.META: - return - elif repo['repo'] == clientlib.LOCAL: - for hook in repo['hooks']: - deps = hook.get('additional_dependencies') - unused_repos.discard(( - self.db_repo_name(repo['repo'], deps), - C.LOCAL_REPO_VERSION, - )) - else: - key = (repo['repo'], repo['rev']) - path = all_repos.get(key) - # can't inspect manifest if it isn't cloned - if path is None: - return - - try: - manifest = clientlib.load_manifest( - os.path.join(path, C.MANIFEST_FILE), - ) - except clientlib.InvalidManifestError: - return - else: - unused_repos.discard(key) - by_id = {hook['id']: hook for hook in manifest} - - for hook in repo['hooks']: - if hook['id'] not in by_id: - continue - - deps = hook.get( - 'additional_dependencies', - by_id[hook['id']]['additional_dependencies'], - ) - unused_repos.discard(( - self.db_repo_name(repo['repo'], deps), repo['rev'], - )) - - def gc(self) -> int: - with self.exclusive_lock(), self.connect() as db: - self._create_configs_table(db) - - repos = db.execute('SELECT repo, ref, path FROM repos').fetchall() - all_repos = {(repo, ref): path for repo, ref, path in repos} - unused_repos = set(all_repos) - - configs_rows = db.execute('SELECT path FROM configs').fetchall() - configs = [path for path, in configs_rows] - - dead_configs = [] - for config_path in configs: - try: - config = clientlib.load_config(config_path) - except clientlib.InvalidConfigError: - dead_configs.append(config_path) - continue - else: - for repo in config['repos']: - self._mark_used_repos(all_repos, unused_repos, repo) - - paths = [(path,) for path in dead_configs] - db.executemany('DELETE FROM configs WHERE path = ?', paths) - - db.executemany( - 'DELETE FROM repos WHERE repo = ? and ref = ?', - sorted(unused_repos), - ) - for k in unused_repos: - rmtree(all_repos[k]) - - return len(unused_repos) diff --git a/tests/commands/gc_test.py b/tests/commands/gc_test.py index 85e66977..992b02f3 100644 --- a/tests/commands/gc_test.py +++ b/tests/commands/gc_test.py @@ -165,3 +165,11 @@ def test_invalid_manifest_gcd(tempdir_factory, store, in_git_dir, cap_out): assert _config_count(store) == 1 assert _repo_count(store) == 0 assert cap_out.get().splitlines()[-1] == '1 repo(s) removed.' + + +def test_gc_pre_1_14_roll_forward(store, cap_out): + with store.connect() as db: # simulate pre-1.14.0 + db.executescript('DROP TABLE configs') + + assert not gc(store) + assert cap_out.get() == '0 repo(s) removed.\n' diff --git a/tests/store_test.py b/tests/store_test.py index 4b04a8e7..13f198ea 100644 --- a/tests/store_test.py +++ b/tests/store_test.py @@ -289,18 +289,9 @@ def test_mark_config_as_used_does_not_exist(store): assert _select_all_configs(store) == [] -def _simulate_pre_1_14_0(store): - with store.connect() as db: - db.executescript('DROP TABLE configs') - - -def test_gc_roll_forward(store): - _simulate_pre_1_14_0(store) - assert store.gc() == 0 - - def test_mark_config_as_used_roll_forward(store, tmpdir): - _simulate_pre_1_14_0(store) + with store.connect() as db: # simulate pre-1.14.0 + db.executescript('DROP TABLE configs') test_mark_config_as_used(store, tmpdir) From 844dacc168d68a32553ecf8a99178ab395fdb11e Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 19 Nov 2025 14:57:01 -0500 Subject: [PATCH 19/29] add forward-compat error message --- pre_commit/clientlib.py | 11 ++++++++++- tests/clientlib_test.py | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index eb0fd4d6..51f14d26 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -270,10 +270,19 @@ class InvalidManifestError(FatalError): pass +def _load_manifest_forward_compat(contents: str) -> object: + obj = yaml_load(contents) + if isinstance(obj, dict): + check_min_version('5') + raise AssertionError('unreachable') + else: + return obj + + load_manifest = functools.partial( cfgv.load_from_filename, schema=MANIFEST_SCHEMA, - load_strategy=yaml_load, + load_strategy=_load_manifest_forward_compat, exc_tp=InvalidManifestError, ) diff --git a/tests/clientlib_test.py b/tests/clientlib_test.py index 93c698f7..2c42b80c 100644 --- a/tests/clientlib_test.py +++ b/tests/clientlib_test.py @@ -12,6 +12,8 @@ from pre_commit.clientlib import CONFIG_HOOK_DICT from pre_commit.clientlib import CONFIG_REPO_DICT from pre_commit.clientlib import CONFIG_SCHEMA from pre_commit.clientlib import DEFAULT_LANGUAGE_VERSION +from pre_commit.clientlib import InvalidManifestError +from pre_commit.clientlib import load_manifest from pre_commit.clientlib import MANIFEST_HOOK_DICT from pre_commit.clientlib import MANIFEST_SCHEMA from pre_commit.clientlib import META_HOOK_DICT @@ -588,3 +590,18 @@ def test_config_hook_stages_defaulting(): 'id': 'fake-hook', 'stages': ['commit-msg', 'pre-push', 'pre-commit', 'pre-merge-commit'], } + + +def test_manifest_v5_forward_compat(tmp_path): + manifest = tmp_path.joinpath('.pre-commit-hooks.yaml') + manifest.write_text('hooks: {}') + + with pytest.raises(InvalidManifestError) as excinfo: + load_manifest(manifest) + assert str(excinfo.value) == ( + f'\n' + f'==> File {manifest}\n' + f'=====> \n' + f'=====> pre-commit version 5 is required but version {C.VERSION} ' + f'is installed. Perhaps run `pip install --upgrade pre-commit`.' + ) From 8d34f95308fc4c14dea3d3e90153acfdaf55e2de Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Fri, 21 Nov 2025 15:09:41 -0500 Subject: [PATCH 20/29] use ExitStack instead of start + stop --- tests/main_test.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/main_test.py b/tests/main_test.py index 945349fa..325792d8 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -1,6 +1,7 @@ from __future__ import annotations import argparse +import contextlib import os.path from unittest import mock @@ -97,11 +98,9 @@ CMDS = tuple(fn.replace('_', '-') for fn in FNS) @pytest.fixture def mock_commands(): - mcks = {fn: mock.patch.object(main, fn).start() for fn in FNS} - ret = auto_namedtuple(**mcks) - yield ret - for mck in ret: - mck.stop() + with contextlib.ExitStack() as ctx: + mcks = {f: ctx.enter_context(mock.patch.object(main, f)) for f in FNS} + yield auto_namedtuple(**mcks) @pytest.fixture From bdf68790b78158268bbc8482f76491a61d75809a Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Fri, 21 Nov 2025 16:38:55 -0500 Subject: [PATCH 21/29] add pre-commit hazmat --- pre_commit/commands/hazmat.py | 95 +++++++++++++++++++++++++++++++++ pre_commit/lang_base.py | 6 ++- pre_commit/main.py | 10 +++- tests/commands/hazmat_test.py | 99 +++++++++++++++++++++++++++++++++++ tests/lang_base_test.py | 12 +++++ tests/main_test.py | 12 +++++ tests/repository_test.py | 11 ++++ 7 files changed, 243 insertions(+), 2 deletions(-) create mode 100644 pre_commit/commands/hazmat.py create mode 100644 tests/commands/hazmat_test.py diff --git a/pre_commit/commands/hazmat.py b/pre_commit/commands/hazmat.py new file mode 100644 index 00000000..01b27ce6 --- /dev/null +++ b/pre_commit/commands/hazmat.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +import argparse +import subprocess +from collections.abc import Sequence + +from pre_commit.parse_shebang import normalize_cmd + + +def add_parsers(parser: argparse.ArgumentParser) -> None: + subparsers = parser.add_subparsers(dest='tool') + + cd_parser = subparsers.add_parser( + 'cd', help='cd to a subdir and run the command', + ) + cd_parser.add_argument('subdir') + cd_parser.add_argument('cmd', nargs=argparse.REMAINDER) + + ignore_exit_code_parser = subparsers.add_parser( + 'ignore-exit-code', help='run the command but ignore the exit code', + ) + ignore_exit_code_parser.add_argument('cmd', nargs=argparse.REMAINDER) + + n1_parser = subparsers.add_parser( + 'n1', help='run the command once per filename', + ) + n1_parser.add_argument('cmd', nargs=argparse.REMAINDER) + + +def _cmd_filenames(cmd: tuple[str, ...]) -> tuple[ + tuple[str, ...], + tuple[str, ...], +]: + for idx, val in enumerate(reversed(cmd)): + if val == '--': + split = len(cmd) - idx + break + else: + raise SystemExit('hazmat entry must end with `--`') + + return cmd[:split - 1], cmd[split:] + + +def cd(subdir: str, cmd: tuple[str, ...]) -> int: + cmd, filenames = _cmd_filenames(cmd) + + prefix = f'{subdir}/' + new_filenames = [] + for filename in filenames: + if not filename.startswith(prefix): + raise SystemExit(f'unexpected file without {prefix=}: {filename}') + else: + new_filenames.append(filename.removeprefix(prefix)) + + cmd = normalize_cmd(cmd) + return subprocess.call((*cmd, *new_filenames), cwd=subdir) + + +def ignore_exit_code(cmd: tuple[str, ...]) -> int: + cmd = normalize_cmd(cmd) + subprocess.call(cmd) + return 0 + + +def n1(cmd: tuple[str, ...]) -> int: + cmd, filenames = _cmd_filenames(cmd) + cmd = normalize_cmd(cmd) + ret = 0 + for filename in filenames: + ret |= subprocess.call((*cmd, filename)) + return ret + + +def impl(args: argparse.Namespace) -> int: + args.cmd = tuple(args.cmd) + if args.tool == 'cd': + return cd(args.subdir, args.cmd) + elif args.tool == 'ignore-exit-code': + return ignore_exit_code(args.cmd) + elif args.tool == 'n1': + return n1(args.cmd) + else: + raise NotImplementedError(f'unexpected tool: {args.tool}') + + +def main(argv: Sequence[str] | None = None) -> int: + parser = argparse.ArgumentParser() + add_parsers(parser) + args = parser.parse_args(argv) + + return impl(args) + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/pre_commit/lang_base.py b/pre_commit/lang_base.py index 95be7b9b..198e9365 100644 --- a/pre_commit/lang_base.py +++ b/pre_commit/lang_base.py @@ -5,6 +5,7 @@ import os import random import re import shlex +import sys from collections.abc import Generator from collections.abc import Sequence from typing import Any @@ -171,7 +172,10 @@ def run_xargs( def hook_cmd(entry: str, args: Sequence[str]) -> tuple[str, ...]: - return (*shlex.split(entry), *args) + cmd = shlex.split(entry) + if cmd[:2] == ['pre-commit', 'hazmat']: + cmd = [sys.executable, '-m', 'pre_commit.commands.hazmat', *cmd[2:]] + return (*cmd, *args) def basic_run_hook( diff --git a/pre_commit/main.py b/pre_commit/main.py index c33fbfda..0c3eefda 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -10,6 +10,7 @@ import pre_commit.constants as C from pre_commit import clientlib from pre_commit import git from pre_commit.color import add_color_option +from pre_commit.commands import hazmat from pre_commit.commands.autoupdate import autoupdate from pre_commit.commands.clean import clean from pre_commit.commands.gc import gc @@ -41,7 +42,7 @@ os.environ.pop('__PYVENV_LAUNCHER__', None) os.environ.pop('PYTHONEXECUTABLE', None) COMMANDS_NO_GIT = { - 'clean', 'gc', 'init-templatedir', 'sample-config', + 'clean', 'gc', 'hazmat', 'init-templatedir', 'sample-config', 'validate-config', 'validate-manifest', } @@ -245,6 +246,11 @@ def main(argv: Sequence[str] | None = None) -> int: _add_cmd('gc', help='Clean unused cached repos.') + hazmat_parser = _add_cmd( + 'hazmat', help='Composable tools for rare use in hook `entry`.', + ) + hazmat.add_parsers(hazmat_parser) + init_templatedir_parser = _add_cmd( 'init-templatedir', help=( @@ -389,6 +395,8 @@ def main(argv: Sequence[str] | None = None) -> int: return clean(store) elif args.command == 'gc': return gc(store) + elif args.command == 'hazmat': + return hazmat.impl(args) elif args.command == 'hook-impl': return hook_impl( store, diff --git a/tests/commands/hazmat_test.py b/tests/commands/hazmat_test.py new file mode 100644 index 00000000..df957e36 --- /dev/null +++ b/tests/commands/hazmat_test.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +import sys + +import pytest + +from pre_commit.commands.hazmat import _cmd_filenames +from pre_commit.commands.hazmat import main +from testing.util import cwd + + +def test_cmd_filenames_no_dash_dash(): + with pytest.raises(SystemExit) as excinfo: + _cmd_filenames(('no', 'dashdash', 'here')) + msg, = excinfo.value.args + assert msg == 'hazmat entry must end with `--`' + + +def test_cmd_filenames_no_filenames(): + cmd, filenames = _cmd_filenames(('hello', 'world', '--')) + assert cmd == ('hello', 'world') + assert filenames == () + + +def test_cmd_filenames_some_filenames(): + cmd, filenames = _cmd_filenames(('hello', 'world', '--', 'f1', 'f2')) + assert cmd == ('hello', 'world') + assert filenames == ('f1', 'f2') + + +def test_cmd_filenames_multiple_dashdash(): + cmd, filenames = _cmd_filenames(('hello', '--', 'arg', '--', 'f1', 'f2')) + assert cmd == ('hello', '--', 'arg') + assert filenames == ('f1', 'f2') + + +def test_cd_unexpected_filename(): + with pytest.raises(SystemExit) as excinfo: + main(('cd', 'subdir', 'cmd', '--', 'subdir/1', 'not-subdir/2')) + msg, = excinfo.value.args + assert msg == "unexpected file without prefix='subdir/': not-subdir/2" + + +def _norm(out): + return out.replace('\r\n', '\n') + + +def test_cd(tmp_path, capfd): + subdir = tmp_path.joinpath('subdir') + subdir.mkdir() + subdir.joinpath('a').write_text('a') + subdir.joinpath('b').write_text('b') + + with cwd(tmp_path): + ret = main(( + 'cd', 'subdir', + sys.executable, '-c', + 'import os; print(os.getcwd());' + 'import sys; [print(open(f).read()) for f in sys.argv[1:]]', + '--', + 'subdir/a', 'subdir/b', + )) + + assert ret == 0 + out, err = capfd.readouterr() + assert _norm(out) == f'{subdir}\na\nb\n' + assert err == '' + + +def test_ignore_exit_code(capfd): + ret = main(( + 'ignore-exit-code', sys.executable, '-c', 'raise SystemExit("bye")', + )) + assert ret == 0 + out, err = capfd.readouterr() + assert out == '' + assert _norm(err) == 'bye\n' + + +def test_n1(capfd): + ret = main(( + 'n1', sys.executable, '-c', 'import sys; print(sys.argv[1:])', + '--', + 'foo', 'bar', 'baz', + )) + assert ret == 0 + out, err = capfd.readouterr() + assert _norm(out) == "['foo']\n['bar']\n['baz']\n" + assert err == '' + + +def test_n1_some_error_code(): + ret = main(( + 'n1', sys.executable, '-c', + 'import sys; raise SystemExit(sys.argv[1] == "error")', + '--', + 'ok', 'error', 'ok', + )) + assert ret == 1 diff --git a/tests/lang_base_test.py b/tests/lang_base_test.py index da289aef..9fac83da 100644 --- a/tests/lang_base_test.py +++ b/tests/lang_base_test.py @@ -164,3 +164,15 @@ def test_basic_run_hook(tmp_path): assert ret == 0 out = out.replace(b'\r\n', b'\n') assert out == b'hi hello file file file\n' + + +def test_hook_cmd(): + assert lang_base.hook_cmd('echo hi', ()) == ('echo', 'hi') + + +def test_hook_cmd_hazmat(): + ret = lang_base.hook_cmd('pre-commit hazmat cd a echo -- b', ()) + assert ret == ( + sys.executable, '-m', 'pre_commit.commands.hazmat', + 'cd', 'a', 'echo', '--', 'b', + ) diff --git a/tests/main_test.py b/tests/main_test.py index 945349fa..eb9ea18d 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -8,6 +8,7 @@ import pytest import pre_commit.constants as C from pre_commit import main +from pre_commit.commands import hazmat from pre_commit.errors import FatalError from pre_commit.util import cmd_output from testing.auto_namedtuple import auto_namedtuple @@ -158,6 +159,17 @@ def test_all_cmds(command, mock_commands, mock_store_dir): assert_only_one_mock_called(mock_commands) +def test_hazmat(mock_store_dir): + with mock.patch.object(hazmat, 'impl') as mck: + main.main(('hazmat', 'cd', 'subdir', '--', 'cmd', '--', 'f1', 'f2')) + assert mck.call_count == 1 + (arg,), dct = mck.call_args + assert dct == {} + assert arg.tool == 'cd' + assert arg.subdir == 'subdir' + assert arg.cmd == ['cmd', '--', 'f1', 'f2'] + + def test_try_repo(mock_store_dir): with mock.patch.object(main, 'try_repo') as patch: main.main(('try-repo', '.')) diff --git a/tests/repository_test.py b/tests/repository_test.py index b1c7a002..5d71c3e4 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -506,3 +506,14 @@ def test_args_with_spaces_and_quotes(tmp_path): expected = b"['i have spaces', 'and\"\\'quotes', '$and !this']\n" assert ret == (0, expected) + + +def test_hazmat(tmp_path): + ret = run_language( + tmp_path, unsupported, + f'pre-commit hazmat ignore-exit-code {shlex.quote(sys.executable)} ' + f"-c 'import sys; raise SystemExit(sys.argv[1:])'", + ('f1', 'f2'), + ) + expected = b"['f1', 'f2']\n" + assert ret == (0, expected) From 1af6c8fa9502336c6977c2ff3e79185bd97a6e57 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 22 Nov 2025 16:02:16 -0500 Subject: [PATCH 22/29] v4.5.0 --- CHANGELOG.md | 7 +++++++ setup.cfg | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b27af5e7..1434728d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +4.5.0 - 2025-11-22 +================== + +### Features +- Add `pre-commit hazmat`. + - #3585 PR by @asottile. + 4.4.0 - 2025-11-08 ================== diff --git a/setup.cfg b/setup.cfg index be031c3e..00c71759 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 4.4.0 +version = 4.5.0 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 8ea2b790d817088444b2328ff6cfe6742260070f Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Sat, 22 Nov 2025 16:06:27 -0500 Subject: [PATCH 23/29] remove sha256 file from zipapp script github displays the checksum for us now! --- testing/zipapp/make | 3 --- 1 file changed, 3 deletions(-) diff --git a/testing/zipapp/make b/testing/zipapp/make index 165046f6..43bb4373 100755 --- a/testing/zipapp/make +++ b/testing/zipapp/make @@ -107,9 +107,6 @@ def main() -> int: shebang = '/usr/bin/env python3' zipapp.create_archive(tmpdir, filename, interpreter=shebang) - with open(f'{filename}.sha256sum', 'w') as f: - subprocess.check_call(('sha256sum', filename), stdout=f) - return 0 From 465192d7de58d569776eaaa818c94cb2b962d436 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 20:53:38 +0000 Subject: [PATCH 24/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.21.1 → v3.21.2](https://github.com/asottile/pyupgrade/compare/v3.21.1...v3.21.2) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e47d56ca..50893030 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: hooks: - id: add-trailing-comma - repo: https://github.com/asottile/pyupgrade - rev: v3.21.1 + rev: v3.21.2 hooks: - id: pyupgrade args: [--py310-plus] From 48953556d06f8cdb4248002c1a0044e69e0916b3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 21:05:15 +0000 Subject: [PATCH 25/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v1.18.2 → v1.19.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.18.2...v1.19.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 50893030..cedeae5e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,7 +37,7 @@ repos: hooks: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.18.2 + rev: v1.19.0 hooks: - id: mypy additional_dependencies: [types-pyyaml] From c251e6b6d011b3b262339dc8e109de29b0ff8db1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 20:48:45 +0000 Subject: [PATCH 26/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-mypy: v1.19.0 → v1.19.1](https://github.com/pre-commit/mirrors-mypy/compare/v1.19.0...v1.19.1) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cedeae5e..83ff03f3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,7 +37,7 @@ repos: hooks: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.19.0 + rev: v1.19.1 hooks: - id: mypy additional_dependencies: [types-pyyaml] From 51592eececd13b99c40ec477ad8f810799147227 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 16 Dec 2025 15:45:01 -0500 Subject: [PATCH 27/29] fix python local template when artifact dirs are present --- pre_commit/resources/empty_template_setup.py | 2 +- tests/languages/python_test.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pre_commit/resources/empty_template_setup.py b/pre_commit/resources/empty_template_setup.py index ef05eef8..e8b1ff02 100644 --- a/pre_commit/resources/empty_template_setup.py +++ b/pre_commit/resources/empty_template_setup.py @@ -1,4 +1,4 @@ from setuptools import setup -setup(name='pre-commit-placeholder-package', version='0.0.0') +setup(name='pre-commit-placeholder-package', version='0.0.0', py_modules=[]) diff --git a/tests/languages/python_test.py b/tests/languages/python_test.py index 565525a4..593634b7 100644 --- a/tests/languages/python_test.py +++ b/tests/languages/python_test.py @@ -10,6 +10,8 @@ import pre_commit.constants as C from pre_commit.envcontext import envcontext from pre_commit.languages import python from pre_commit.prefix import Prefix +from pre_commit.store import _make_local_repo +from pre_commit.util import cmd_output_b from pre_commit.util import make_executable from pre_commit.util import win_exe from testing.auto_namedtuple import auto_namedtuple @@ -351,3 +353,15 @@ def test_python_hook_weird_setup_cfg(tmp_path): ret = run_language(tmp_path, python, 'socks', [os.devnull]) assert ret == (0, f'[{os.devnull!r}]\nhello hello\n'.encode()) + + +def test_local_repo_with_other_artifacts(tmp_path): + cmd_output_b('git', 'init', tmp_path) + _make_local_repo(str(tmp_path)) + # pretend a rust install also ran here + tmp_path.joinpath('target').mkdir() + + ret, out = run_language(tmp_path, python, 'python --version') + + assert ret == 0 + assert out.startswith(b'Python ') From 8a0630ca1aa7f6d5665effe674ebe2022af17919 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 16 Dec 2025 16:13:56 -0500 Subject: [PATCH 28/29] v4.5.1 --- CHANGELOG.md | 7 +++++++ setup.cfg | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1434728d..879ae073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +4.5.1 - 2025-12-16 +================== + +### Fixes +- Fix `language: python` with `repo: local` without `additional_dependencies`. + - #3597 PR by @asottile. + 4.5.0 - 2025-11-22 ================== diff --git a/setup.cfg b/setup.cfg index 00c71759..a95ee447 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pre_commit -version = 4.5.0 +version = 4.5.1 description = A framework for managing and maintaining multi-language pre-commit hooks. long_description = file: README.md long_description_content_type = text/markdown From 37a879e65ee00d8375d12f053ef76e0024a0ed55 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 20:26:26 +0000 Subject: [PATCH 29/29] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/setup-cfg-fmt: v3.1.0 → v3.2.0](https://github.com/asottile/setup-cfg-fmt/compare/v3.1.0...v3.2.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 83ff03f3..3654066f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,7 +10,7 @@ repos: - id: name-tests-test - id: requirements-txt-fixer - repo: https://github.com/asottile/setup-cfg-fmt - rev: v3.1.0 + rev: v3.2.0 hooks: - id: setup-cfg-fmt - repo: https://github.com/asottile/reorder-python-imports