From eaa22dc08251a2b7ec4c15edfc5b9ee905cfa235 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 8 Jan 2019 16:37:15 +0100 Subject: [PATCH] adding Pico server (editorial) separately from Premiera host --- pype/api.py | 8 +- pype/editorial/__init__.py | 81 + pype/editorial/pipeline.py | 44 + pype/editorial/templates.py | 41 + pype/lib.py | 35 + .../editorial/publish/collect_context.py | 12 + pype/plugins/launcher/actions/Editorial.py | 66 + .../actions/{ => unused}/FusionRenderNode.py | 0 .../launcher/actions/unused/PremierePro.py | 58 + .../actions/{ => unused}/VrayRenderSlave.py | 0 .../premiere/publish/collect_context.py | 12 + pype/premiere/__init__.py | 85 + .../extensions/pype_avalon/PProPanel.jsx | 66 + .../premiere/extensions/pype_avalon/ReadMe.md | 215 + .../jsx/PPRO/PPro_API_Constants.jsx | 60 + .../pype_avalon/jsx/PPRO/Premiere.jsx | 2382 +++++ .../extensions/pype_avalon/jsx/general.jsx | 19 + .../Effect Presets and Custom Items.prfpset | 122 + .../pype_avalon/payloads/PProPanel.mxi | 20 + .../pype_avalon/payloads/PProPanel.sqpreset | 41 + .../pype_avalon/payloads/Registry.png | Bin 0 -> 228114 bytes .../pype_avalon/payloads/addons.png | Bin 0 -> 783736 bytes .../extensions/pype_avalon/payloads/estk.png | Bin 0 -> 69207 bytes .../pype_avalon/payloads/example.epr | 4001 +++++++++ .../pype_avalon/payloads/localhost.png | Bin 0 -> 9910 bytes .../pype_avalon/payloads/onbeforeunload.html | 343 + .../payloads/sequence_output_options.png | Bin 0 -> 51905 bytes .../extensions/pype_avalon/payloads/test.jpg | Bin 0 -> 345752 bytes pype/premiere/html/js_client.html | 19 + pype/premiere/html/pico.js | 1150 +++ pype/premiere/templates.py | 41 + pype/premiere/tests/client.py | 5 + pype/premiere/tests/example.py | 18 + pype/premiere/tests/start_server.bat | 3 + pype/templates.py | 15 + pype/vendor/pico/server.py | 25 +- pype/vendor/pysync.py | 206 + pype/vendor/requests/__init__.py | 17 +- pype/vendor/requests/__version__.py | 4 +- pype/vendor/requests/adapters.py | 27 +- pype/vendor/requests/api.py | 20 +- pype/vendor/requests/auth.py | 4 +- pype/vendor/requests/cacert.pem | 5660 ------------ pype/vendor/requests/compat.py | 3 +- pype/vendor/requests/cookies.py | 31 +- pype/vendor/requests/help.py | 3 +- pype/vendor/requests/hooks.py | 4 +- pype/vendor/requests/models.py | 19 +- pype/vendor/requests/packages/__init__.py | 36 - .../requests/packages/chardet/__init__.py | 39 - .../requests/packages/chardet/big5freq.py | 386 - .../requests/packages/chardet/big5prober.py | 47 - .../requests/packages/chardet/chardetect.py | 80 - .../packages/chardet/chardistribution.py | 233 - .../packages/chardet/charsetgroupprober.py | 106 - .../packages/chardet/charsetprober.py | 145 - .../requests/packages/chardet/cli/__init__.py | 1 - .../packages/chardet/cli/chardetect.py | 85 - .../packages/chardet/codingstatemachine.py | 88 - .../requests/packages/chardet/compat.py | 34 - .../requests/packages/chardet/constants.py | 39 - .../requests/packages/chardet/cp949prober.py | 49 - .../vendor/requests/packages/chardet/enums.py | 76 - .../requests/packages/chardet/escprober.py | 101 - .../vendor/requests/packages/chardet/escsm.py | 246 - .../requests/packages/chardet/eucjpprober.py | 92 - .../requests/packages/chardet/euckrfreq.py | 195 - .../requests/packages/chardet/euckrprober.py | 47 - .../requests/packages/chardet/euctwfreq.py | 387 - .../requests/packages/chardet/euctwprober.py | 46 - .../requests/packages/chardet/gb2312freq.py | 283 - .../requests/packages/chardet/gb2312prober.py | 46 - .../requests/packages/chardet/hebrewprober.py | 292 - .../requests/packages/chardet/jisfreq.py | 325 - .../requests/packages/chardet/jpcntx.py | 233 - .../packages/chardet/langbulgarianmodel.py | 228 - .../packages/chardet/langcyrillicmodel.py | 333 - .../packages/chardet/langgreekmodel.py | 225 - .../packages/chardet/langhebrewmodel.py | 200 - .../packages/chardet/langhungarianmodel.py | 225 - .../packages/chardet/langthaimodel.py | 199 - .../packages/chardet/langturkishmodel.py | 193 - .../requests/packages/chardet/latin1prober.py | 145 - .../packages/chardet/mbcharsetprober.py | 91 - .../packages/chardet/mbcsgroupprober.py | 54 - .../requests/packages/chardet/mbcssm.py | 572 -- .../packages/chardet/sbcharsetprober.py | 132 - .../packages/chardet/sbcsgroupprober.py | 73 - .../requests/packages/chardet/sjisprober.py | 92 - .../packages/chardet/universaldetector.py | 278 - .../requests/packages/chardet/utf8prober.py | 82 - .../requests/packages/chardet/version.py | 9 - .../vendor/requests/packages/idna/__init__.py | 1 - pype/vendor/requests/packages/idna/codec.py | 118 - pype/vendor/requests/packages/idna/compat.py | 12 - pype/vendor/requests/packages/idna/core.py | 387 - .../vendor/requests/packages/idna/idnadata.py | 1584 ---- .../requests/packages/idna/intranges.py | 53 - .../requests/packages/idna/uts46data.py | 7633 ----------------- .../requests/packages/urllib3/__init__.py | 97 - .../requests/packages/urllib3/_collections.py | 314 - .../requests/packages/urllib3/connection.py | 373 - .../packages/urllib3/connectionpool.py | 899 -- .../packages/urllib3/contrib/__init__.py | 0 .../contrib/_securetransport/__init__.py | 0 .../contrib/_securetransport/bindings.py | 590 -- .../contrib/_securetransport/low_level.py | 343 - .../packages/urllib3/contrib/appengine.py | 296 - .../packages/urllib3/contrib/ntlmpool.py | 112 - .../packages/urllib3/contrib/pyopenssl.py | 452 - .../urllib3/contrib/securetransport.py | 807 -- .../packages/urllib3/contrib/socks.py | 188 - .../requests/packages/urllib3/exceptions.py | 246 - .../requests/packages/urllib3/fields.py | 178 - .../requests/packages/urllib3/filepost.py | 94 - .../packages/urllib3/packages/__init__.py | 5 - .../urllib3/packages/backports/__init__.py | 0 .../urllib3/packages/backports/makefile.py | 53 - .../packages/urllib3/packages/ordered_dict.py | 259 - .../requests/packages/urllib3/packages/six.py | 868 -- .../packages/ssl_match_hostname/__init__.py | 19 - .../ssl_match_hostname/_implementation.py | 157 - .../requests/packages/urllib3/poolmanager.py | 440 - .../requests/packages/urllib3/request.py | 148 - .../requests/packages/urllib3/response.py | 622 -- .../packages/urllib3/util/__init__.py | 54 - .../packages/urllib3/util/connection.py | 130 - .../requests/packages/urllib3/util/request.py | 118 - .../packages/urllib3/util/response.py | 81 - .../requests/packages/urllib3/util/retry.py | 401 - .../packages/urllib3/util/selectors.py | 581 -- .../requests/packages/urllib3/util/ssl_.py | 337 - .../requests/packages/urllib3/util/timeout.py | 242 - .../requests/packages/urllib3/util/url.py | 230 - .../requests/packages/urllib3/util/wait.py | 40 - pype/vendor/requests/sessions.py | 63 +- pype/vendor/requests/status_codes.py | 2 +- pype/vendor/requests/utils.py | 23 +- pype/vendor/werkzeug/__init__.py | 151 + pype/vendor/werkzeug/_compat.py | 206 + pype/vendor/werkzeug/_internal.py | 419 + pype/vendor/werkzeug/_reloader.py | 277 + pype/vendor/werkzeug/contrib/__init__.py | 16 + pype/vendor/werkzeug/contrib/atom.py | 355 + pype/vendor/werkzeug/contrib/cache.py | 913 ++ pype/vendor/werkzeug/contrib/fixers.py | 254 + pype/vendor/werkzeug/contrib/iterio.py | 352 + pype/vendor/werkzeug/contrib/jsrouting.py | 264 + pype/vendor/werkzeug/contrib/limiter.py | 41 + pype/vendor/werkzeug/contrib/lint.py | 343 + pype/vendor/werkzeug/contrib/profiler.py | 147 + pype/vendor/werkzeug/contrib/securecookie.py | 323 + pype/vendor/werkzeug/contrib/sessions.py | 352 + pype/vendor/werkzeug/contrib/testtools.py | 73 + pype/vendor/werkzeug/contrib/wrappers.py | 284 + pype/vendor/werkzeug/datastructures.py | 2762 ++++++ pype/vendor/werkzeug/debug/__init__.py | 470 + pype/vendor/werkzeug/debug/console.py | 215 + pype/vendor/werkzeug/debug/repr.py | 280 + .../vendor/werkzeug/debug/shared/FONT_LICENSE | 96 + pype/vendor/werkzeug/debug/shared/console.png | Bin 0 -> 507 bytes pype/vendor/werkzeug/debug/shared/debugger.js | 205 + pype/vendor/werkzeug/debug/shared/jquery.js | 5 + pype/vendor/werkzeug/debug/shared/less.png | Bin 0 -> 191 bytes pype/vendor/werkzeug/debug/shared/more.png | Bin 0 -> 200 bytes pype/vendor/werkzeug/debug/shared/source.png | Bin 0 -> 818 bytes pype/vendor/werkzeug/debug/shared/style.css | 143 + pype/vendor/werkzeug/debug/shared/ubuntu.ttf | Bin 0 -> 70220 bytes pype/vendor/werkzeug/debug/tbtools.py | 556 ++ pype/vendor/werkzeug/exceptions.py | 719 ++ pype/vendor/werkzeug/filesystem.py | 66 + pype/vendor/werkzeug/formparser.py | 534 ++ pype/vendor/werkzeug/http.py | 1158 +++ pype/vendor/werkzeug/local.py | 420 + pype/vendor/werkzeug/posixemulation.py | 106 + pype/vendor/werkzeug/routing.py | 1792 ++++ pype/vendor/werkzeug/script.py | 318 + pype/vendor/werkzeug/security.py | 270 + pype/vendor/werkzeug/serving.py | 862 ++ pype/vendor/werkzeug/test.py | 948 ++ pype/vendor/werkzeug/testapp.py | 230 + pype/vendor/werkzeug/urls.py | 1007 +++ pype/vendor/werkzeug/useragents.py | 212 + pype/vendor/werkzeug/utils.py | 628 ++ pype/vendor/werkzeug/websocket.py | 337 + pype/vendor/werkzeug/wrappers.py | 2028 +++++ pype/vendor/werkzeug/wsgi.py | 1364 +++ pype/vendor/wrapt/__init__.py | 19 + pype/vendor/wrapt/arguments.py | 96 + pype/vendor/wrapt/decorators.py | 512 ++ pype/vendor/wrapt/importer.py | 228 + pype/vendor/wrapt/wrappers.py | 901 ++ 192 files changed, 33575 insertions(+), 32185 deletions(-) create mode 100644 pype/editorial/__init__.py create mode 100644 pype/editorial/pipeline.py create mode 100644 pype/editorial/templates.py create mode 100644 pype/plugins/editorial/publish/collect_context.py create mode 100644 pype/plugins/launcher/actions/Editorial.py rename pype/plugins/launcher/actions/{ => unused}/FusionRenderNode.py (100%) create mode 100644 pype/plugins/launcher/actions/unused/PremierePro.py rename pype/plugins/launcher/actions/{ => unused}/VrayRenderSlave.py (100%) create mode 100644 pype/plugins/premiere/publish/collect_context.py create mode 100644 pype/premiere/__init__.py create mode 100644 pype/premiere/extensions/pype_avalon/PProPanel.jsx create mode 100644 pype/premiere/extensions/pype_avalon/ReadMe.md create mode 100644 pype/premiere/extensions/pype_avalon/jsx/PPRO/PPro_API_Constants.jsx create mode 100644 pype/premiere/extensions/pype_avalon/jsx/PPRO/Premiere.jsx create mode 100644 pype/premiere/extensions/pype_avalon/jsx/general.jsx create mode 100644 pype/premiere/extensions/pype_avalon/payloads/Effect Presets and Custom Items.prfpset create mode 100644 pype/premiere/extensions/pype_avalon/payloads/PProPanel.mxi create mode 100644 pype/premiere/extensions/pype_avalon/payloads/PProPanel.sqpreset create mode 100644 pype/premiere/extensions/pype_avalon/payloads/Registry.png create mode 100644 pype/premiere/extensions/pype_avalon/payloads/addons.png create mode 100644 pype/premiere/extensions/pype_avalon/payloads/estk.png create mode 100644 pype/premiere/extensions/pype_avalon/payloads/example.epr create mode 100644 pype/premiere/extensions/pype_avalon/payloads/localhost.png create mode 100644 pype/premiere/extensions/pype_avalon/payloads/onbeforeunload.html create mode 100644 pype/premiere/extensions/pype_avalon/payloads/sequence_output_options.png create mode 100644 pype/premiere/extensions/pype_avalon/payloads/test.jpg create mode 100644 pype/premiere/html/js_client.html create mode 100644 pype/premiere/html/pico.js create mode 100644 pype/premiere/templates.py create mode 100644 pype/premiere/tests/client.py create mode 100644 pype/premiere/tests/example.py create mode 100644 pype/premiere/tests/start_server.bat create mode 100644 pype/vendor/pysync.py delete mode 100644 pype/vendor/requests/cacert.pem delete mode 100644 pype/vendor/requests/packages/__init__.py delete mode 100644 pype/vendor/requests/packages/chardet/__init__.py delete mode 100644 pype/vendor/requests/packages/chardet/big5freq.py delete mode 100644 pype/vendor/requests/packages/chardet/big5prober.py delete mode 100644 pype/vendor/requests/packages/chardet/chardetect.py delete mode 100644 pype/vendor/requests/packages/chardet/chardistribution.py delete mode 100644 pype/vendor/requests/packages/chardet/charsetgroupprober.py delete mode 100644 pype/vendor/requests/packages/chardet/charsetprober.py delete mode 100644 pype/vendor/requests/packages/chardet/cli/__init__.py delete mode 100644 pype/vendor/requests/packages/chardet/cli/chardetect.py delete mode 100644 pype/vendor/requests/packages/chardet/codingstatemachine.py delete mode 100644 pype/vendor/requests/packages/chardet/compat.py delete mode 100644 pype/vendor/requests/packages/chardet/constants.py delete mode 100644 pype/vendor/requests/packages/chardet/cp949prober.py delete mode 100644 pype/vendor/requests/packages/chardet/enums.py delete mode 100644 pype/vendor/requests/packages/chardet/escprober.py delete mode 100644 pype/vendor/requests/packages/chardet/escsm.py delete mode 100644 pype/vendor/requests/packages/chardet/eucjpprober.py delete mode 100644 pype/vendor/requests/packages/chardet/euckrfreq.py delete mode 100644 pype/vendor/requests/packages/chardet/euckrprober.py delete mode 100644 pype/vendor/requests/packages/chardet/euctwfreq.py delete mode 100644 pype/vendor/requests/packages/chardet/euctwprober.py delete mode 100644 pype/vendor/requests/packages/chardet/gb2312freq.py delete mode 100644 pype/vendor/requests/packages/chardet/gb2312prober.py delete mode 100644 pype/vendor/requests/packages/chardet/hebrewprober.py delete mode 100644 pype/vendor/requests/packages/chardet/jisfreq.py delete mode 100644 pype/vendor/requests/packages/chardet/jpcntx.py delete mode 100644 pype/vendor/requests/packages/chardet/langbulgarianmodel.py delete mode 100644 pype/vendor/requests/packages/chardet/langcyrillicmodel.py delete mode 100644 pype/vendor/requests/packages/chardet/langgreekmodel.py delete mode 100644 pype/vendor/requests/packages/chardet/langhebrewmodel.py delete mode 100644 pype/vendor/requests/packages/chardet/langhungarianmodel.py delete mode 100644 pype/vendor/requests/packages/chardet/langthaimodel.py delete mode 100644 pype/vendor/requests/packages/chardet/langturkishmodel.py delete mode 100644 pype/vendor/requests/packages/chardet/latin1prober.py delete mode 100644 pype/vendor/requests/packages/chardet/mbcharsetprober.py delete mode 100644 pype/vendor/requests/packages/chardet/mbcsgroupprober.py delete mode 100644 pype/vendor/requests/packages/chardet/mbcssm.py delete mode 100644 pype/vendor/requests/packages/chardet/sbcharsetprober.py delete mode 100644 pype/vendor/requests/packages/chardet/sbcsgroupprober.py delete mode 100644 pype/vendor/requests/packages/chardet/sjisprober.py delete mode 100644 pype/vendor/requests/packages/chardet/universaldetector.py delete mode 100644 pype/vendor/requests/packages/chardet/utf8prober.py delete mode 100644 pype/vendor/requests/packages/chardet/version.py delete mode 100644 pype/vendor/requests/packages/idna/__init__.py delete mode 100644 pype/vendor/requests/packages/idna/codec.py delete mode 100644 pype/vendor/requests/packages/idna/compat.py delete mode 100644 pype/vendor/requests/packages/idna/core.py delete mode 100644 pype/vendor/requests/packages/idna/idnadata.py delete mode 100644 pype/vendor/requests/packages/idna/intranges.py delete mode 100644 pype/vendor/requests/packages/idna/uts46data.py delete mode 100644 pype/vendor/requests/packages/urllib3/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/_collections.py delete mode 100644 pype/vendor/requests/packages/urllib3/connection.py delete mode 100644 pype/vendor/requests/packages/urllib3/connectionpool.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/_securetransport/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/_securetransport/bindings.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/_securetransport/low_level.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/appengine.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/ntlmpool.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/pyopenssl.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/securetransport.py delete mode 100644 pype/vendor/requests/packages/urllib3/contrib/socks.py delete mode 100644 pype/vendor/requests/packages/urllib3/exceptions.py delete mode 100644 pype/vendor/requests/packages/urllib3/fields.py delete mode 100644 pype/vendor/requests/packages/urllib3/filepost.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/backports/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/backports/makefile.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/ordered_dict.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/six.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 pype/vendor/requests/packages/urllib3/poolmanager.py delete mode 100644 pype/vendor/requests/packages/urllib3/request.py delete mode 100644 pype/vendor/requests/packages/urllib3/response.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/__init__.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/connection.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/request.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/response.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/retry.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/selectors.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/ssl_.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/timeout.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/url.py delete mode 100644 pype/vendor/requests/packages/urllib3/util/wait.py create mode 100644 pype/vendor/werkzeug/__init__.py create mode 100644 pype/vendor/werkzeug/_compat.py create mode 100644 pype/vendor/werkzeug/_internal.py create mode 100644 pype/vendor/werkzeug/_reloader.py create mode 100644 pype/vendor/werkzeug/contrib/__init__.py create mode 100644 pype/vendor/werkzeug/contrib/atom.py create mode 100644 pype/vendor/werkzeug/contrib/cache.py create mode 100644 pype/vendor/werkzeug/contrib/fixers.py create mode 100644 pype/vendor/werkzeug/contrib/iterio.py create mode 100644 pype/vendor/werkzeug/contrib/jsrouting.py create mode 100644 pype/vendor/werkzeug/contrib/limiter.py create mode 100644 pype/vendor/werkzeug/contrib/lint.py create mode 100644 pype/vendor/werkzeug/contrib/profiler.py create mode 100644 pype/vendor/werkzeug/contrib/securecookie.py create mode 100644 pype/vendor/werkzeug/contrib/sessions.py create mode 100644 pype/vendor/werkzeug/contrib/testtools.py create mode 100644 pype/vendor/werkzeug/contrib/wrappers.py create mode 100644 pype/vendor/werkzeug/datastructures.py create mode 100644 pype/vendor/werkzeug/debug/__init__.py create mode 100644 pype/vendor/werkzeug/debug/console.py create mode 100644 pype/vendor/werkzeug/debug/repr.py create mode 100644 pype/vendor/werkzeug/debug/shared/FONT_LICENSE create mode 100644 pype/vendor/werkzeug/debug/shared/console.png create mode 100644 pype/vendor/werkzeug/debug/shared/debugger.js create mode 100644 pype/vendor/werkzeug/debug/shared/jquery.js create mode 100644 pype/vendor/werkzeug/debug/shared/less.png create mode 100644 pype/vendor/werkzeug/debug/shared/more.png create mode 100644 pype/vendor/werkzeug/debug/shared/source.png create mode 100644 pype/vendor/werkzeug/debug/shared/style.css create mode 100644 pype/vendor/werkzeug/debug/shared/ubuntu.ttf create mode 100644 pype/vendor/werkzeug/debug/tbtools.py create mode 100644 pype/vendor/werkzeug/exceptions.py create mode 100644 pype/vendor/werkzeug/filesystem.py create mode 100644 pype/vendor/werkzeug/formparser.py create mode 100644 pype/vendor/werkzeug/http.py create mode 100644 pype/vendor/werkzeug/local.py create mode 100644 pype/vendor/werkzeug/posixemulation.py create mode 100644 pype/vendor/werkzeug/routing.py create mode 100644 pype/vendor/werkzeug/script.py create mode 100644 pype/vendor/werkzeug/security.py create mode 100644 pype/vendor/werkzeug/serving.py create mode 100644 pype/vendor/werkzeug/test.py create mode 100644 pype/vendor/werkzeug/testapp.py create mode 100644 pype/vendor/werkzeug/urls.py create mode 100644 pype/vendor/werkzeug/useragents.py create mode 100644 pype/vendor/werkzeug/utils.py create mode 100644 pype/vendor/werkzeug/websocket.py create mode 100644 pype/vendor/werkzeug/wrappers.py create mode 100644 pype/vendor/werkzeug/wsgi.py create mode 100644 pype/vendor/wrapt/__init__.py create mode 100644 pype/vendor/wrapt/arguments.py create mode 100644 pype/vendor/wrapt/decorators.py create mode 100644 pype/vendor/wrapt/importer.py create mode 100644 pype/vendor/wrapt/wrappers.py diff --git a/pype/api.py b/pype/api.py index 36094feb7f..3388b78c14 100644 --- a/pype/api.py +++ b/pype/api.py @@ -23,6 +23,7 @@ from . import ( Metadata, Dataflow ) + from .templates import ( load_data_from_templates, reset_data_from_templates, @@ -32,9 +33,12 @@ from .templates import ( get_asset, get_task, fill_avalon_workdir, - get_version_from_workfile + get_version_from_workfile, + make_workdir_path ) +from .lib import modified_environ + __all__ = [ # plugin classes "Extractor", @@ -62,6 +66,8 @@ __all__ = [ "get_task", "fill_avalon_workdir", "get_version_from_workfile", + "make_workdir_path", + "modified_environ", # preloaded templates "Anatomy", diff --git a/pype/editorial/__init__.py b/pype/editorial/__init__.py new file mode 100644 index 0000000000..d846cdd0fd --- /dev/null +++ b/pype/editorial/__init__.py @@ -0,0 +1,81 @@ +import os +import sys + +from avalon import api as avalon +from pyblish import api as pyblish +from app import api as app + +from .. import api + +log = api.Logger.getLogger(__name__, "editorial") + +AVALON_CONFIG = os.getenv("AVALON_CONFIG", "pype") + +PARENT_DIR = os.path.dirname(__file__) +PACKAGE_DIR = os.path.dirname(PARENT_DIR) +PLUGINS_DIR = os.path.join(PACKAGE_DIR, "plugins") + +PUBLISH_PATH = os.path.join( + PLUGINS_DIR, "editorial", "publish" +) + +if os.getenv("PUBLISH_PATH", None): + os.environ["PUBLISH_PATH"] = os.pathsep.join( + os.environ["PUBLISH_PATH"].split(os.pathsep) + + [PUBLISH_PATH] + ) +else: + os.environ["PUBLISH_PATH"] = PUBLISH_PATH + +LOAD_PATH = os.path.join(PLUGINS_DIR, "editorial", "load") +CREATE_PATH = os.path.join(PLUGINS_DIR, "editorial", "create") +INVENTORY_PATH = os.path.join(PLUGINS_DIR, "editorial", "inventory") + + +def install(): + api.fill_avalon_workdir() + + log.info("Registering Editorial plug-ins..") + pyblish.register_plugin_path(PUBLISH_PATH) + avalon.register_plugin_path(avalon.Loader, LOAD_PATH) + avalon.register_plugin_path(avalon.Creator, CREATE_PATH) + avalon.register_plugin_path(avalon.InventoryAction, INVENTORY_PATH) + + # Disable all families except for the ones we explicitly want to see + family_states = [ + "imagesequence", + "mov" + + ] + avalon.data["familiesStateDefault"] = False + avalon.data["familiesStateToggled"] = family_states + + # load data from templates + api.load_data_from_templates() + + # launch pico server + pico_server_launch() + + +def uninstall(): + log.info("Deregistering Editorial plug-ins..") + pyblish.deregister_plugin_path(PUBLISH_PATH) + avalon.deregister_plugin_path(avalon.Loader, LOAD_PATH) + avalon.deregister_plugin_path(avalon.Creator, CREATE_PATH) + + # reset data from templates + api.reset_data_from_templates() + + +def pico_server_launch(): + try: + args = [sys.executable, "-m", "pico.server", "pipeline"] + + returncode = app.forward( + args, + cwd=os.path.dirname(__file__) + ) + except Exception as e: + log.error(e) + log.error(sys.exc_info()) + # sys.exit(returncode) diff --git a/pype/editorial/pipeline.py b/pype/editorial/pipeline.py new file mode 100644 index 0000000000..5ae8255972 --- /dev/null +++ b/pype/editorial/pipeline.py @@ -0,0 +1,44 @@ +import os +import sys +import pico +from pico import PicoApp + +from app.api import forward +from pype import api as pype + +# remove all Handlers created by pico +for name, handler in [(handler.get_name(), handler) + for handler in pype.Logger.logging.root.handlers[:]]: + if "pype" not in str(name).lower(): + pype.Logger.logging.root.removeHandler(handler) + +log = pype.Logger.getLogger(__name__, "editorial") + + +@pico.expose() +def publish(json_data_path): + # load json_data_path; add context into data; damp + # create empty temp/json_data_get + # run standalone pyblish + pype_start = os.path.join(os.getenv('PYPE_SETUP_ROOT'), + "app", "pype-start.py") + + args = [pype_start, "--publish", + "-pp", os.environ["PUBLISH_PATH"], + "-d", "json_context_data_path", json_data_path + ] + + log.info(args) + + # start standalone pyblish qml + forward([ + sys.executable, "-u" + ] + args, + cwd=os.getenv('PYPE_SETUP_ROOT') + ) + + return {"json_back": "this/json/file"} + + +app = PicoApp() +app.register_module(__name__) diff --git a/pype/editorial/templates.py b/pype/editorial/templates.py new file mode 100644 index 0000000000..7ea542e66e --- /dev/null +++ b/pype/editorial/templates.py @@ -0,0 +1,41 @@ +from pype import api as pype + +log = pype.Logger.getLogger(__name__, "editorial") + + +def get_anatomy(**kwarg): + return pype.Anatomy + + +def get_dataflow(**kwarg): + log.info(kwarg) + host = kwarg.get("host", "editorial") + cls = kwarg.get("class", None) + preset = kwarg.get("preset", None) + assert any([host, cls]), log.error("premiera.templates.get_dataflow():" + "Missing mandatory kwargs `host`, `cls`") + + edtr_dataflow = getattr(pype.Dataflow, str(host), None) + edtr_dataflow_node = getattr(edtr_dataflow.nodes, str(cls), None) + if preset: + edtr_dataflow_node = getattr(edtr_dataflow_node, str(preset), None) + + log.info("Dataflow: {}".format(edtr_dataflow_node)) + return edtr_dataflow_node + + +def get_colorspace(**kwarg): + log.info(kwarg) + host = kwarg.get("host", "editorial") + cls = kwarg.get("class", None) + preset = kwarg.get("preset", None) + assert any([host, cls]), log.error("editorial.templates.get_colorspace():" + "Missing mandatory kwargs `host`, `cls`") + + edtr_colorspace = getattr(pype.Colorspace, str(host), None) + edtr_colorspace_node = getattr(edtr_colorspace, str(cls), None) + if preset: + edtr_colorspace_node = getattr(edtr_colorspace_node, str(preset), None) + + log.info("Colorspace: {}".format(edtr_colorspace_node)) + return edtr_colorspace_node diff --git a/pype/lib.py b/pype/lib.py index fc68e395bd..1469e8ce1b 100644 --- a/pype/lib.py +++ b/pype/lib.py @@ -3,6 +3,7 @@ import re import logging import importlib import itertools +import contextlib from .vendor import pather from .vendor.pather.error import ParseError @@ -14,6 +15,37 @@ import avalon log = logging.getLogger(__name__) +@contextlib.contextmanager +def modified_environ(*remove, **update): + """ + Temporarily updates the ``os.environ`` dictionary in-place. + + The ``os.environ`` dictionary is updated in-place so that the modification + is sure to work in all situations. + + :param remove: Environment variables to remove. + :param update: Dictionary of environment variables and values to add/update. + """ + env = os.environ + update = update or {} + remove = remove or [] + + # List of environment variables being updated or removed. + stomped = (set(update.keys()) | set(remove)) & set(env.keys()) + # Environment variables and values to restore on exit. + update_after = {k: env[k] for k in stomped} + # Environment variables and values to remove on exit. + remove_after = frozenset(k for k in update if k not in env) + + try: + env.update(update) + [env.pop(k, None) for k in remove] + yield + finally: + env.update(update_after) + [env.pop(k) for k in remove_after] + + def pairwise(iterable): """s -> (s0,s1), (s2,s3), (s4, s5), ...""" a = iter(iterable) @@ -337,14 +369,17 @@ def get_asset_data(asset=None): return data + def get_avalon_project_config_schema(): schema = 'avalon-core:config-1.0' return schema + def get_avalon_project_template_schema(): schema = {"schema": "avalon-core:inventory-1.0"} return schema + def get_avalon_project_template(): from app.api import Templates diff --git a/pype/plugins/editorial/publish/collect_context.py b/pype/plugins/editorial/publish/collect_context.py new file mode 100644 index 0000000000..ad93b6deec --- /dev/null +++ b/pype/plugins/editorial/publish/collect_context.py @@ -0,0 +1,12 @@ +import pyblish.api + + +class CollectContextDataEditorial(pyblish.api.ContextPlugin): + """Collecting data from temp json sent from premiera context""" + + label = "Collect Editorial Context" + order = pyblish.api.CollectorOrder + 0.1 + + def process(self, context): + data_path = context.data['json_context_data_path'] + self.log.info("Context is: {}".format(data_path)) diff --git a/pype/plugins/launcher/actions/Editorial.py b/pype/plugins/launcher/actions/Editorial.py new file mode 100644 index 0000000000..f52fb792d8 --- /dev/null +++ b/pype/plugins/launcher/actions/Editorial.py @@ -0,0 +1,66 @@ +import os +import sys +from avalon import io +from pprint import pprint +import acre + +from avalon import api, lib +import pype.api as pype + +from pype.api import Logger + +log = Logger.getLogger(__name__, "editorial") + + +class Editorial(api.Action): + + name = "editorial" + label = "Pype Editorial Server" + icon = "retweet" + order = 996 + + def is_compatible(self, session): + """Return whether the action is compatible with the session""" + if "AVALON_TASK" in session: + return True + return False + + def process(self, session, **kwargs): + """Implement the behavior for when the action is triggered + + Args: + session (dict): environment dictionary + + Returns: + Popen instance of newly spawned process + + """ + + with pype.modified_environ(**session): + # Get executable by name + app = lib.get_application(self.name) + executable = lib.which(app["executable"]) + + # Run as server + arguments = [] + + tools_env = acre.get_tools([self.name]) + env = acre.compute(tools_env) + env = acre.merge(env, current_env=dict(os.environ)) + + if not env.get('AVALON_WORKDIR', None): + pype.load_data_from_templates() + os.environ["AVALON_WORKDIR"] = pype.make_workdir_path( + pype.Anatomy) + pype.reset_data_from_templates() + + env.update(dict(os.environ)) + + try: + lib.launch(executable=executable, + args=arguments, + environment=env + ) + except Exception as e: + log.error(e) + return diff --git a/pype/plugins/launcher/actions/FusionRenderNode.py b/pype/plugins/launcher/actions/unused/FusionRenderNode.py similarity index 100% rename from pype/plugins/launcher/actions/FusionRenderNode.py rename to pype/plugins/launcher/actions/unused/FusionRenderNode.py diff --git a/pype/plugins/launcher/actions/unused/PremierePro.py b/pype/plugins/launcher/actions/unused/PremierePro.py new file mode 100644 index 0000000000..ddd941ee5c --- /dev/null +++ b/pype/plugins/launcher/actions/unused/PremierePro.py @@ -0,0 +1,58 @@ +import os +import sys +from pprint import pprint +import acre + +from avalon import api, lib +import pype.api as pype + + +class PremierePro(api.Action): + + name = "premiere_2019" + label = "Premiere Pro" + icon = "premiere_icon" + order = 996 + + def is_compatible(self, session): + """Return whether the action is compatible with the session""" + if "AVALON_TASK" in session: + return True + return False + + def process(self, session, **kwargs): + """Implement the behavior for when the action is triggered + + Args: + session (dict): environment dictionary + + Returns: + Popen instance of newly spawned process + + """ + + with pype.modified_environ(**session): + # Get executable by name + app = lib.get_application(self.name) + executable = lib.which(app["executable"]) + + # Run as server + arguments = [] + + tools_env = acre.get_tools([self.name]) + env = acre.compute(tools_env) + env = acre.merge(env, current_env=dict(os.environ)) + + if not env.get('AVALON_WORKDIR', None): + pype.load_data_from_templates() + os.environ["AVALON_WORKDIR"] = pype.make_workdir_path( + pype.Anatomy) + pype.reset_data_from_templates() + + env.update(dict(os.environ)) + + lib.launch(executable=executable, + args=arguments, + environment=env + ) + return diff --git a/pype/plugins/launcher/actions/VrayRenderSlave.py b/pype/plugins/launcher/actions/unused/VrayRenderSlave.py similarity index 100% rename from pype/plugins/launcher/actions/VrayRenderSlave.py rename to pype/plugins/launcher/actions/unused/VrayRenderSlave.py diff --git a/pype/plugins/premiere/publish/collect_context.py b/pype/plugins/premiere/publish/collect_context.py new file mode 100644 index 0000000000..e790dcf874 --- /dev/null +++ b/pype/plugins/premiere/publish/collect_context.py @@ -0,0 +1,12 @@ +import pyblish.api + + +class CollectContextDataPremiera(pyblish.api.ContextPlugin): + """Collecting data from temp json sent from premiera context""" + + label = "Collect Premiera Context" + order = pyblish.api.CollectorOrder + 0.1 + + def process(self, context): + data_path = context.data['json_context_data_path'] + self.log.info("Context is: {}".format(data_path)) diff --git a/pype/premiere/__init__.py b/pype/premiere/__init__.py new file mode 100644 index 0000000000..7f0acc11d2 --- /dev/null +++ b/pype/premiere/__init__.py @@ -0,0 +1,85 @@ +import os +import sys + +from pysync import walktree + +from avalon import api as avalon +from pyblish import api as pyblish +from app import api as app + +from .. import api +from pprint import pprint +log = api.Logger.getLogger(__name__, "premiere") + +AVALON_CONFIG = os.getenv("AVALON_CONFIG", "pype") +EXTENSIONS_PATH_LOCAL = os.getenv("EXTENSIONS_PATH", None) +EXTENSIONS_PATH_REMOTE = os.path.join(os.path.dirname(__file__), "extensions") +PARENT_DIR = os.path.dirname(__file__) +PACKAGE_DIR = os.path.dirname(PARENT_DIR) +PLUGINS_DIR = os.path.join(PACKAGE_DIR, "plugins") + +PUBLISH_PATH = os.path.join( + PLUGINS_DIR, "premiera", "publish" +) + +LOAD_PATH = os.path.join(PLUGINS_DIR, "premiera", "load") +CREATE_PATH = os.path.join(PLUGINS_DIR, "premiera", "create") +INVENTORY_PATH = os.path.join(PLUGINS_DIR, "premiera", "inventory") + + +def extensions_sync(): + import time + process_pairs = list() + # get extensions dir in pype.premiere.extensions + # build dir path to premiere cep extensions + for name in os.listdir(EXTENSIONS_PATH_REMOTE): + print(name) + src = os.path.join(EXTENSIONS_PATH_REMOTE, name) + dst = os.path.join(EXTENSIONS_PATH_LOCAL, name) + process_pairs.append((name, src, dst)) + + # synchronize all extensions + for name, src, dst in process_pairs: + if not os.path.exists(dst): + os.makedirs(dst, mode=0o777) + walktree(source=src, target=dst, options_input=["y", ">"]) + log.info("Extension {0} from `{1}` coppied to `{2}`".format( + name, src, dst + )) + time.sleep(10) + return + + +def install(): + api.fill_avalon_workdir() + + log.info("Registering Premiera plug-ins..") + pyblish.register_plugin_path(PUBLISH_PATH) + avalon.register_plugin_path(avalon.Loader, LOAD_PATH) + avalon.register_plugin_path(avalon.Creator, CREATE_PATH) + avalon.register_plugin_path(avalon.InventoryAction, INVENTORY_PATH) + + # Disable all families except for the ones we explicitly want to see + family_states = [ + "imagesequence", + "mov" + + ] + avalon.data["familiesStateDefault"] = False + avalon.data["familiesStateToggled"] = family_states + + # load data from templates + api.load_data_from_templates() + + # synchronize extensions + extensions_sync() + + +def uninstall(): + log.info("Deregistering Premiera plug-ins..") + pyblish.deregister_plugin_path(PUBLISH_PATH) + avalon.deregister_plugin_path(avalon.Loader, LOAD_PATH) + avalon.deregister_plugin_path(avalon.Creator, CREATE_PATH) + + # reset data from templates + api.reset_data_from_templates() diff --git a/pype/premiere/extensions/pype_avalon/PProPanel.jsx b/pype/premiere/extensions/pype_avalon/PProPanel.jsx new file mode 100644 index 0000000000..40256158f5 --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/PProPanel.jsx @@ -0,0 +1,66 @@ +/************************************************************************* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2014 Adobe +* All Rights Reserved. +* +* NOTICE: Adobe permits you to use, modify, and distribute this file in +* accordance with the terms of the Adobe license agreement accompanying +* it. If you have received this file from a source other than Adobe, +* then your use, modification, or distribution of it requires the prior +* written permission of Adobe and also Pype-Club +**************************************************************************/ +if(typeof($)=='undefined'){ + $={}; +} + +$._ext = { + //Evaluate a file and catch the exception. + evalFile : function(path) { + try { + $.evalFile(path); + } catch (e) {alert("Exception:" + e);} + }, + // Evaluate all the files in the given folder + evalFiles: function(jsxFolderPath) { + var folder = new Folder(jsxFolderPath); + if (folder.exists) { + var jsxFiles = folder.getFiles("*.jsx"); + for (var i = 0; i < jsxFiles.length; i++) { + var jsxFile = jsxFiles[i]; + $._ext.evalFile(jsxFile); + } + } + }, + // entry-point function to call scripts more easily & reliably + callScript: function(dataStr) { + try { + var dataObj = JSON.parse(decodeURIComponent(dataStr)); + if ( + !dataObj || + !dataObj.namespace || + !dataObj.scriptName || + !dataObj.args + ) { + throw new Error('Did not provide all needed info to callScript!'); + } + // call the specified jsx-function + var result = $[dataObj.namespace][dataObj.scriptName].apply( + null, + dataObj.args + ); + // build the payload-object to return + var payload = { + err: 0, + result: result + }; + return encodeURIComponent(JSON.stringify(payload)); + } catch (err) { + var payload = { + err: err + }; + return encodeURIComponent(JSON.stringify(payload)); + } + } +}; diff --git a/pype/premiere/extensions/pype_avalon/ReadMe.md b/pype/premiere/extensions/pype_avalon/ReadMe.md new file mode 100644 index 0000000000..36257b49f5 --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/ReadMe.md @@ -0,0 +1,215 @@ +# Create panels for Premiere Pro + +*Last updated October 2018, current released version = Premiere Pro 13.0, also known as "Premiere Pro CC 2019". + +# Premiere Pro 13.0 : API Improvements + +We've added many new capabilities for the 13.0 release. All of these are exercised in the PProPanel sample, [available on GitHub](https://github.com/Adobe-CEP/Samples/tree/master/PProPanel). + +### Get and set footage interpretation + +All aspects of Premiere Pro's footage interpretation are now available via API. Among other workflows, this enables panels to replace a footage reference, while preserving existing interpretation information the user may have already set. + +### Get and set sequence settings + +Previously, it was possible to clone existing sequences, and create sequences from a sequence preset. It is now possible to get and set each individual sequence setting, providing much more granular control over sequences. + +### Detect trackItems which are reversed, have speed adjustments, or are adjustment layers + +This important information was previously unavailable. + +### Open projectItems in the Source monitor + +This allows for sequences, multi-cam sequences, still image sequences and merged clips to be opened in the Source monitor. + +### Create sub-sequences + +Lift/extract sections of existing sequences into new ones, with control over whether or not to adopt the track mapping present in the original. + +### Close open sequences + +Close superfluous/distracting sequences. + +### Consolidate Duplicates via API + +Invoke the same duplicate consolidation functionality available to users. + +# Create panels for Premiere Pro + +Further [relevant information](https://medium.com/adobetech/how-to-create-your-first-adobe-panel-in-6-easy-steps-f8bd4ed5778) is available from the Extensibility team; these items are included here as an overview. + +## 1. Obtain and install these + +- [Creative Cloud](http://creative.adobe.com). Use the Creative Cloud + application to install Premiere Pro CC and other Adobe applications with + which you'll be developing and testing, as well as ExtendScript Toolkit + (available under 'previous versions'). + +- The [CEP Test + Panel](https://github.com/Adobe-CEP/CEP-Resources/tree/master/CEP_8.x/Samples/CEP_HTML_Test_Extension-8.0) + shows the full capabilities of CEP panels. + +- The [PProPanel](https://github.com/Adobe-CEP/Samples/tree/master/PProPanel) + sample project is exhaustive in its exercise of Premiere Pro's ExtendScript + API. + +- The + [ZXPSignCmd](https://github.com/Adobe-CEP/CEP-Resources/tree/master/ZXPSignCMD/4.0.7) + signing utility creates signed .zxp bundles for Add-Ons or direct + distribution. + +- Use the [ExManCmd](https://www.adobeexchange.com/resources/28) command line + utility to test .zxp installation. + +## 2. Enable loading of unsigned panels + +*Note: Premiere Pro 13.0 integrates CEP9, so even if you had unsigned panels +loading before (using CEP7 or CEP8), you'll need to perform this step again, but for key CSXS.9.* + +On Mac, type the following into Terminal, then relaunch Finder (either via +rebooting, or from the Force Quit dialog): + +```html +defaults write /Users//Library/Preferences/com.adobe.CSXS.9.plist PlayerDebugMode 1 +``` + +On Windows, make the following registry entry (a new Key, of type String): + +![Registry image](payloads/Registry.png) + +## 3. Put panel into extensions directory + +Put `/PProPanel` or your own panel's containing directory here, to have Premiere +Pro load it: + +```html +Windows: C:\Program Files (x86)\Common Files\Adobe\CEP\extensions +Mac: /Library/Application Support/Adobe/CEP/extensions +``` + +## 4. Write and test your panel's JavaScript using Chrome debugger + +To enable debugging of panels using Chrome’s developer tools, put a file named +`.debug` into your extension’s folder (as a peer of the `/CSXS` folder). The +contents of the file should resemble the following (and the Extension ID must +match the one in the panel's manifest): + +```xml + + + + + + + + +``` + +When the panel is active, you can debug the panel in your web browser by +browsing to `localhost:7777`, and selecting your panel: + +![Localhost screenshot](payloads/localhost.png) + +Optional diagnostics: Turn on CEP logging. Find CEP logs (distinct from Premiere +Pro's logs) here. Note that Mac Library path is the system's library, not the +user's. Also, note that logging WILL impact performance. + +```html +Windows: %\AppData\Local\Temp\csxs8-PPRO.log +Mac: /Library/Logs/CSXS/csxs8-PPRO.log +``` + +Set logging level in Windows Registry (see above), or MacOS X .plist: + +```html +defaults write /Users//Library/Preferences/com.adobe.CSXS.7.plist LogLevel 6 +``` + +## 5. Create your panel's ExtendScript using ExtendScript Toolkit (ESTK) + +Launch ExtendScript Toolkit, select the correct version of Premiere Pro from the +drop-down menu, then then click the chain link to connect. + +![ESTK Screenshot](payloads/estk.png) + +Once in the session, you can hit breakpoints, and use ExtendScript Toolkit's +Data Browser to view the ExtendScript DOM. + +Here's a [screen video](https://www.dropbox.com/s/lwo8jg0klxkq91s/walkthru.mp4) +showing how to debug panels at both the JavaScript and ExtendScript levels. + +## 6. Package and deploy your panel + +Further [relevant information](https://github.com/Adobe-CEP/Getting-Started-guides/tree/master/Package%20Distribute%20Install) is available from the Extensibility team. + +You can either generate a self-signed certificate (ZXPSignCmd will make them for +you), or get one from a commercial security provider. Here's an example: + +```bash + ./ZXPSignCmd -selfSignedCert US California Adobe "Bruce Bullis" password certificate.p12 +``` + +To sign directory `/PanelDir` with `certificate.p12`, do the following: + +```bash + ./ZXPSignCmd -sign panelDir/ PanelName.zxp certificate.p12 password -tsa http://timestamp.digicert.com/ +``` + +Submit your panel to the [Adobe Add-Ons +site](https://www.adobeexchange.com/producer) for approval, and distribution. +You can also directly supply the .zxp file enterprise customers, and those who +do not connect their systems to the public internet, for installation using +[ExManCmd](https://www.adobeexchange.com/resources/28), the command line version +of Extension Manager. + +If you encounter any issues with the Add-Ons store or ExManCmd, please [contact +the Add-Ons team](mailto:jferman@adobe.com). + +# Previous Updates + +## What was new in 12.1 + +### Get and set the current Project panel selection + +It's now possible for a panel to know which `projectItems` are selected, and to select projectItems as appropriate. + +### Consolidate and Transcode API + +All functionality available from Premiere Pro's Project Manager dialog, is now available to panels. + +### Improved time resolution for trackItems + +We now provide (and accept) time values for track items in ticks, eliminating an opportunity for rounding error. + +### Import and change Motion Graphics templates (.mogrts) + +Panels can now insert .mogrt files into sequences, and change the parameters of those .mogrts as desired. + +### Forcibly replace footage + +It's now possible to force Premiere Pro to update the path to a given `projectItem`, even if Premiere Pro doesn't think such a change is advisable. + +### Identify sequences + +All `projectItems` now have an `isSequence()` method; this eliminates the need to compare a list of 'all project items' against a list of 'all sequences', to determine which `projectItems` are and are not sequences. + +### Set the frame rate for projectItems + +Use the handy new `setOverrideFramerate()`. + +### API Documentation + +While the sample panel should continue to be your first option for working example code, Premiere Pro's ExtendScript API [is documented here](http://ppro.aenhancers.com), to enable developer participation. + + +## What was new in 12.0 + +- We've extended our new, not-in-the-QE-DOM Source monitor object, to close the [front-most](https://github.com/Adobe-CEP/Samples/blob/master/PProPanel/jsx/PPRO/Premiere.jsx#L1465) or [all open clips](https://github.com/Adobe-CEP/Samples/blob/master/PProPanel/jsx/PPRO/Premiere.jsx#L1469). + +- [Change the Label](https://github.com/Adobe-CEP/Samples/blob/master/PProPanel/jsx/PPRO/Premiere.jsx#L1473) assigned to projectItems. + +- Query PPro for the [current insertion bin](https://github.com/Adobe-CEP/Samples/blob/master/PProPanel/jsx/PPRO/Premiere.jsx#L1486), the default target for items imported into the project (but not via drag). *Previously, you could set, but not get, the insertion bin.* + +- [Import Compositions](https://github.com/Adobe-CEP/Samples/blob/master/PProPanel/jsx/PPRO/Premiere.jsx#L1502) by name, from After Effects projects. + +- Open PPro's Events panel to see PProPanel's feedback; I've minimized modal alerts. diff --git a/pype/premiere/extensions/pype_avalon/jsx/PPRO/PPro_API_Constants.jsx b/pype/premiere/extensions/pype_avalon/jsx/PPRO/PPro_API_Constants.jsx new file mode 100644 index 0000000000..17524d6968 --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/jsx/PPRO/PPro_API_Constants.jsx @@ -0,0 +1,60 @@ +/************************************************************************* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2014 Adobe +* All Rights Reserved. +* +* NOTICE: Adobe permits you to use, modify, and distribute this file in +* accordance with the terms of the Adobe license agreement accompanying +* it. If you have received this file from a source other than Adobe, +* then your use, modification, or distribution of it requires the prior +* written permission of Adobe. +**************************************************************************/ +// time display types + +TIMEDISPLAY_24Timecode = 100; +TIMEDISPLAY_25Timecode = 101; +TIMEDISPLAY_2997DropTimecode = 102; +TIMEDISPLAY_2997NonDropTimecode = 103; +TIMEDISPLAY_30Timecode = 104; +TIMEDISPLAY_50Timecode = 105; +TIMEDISPLAY_5994DropTimecode = 106; +TIMEDISPLAY_5994NonDropTimecode = 107; +TIMEDISPLAY_60Timecode = 108; +TIMEDISPLAY_Frames = 109; +TIMEDISPLAY_23976Timecode = 110; +TIMEDISPLAY_16mmFeetFrames = 111; +TIMEDISPLAY_35mmFeetFrames = 112; +TIMEDISPLAY_48Timecode = 113; +TIMEDISPLAY_AudioSamplesTimecode = 200; +TIMEDISPLAY_AudioMsTimecode = 201; + +// field type constants + +FIELDTYPE_Progressive = 0; +FIELDTYPE_UpperFirst = 1; +FIELDTYPE_LowerFirst = 2; + +// audio channel types + +AUDIOCHANNELTYPE_Mono = 0; +AUDIOCHANNELTYPE_Stereo = 1; +AUDIOCHANNELTYPE_51 = 2; +AUDIOCHANNELTYPE_Multichannel = 3; +AUDIOCHANNELTYPE_4Channel = 4; +AUDIOCHANNELTYPE_8Channel = 5; + +// vr projection type + +VRPROJECTIONTYPE_None = 0; +VRPROJECTIONTYPE_Equirectangular = 1; + +// vr stereoscopic type + +VRSTEREOSCOPICTYPE_Monoscopic = 0; +VRSTEREOSCOPICTYPE_OverUnder = 1; +VRSTEREOSCOPICTYPE_SideBySide = 2; + +NOT_SET = -400000; + diff --git a/pype/premiere/extensions/pype_avalon/jsx/PPRO/Premiere.jsx b/pype/premiere/extensions/pype_avalon/jsx/PPRO/Premiere.jsx new file mode 100644 index 0000000000..3003aaf4b8 --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/jsx/PPRO/Premiere.jsx @@ -0,0 +1,2382 @@ +/************************************************************************* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2014 Adobe +* All Rights Reserved. +* +* NOTICE: Adobe permits you to use, modify, and distribute this file in +* accordance with the terms of the Adobe license agreement accompanying +* it. If you have received this file from a source other than Adobe, +* then your use, modification, or distribution of it requires the prior +* written permission of Adobe. +**************************************************************************/ +#include "PPro_API_Constants.jsx" + +$._PPP_={ + + createDeepFolderStructure : function(foldersArray, maxDepth) { + if (typeof foldersArray !== 'object' || foldersArray.length <= 0) { + throw new Error('No valid folders array was provided!'); + } + + // if the first folder already exists, throw error + for (var i = 0; i < app.project.rootItem.children.numItems; i++) { + var curChild = app.project.rootItem.children[i]; + if (curChild.type === ProjectItemType.BIN && curChild.name === foldersArray[0]) { + throw new Error('Folder with name "' + curChild.name + '" already exists!'); + } + } + + // create the deep folder structure + var currentBin = app.project.rootItem.createBin(foldersArray[0]); + for (var m = 1; m < foldersArray.length && m < maxDepth; i++) { + currentBin = currentBin.createBin(foldersArray[i]); + } + }, + + getVersionInfo : function() { + return 'PPro ' + app.version + 'x' + app.build; + }, + + getUserName : function() { + var homeDir = new File('~/'); + var userName = homeDir.displayName; + homeDir.close(); + return userName; + }, + + keepPanelLoaded : function() { + app.setExtensionPersistent("com.adobe.PProPanel", 0); // 0, while testing (to enable rapid reload); 1 for "Never unload me, even when not visible." + }, + + updateGrowingFile : function() { + var numItems = app.project.rootItem.children.numItems; + for (var i = 0; i < numItems; i++){ + var currentItem = app.project.rootItem.children[i]; + if (currentItem){ + currentItem.refreshMedia(); + } + } + }, + + getSep : function() { + if (Folder.fs == 'Macintosh') { + return '/'; + } else { + return '\\'; + } + }, + + saveProject : function() { + app.project.save(); + }, + + exportCurrentFrameAsPNG : function() { + app.enableQE(); + var activeSequence = qe.project.getActiveSequence(); // note: make sure a sequence is active in PPro UI + if (activeSequence) { + // Create a file name based on timecode of frame. + var time = activeSequence.CTI.timecode; // CTI = Current Time Indicator. + var removeThese = /:|;/ig; // Why? Because Windows chokes on colons. + time = time.replace(removeThese, '_'); + var outputPath = new File("~/Desktop"); + var outputFileName = outputPath.fsName + $._PPP_.getSep() + time + '___' + activeSequence.name; + activeSequence.exportFramePNG(time, outputFileName); + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + renameFootage : function() { + var item = app.project.rootItem.children[0]; // assumes the zero-th item in the project is footage. + if (item) { + item.name = item.name + ", updated by PProPanel."; + } else { + $._PPP_.updateEventPanel("No project items found."); + } + }, + + getActiveSequenceName : function() { + if (app.project.activeSequence) { + return app.project.activeSequence.name; + } else { + return "No active sequence."; + } + }, + + projectPanelSelectionChanged : function(projectItems, viewID) { + + var remainingArgs = projectItems.length; + var message = ""; + + if (remainingArgs){ + var message = remainingArgs + " items selected: "; + var view = viewID; + + // Concatenate selected project item names, into message. + for (var i = 0; i < projectItems.length; i++) { + message += projectItems[i].name; + remainingArgs--; + if (remainingArgs > 1) { + message += ', '; + } + if (remainingArgs === 1){ + message += ", and "; + } + if (remainingArgs === 0) { + message += "."; + } + } + } else { + message = '0 items selected.'; + } + app.setSDKEventMessage(message, 'info'); + }, + + registerProjectPanelSelectionChangedFxn : function() { + var success = app.bind("onSourceClipSelectedInProjectPanel", $._PPP_.projectPanelSelectionChanged); + }, + + saveCurrentProjectLayout : function() { + var currentProjPanelDisplay = app.project.getProjectPanelMetadata(); + if (currentProjPanelDisplay){ + var outFileName = 'Previous_Project_Panel_Display_Settings.xml'; + var actualProjectPath = new File(app.project.path); + var projDir = actualProjectPath.parent; + if (actualProjectPath){ + var completeOutputPath = projDir + $._PPP_.getSep() + outFileName; + var outFile = new File(completeOutputPath); + if (outFile){ + outFile.encoding = "UTF8"; + outFile.open("w", "TEXT", "????"); + outFile.write(currentProjPanelDisplay); + $._PPP_.updateEventPanel("Saved layout to next to the project."); + outFile.close(); + } + actualProjectPath.close(); + } + } else { + $._PPP_.updateEventPanel("Could not retrieve current project layout."); + } + }, + + setProjectPanelMeta : function() { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "XML files:*.xml"; + } + var fileToOpen = File.openDialog ( "Choose Project panel layout to open.", + filterString, + false); + if (fileToOpen) { + if (fileToOpen.fsName.indexOf('.xml')){ // We should really be more careful, but hey, it says it's XML! + fileToOpen.encoding = "UTF8"; + fileToOpen.open("r", "TEXT", "????"); + var fileContents = fileToOpen.read(); + if (fileContents){ + var setResult = app.project.setProjectPanelMetadata(fileContents); + if (setResult){ + $._PPP_.updateEventPanel("Could not update layout using " + fileToOpen.filename + "."); + } else { + $._PPP_.updateEventPanel("Updated layout from .xml file."); + } + } + } + } else { + $._PPP_.updateEventPanel("No valid layout file chosen."); + } + }, + + exportSequenceAsPrProj : function() { + var activeSequence = app.project.activeSequence; + if (activeSequence) { + var startTimeOffset = activeSequence.zeroPoint; + var prProjExtension = '.prproj'; + var outputName = activeSequence.name; + var outFolder = Folder.selectDialog(); + + if (outFolder) { + var completeOutputPath = outFolder.fsName + + $._PPP_.getSep() + + outputName + + prProjExtension; + + app.project.activeSequence.exportAsProject(completeOutputPath); + + $._PPP_.updateEventPanel("Exported " + app.project.activeSequence.name + " to " +completeOutputPath + "."); + } else { + $._PPP_.updateEventPanel("Could not find or create output folder."); + } + + // Here's how to import N sequences from a project. + // + // var seqIDsToBeImported = new Array; + // seqIDsToBeImported[0] = ID1; + // ... + // seqIDsToBeImported[N] = IDN; + // + //app.project.importSequences(pathToPrProj, seqIDsToBeImported); + + }else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + createSequenceMarkers : function() { + var activeSequence = app.project.activeSequence; + if (activeSequence) { + var markers = activeSequence.markers; + if (markers) { + var numMarkers = markers.numMarkers; + if (numMarkers > 0) { + var marker_index = 1; + for(var current_marker = markers.getFirstMarker(); + current_marker !== undefined; + current_marker = markers.getNextMarker(current_marker)){ + if (current_marker.name !== "") { + $._PPP_.updateEventPanel( 'Marker ' + marker_index + ' name = ' + current_marker.name + '.'); + } else { + $._PPP_.updateEventPanel( 'Marker ' + marker_index + ' has no name.'); + } + + if (current_marker.end.seconds > 0) { + $._PPP_.updateEventPanel( 'Marker ' + marker_index + ' duration = ' + (current_marker.end.seconds - current_marker.start.seconds) + ' seconds.'); + } else { + $._PPP_.updateEventPanel( 'Marker ' + marker_index + ' has no duration.'); + } + $._PPP_.updateEventPanel('Marker ' + marker_index + ' starts at ' + current_marker.start.seconds + ' seconds.'); + marker_index = marker_index + 1; + } + } + } + + var newCommentMarker = markers.createMarker(12.345); + newCommentMarker.name = 'Marker created by PProPanel.'; + newCommentMarker.comments = 'Here are some comments, inserted by PProPanel.'; + newCommentMarker.end = 15.6789; + + var newWebMarker = markers.createMarker(14.345); + newWebMarker.name = 'Web marker created by PProPanel.'; + newWebMarker.comments = 'Here are some comments, inserted by PProPanel.'; + newWebMarker.end = 17.6789; + newWebMarker.setTypeAsWebLink("http://www.adobe.com", "frame target"); + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + exportFCPXML : function() { + if (app.project.activeSequence) { + var projPath = new File(app.project.path); + var parentDir = projPath.parent; + var outputName = app.project.activeSequence.name; + var xmlExtension = '.xml'; + var outputPath = Folder.selectDialog("Choose the output directory"); + + if (outputPath) { + var completeOutputPath = outputPath.fsName + $._PPP_.getSep() + outputName + xmlExtension; + app.project.activeSequence.exportAsFinalCutProXML(completeOutputPath, 1); // 1 == suppress UI + var info = "Exported FCP XML for " + + app.project.activeSequence.name + + " to " + + completeOutputPath + + "."; + $._PPP_.updateEventPanel(info); + } else { + $._PPP_.updateEventPanel("No output path chosen."); + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + openInSource : function() { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + var fileToOpen = File.openDialog ( "Choose file to open.", + filterString, + false); + if (fileToOpen) { + app.sourceMonitor.openFilePath(fileToOpen.fsName); + app.sourceMonitor.play(1.73); // playback speed as float, 1.0 = normal speed forward + var position = app.sourceMonitor.getPosition(); // new in 13.0 + $._PPP_.updateEventPanel("Current Source monitor position: " + position.seconds + " seconds."); + fileToOpen.close(); + } else { + $._PPP_.updateEventPanel("No file chosen."); + } + }, + + searchForBinWithName : function (nameToFind) { + // deep-search a folder by name in project + var deepSearchBin = function(inFolder) { + if (inFolder && inFolder.name === nameToFind && inFolder.type === 2) { + return inFolder; + } else { + for (var i = 0; i < inFolder.children.numItems; i++) { + if (inFolder.children[i] && inFolder.children[i].type === 2) { + var foundBin = deepSearchBin(inFolder.children[i]); + if (foundBin) return foundBin; + } + } + } + return undefined; + }; + return deepSearchBin(app.project.rootItem); + }, + + importFiles : function() { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + if (app.project) { + var fileOrFilesToImport = File.openDialog ( "Choose files to import", // title + filterString, // filter available files? + true); // allow multiple? + if (fileOrFilesToImport) { + // We have an array of File objects; importFiles() takes an array of paths. + var importThese = []; + if (importThese){ + for (var i = 0; i < fileOrFilesToImport.length; i++) { + importThese[i] = fileOrFilesToImport[i].fsName; + } + app.project.importFiles(importThese, + 1, // suppress warnings + app.project.getInsertionBin(), + 0); // import as numbered stills + } + } else { + $._PPP_.updateEventPanel("No files to import."); + } + } + }, + + muteFun : function() { + if (app.project.activeSequence){ + for (var i = 0; i < app.project.activeSequence.audioTracks.numTracks; i++){ + var currentTrack = app.project.activeSequence.audioTracks[i]; + if (Math.random() > 0.5){ + currentTrack.setMute(!(currentTrack.isMuted())); + } + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + disableImportWorkspaceWithProjects : function() { + var prefToModify = 'FE.Prefs.ImportWorkspace'; + var appProperties = app.properties; + + if (appProperties){ + var propertyExists = app.properties.doesPropertyExist(prefToModify); + var propertyIsReadOnly = app.properties.isPropertyReadOnly(prefToModify); + var propertyValue = app.properties.getProperty(prefToModify); + + appProperties.setProperty(prefToModify, false, 1); // optional 3rd param : 0 = non-persistent, 1 = persistent (default) + var safetyCheck = app.properties.getProperty(prefToModify); + if (safetyCheck != propertyValue){ + $._PPP_.updateEventPanel("Changed \'Import Workspaces with Projects\' from " + propertyValue + " to " + safetyCheck + "."); + } + } else { + $._PPP_.updateEventPanel("Properties not found."); + } + }, + + turnOffStartDialog : function (){ + var prefToModify = 'MZ.Prefs.ShowQuickstartDialog'; + var appProperties = app.properties; + if (appProperties){ + var propertyExists = app.properties.doesPropertyExist(prefToModify); + var propertyIsReadOnly = app.properties.isPropertyReadOnly(prefToModify); + var originalValue = app.properties.getProperty(prefToModify); + + appProperties.setProperty(prefToModify, false, 1, 1); // optional 4th param : 0 = non-persistent, 1 = persistent (default) + var safetyCheck = app.properties.getProperty(prefToModify); + if (safetyCheck != originalValue){ + $._PPP_.updateEventPanel("Start dialog now OFF. Enjoy!"); + } else { + $._PPP_.updateEventPanel("Start dialog was already OFF."); + } + } else { + $._PPP_.updateEventPanel("Properties not found."); + } + }, + + replaceMedia : function() { + + // Note: This method of changing paths for projectItems is from the time + // before PPro supported full-res AND proxy paths for each projectItem. + // This can still be used, and will change the hi-res projectItem path, but + // if your panel supports proxy workflows, it should rely instead upon + // projectItem.setProxyPath() instead. + + var firstProjectItem = app.project.rootItem.children[0]; + if (firstProjectItem) { + if (firstProjectItem.canChangeMediaPath()) { + + // NEW in 9.0: setScaleToFrameSize() ensures that for all clips created from this footage, + // auto scale to frame size will be ON, regardless of the current user preference. + // This is important for proxy workflows, to avoid mis-scaling upon replacement. + + // Addendum: This setting will be in effect the NEXT time the projectItem is added to a + // sequence; it will not affect or reinterpret clips from this projectItem, already in + // sequences. + + firstProjectItem.setScaleToFrameSize(); + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + var replacementMedia = File.openDialog( "Choose new media file, for " + + firstProjectItem.name, + filterString, // file filter + false); // allow multiple? + + if (replacementMedia) { + var suppressWarnings = true; + firstProjectItem.name = replacementMedia.name + ", formerly known as " + firstProjectItem.name; + firstProjectItem.changeMediaPath(replacementMedia.fsName, suppressWarnings); // new in 12.1 + replacementMedia.close(); + } + } else { + $._PPP_.updateEventPanel("Couldn't change path of " + firstProjectItem.name + "."); + } + } else { + $._PPP_.updateEventPanel("No project items found."); + } + }, + + openProject : function() { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "Premiere Pro project files:*.prproj"; + } + var projToOpen = File.openDialog ( "Choose project:", + filterString, + false); + if ((projToOpen) && projToOpen.exists) { + app.openDocument( projToOpen.fsName, + 1, // suppress 'Convert Project' dialogs? + 1, // suppress 'Locate Files' dialogs? + 1); // suppress warning dialogs? + projToOpen.close(); + } + }, + + exportFramesForMarkers : function (){ + app.enableQE(); + var activeSequence = app.project.activeSequence; + if (activeSequence) { + var markers = activeSequence.markers; + var markerCount = markers.numMarkers; + if (markerCount){ + var firstMarker = markers.getFirstMarker(); + activeSequence.setPlayerPosition(firstMarker.start.ticks); + $._PPP_.exportCurrentFrameAsPNG(); + + var previousMarker = 0; + if (firstMarker){ + for(var i = 0; i < markerCount; i++){ + if (i === 0){ + currentMarker = markers.getNextMarker(firstMarker); + } else { + currentMarker = markers.getNextMarker(previousMarker); + } + if (currentMarker){ + activeSequence.setPlayerPosition(currentMarker.start.ticks); + previousMarker = currentMarker; + $._PPP_.exportCurrentFrameAsPNG(); + } + } + } + } else { + $._PPP_.updateEventPanel("No markers applied to " + activeSequence.name + "."); + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + createSequence : function(name) { + var someID = "xyz123"; + var seqName = prompt('Name of sequence?', '<<>>', 'Sequence Naming Prompt'); + app.project.createNewSequence(seqName, someID); + }, + + createSequenceFromPreset : function(presetPath) { + app.enableQE(); + var seqName = prompt('Name of sequence?', '<<>>', 'Sequence Naming Prompt'); + if (seqName) { + qe.project.newSequence(seqName, presetPath); + } + }, + + transcode : function(outputPresetPath) { + app.encoder.bind('onEncoderJobComplete', $._PPP_.onEncoderJobComplete); + app.encoder.bind('onEncoderJobError', $._PPP_.onEncoderJobError); + app.encoder.bind('onEncoderJobProgress', $._PPP_.onEncoderJobProgress); + app.encoder.bind('onEncoderJobQueued', $._PPP_.onEncoderJobQueued); + app.encoder.bind('onEncoderJobCanceled', $._PPP_.onEncoderJobCanceled); + + var projRoot = app.project.rootItem.children; + + if (projRoot.numItems){ + var firstProjectItem = app.project.rootItem.children[0]; + if (firstProjectItem){ + + app.encoder.launchEncoder(); // This can take a while; let's get the ball rolling. + + var fileOutputPath = Folder.selectDialog("Choose the output directory"); + if (fileOutputPath){ + var outputName = firstProjectItem.name.search('[.]'); + if (outputName == -1){ + outputName = firstProjectItem.name.length; + } + outFileName = firstProjectItem.name.substr(0, outputName); + outFileName = outFileName.replace('/', '-'); + var completeOutputPath = fileOutputPath.fsName + $._PPP_.getSep() + outFileName + '.mxf'; + var removeFromQueue = true; + var rangeToEncode = app.encoder.ENCODE_IN_TO_OUT; + app.encoder.encodeProjectItem( firstProjectItem, + completeOutputPath, + outputPresetPath, + rangeToEncode, + removeFromQueue); + app.encoder.startBatch(); + } + } else { + $._PPP_.updateEventPanel("No project items found."); + } + } else { + $._PPP_.updateEventPanel("Project is empty."); + } + }, + + transcodeExternal : function (outputPresetPath){ + app.encoder.launchEncoder(); + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + var fileToTranscode = File.openDialog ( "Choose file to open.", + filterString, + false); + if (fileToTranscode) { + var fileOutputPath = Folder.selectDialog("Choose the output directory"); + if (fileOutputPath){ + + var srcInPoint = 1.0; // encode start time at 1s (optional--if omitted, encode entire file) + var srcOutPoint = 3.0; // encode stop time at 3s (optional--if omitted, encode entire file) + var removeFromQueue = false; + + var result = app.encoder.encodeFile(fileToTranscode.fsName, + fileOutputPath.fsName, + outputPresetPath, + removeFromQueue, + srcInPoint, + srcOutPoint); + } + } + }, + + render : function(outputPresetPath) { + app.enableQE(); + var activeSequence = qe.project.getActiveSequence(); // we use a QE DOM function, to determine the output extension. + if (activeSequence) { + app.encoder.launchEncoder(); // This can take a while; let's get the ball rolling. + + var timeSecs = activeSequence.CTI.secs; // Just for reference, here's how to access the CTI + var timeFrames = activeSequence.CTI.frames; // (Current Time Indicator), for the active sequence. + var timeTicks = activeSequence.CTI.ticks; + var timeString = activeSequence.CTI.timecode; + + var seqInPoint = app.project.activeSequence.getInPoint(); // new in 9.0 + var seqOutPoint = app.project.activeSequence.getOutPoint(); // new in 9.0 + + var seqInPointAsTime = app.project.activeSequence.getInPointAsTime(); // new in 12.0 + var seqOutPointAsTime = app.project.activeSequence.getOutPointAsTime(); // new in 12.0 + + var projPath = new File(app.project.path); + var outputPath = Folder.selectDialog("Choose the output directory"); + + if ((outputPath) && projPath.exists){ + var outPreset = new File(outputPresetPath); + if (outPreset.exists === true){ + var outputFormatExtension = activeSequence.getExportFileExtension(outPreset.fsName); + if (outputFormatExtension){ + var outputFilename = activeSequence.name + '.' + outputFormatExtension; + + var fullPathToFile = outputPath.fsName + + $._PPP_.getSep() + + activeSequence.name + + "." + + outputFormatExtension; + + var outFileTest = new File(fullPathToFile); + + if (outFileTest.exists){ + var destroyExisting = confirm("A file with that name already exists; overwrite?", false, "Are you sure...?"); + if (destroyExisting){ + outFileTest.remove(); + outFileTest.close(); + } + } + + app.encoder.bind('onEncoderJobComplete', $._PPP_.onEncoderJobComplete); + app.encoder.bind('onEncoderJobError', $._PPP_.onEncoderJobError); + app.encoder.bind('onEncoderJobProgress', $._PPP_.onEncoderJobProgress); + app.encoder.bind('onEncoderJobQueued', $._PPP_.onEncoderJobQueued); + app.encoder.bind('onEncoderJobCanceled', $._PPP_.onEncoderJobCanceled); + + + // use these 0 or 1 settings to disable some/all metadata creation. + + app.encoder.setSidecarXMPEnabled(0); + app.encoder.setEmbeddedXMPEnabled(0); + + /* + + For reference, here's how to export from within PPro (blocking further user interaction). + + var seq = app.project.activeSequence; + + if (seq) { + seq.exportAsMediaDirect(fullPathToFile, + outPreset.fsName, + app.encoder.ENCODE_WORKAREA); + + Bonus: Here's how to compute a sequence's duration, in ticks. 254016000000 ticks/second. + var sequenceDuration = app.project.activeSequence.end - app.project.activeSequence.zeroPoint; + } + + */ + + var jobID = app.encoder.encodeSequence( app.project.activeSequence, + fullPathToFile, + outPreset.fsName, + app.encoder.ENCODE_WORKAREA, + 1); // Remove from queue upon successful completion? + $._PPP_.updateEventPanel('jobID = ' + jobID); + outPreset.close(); + } + } else { + $._PPP_.updateEventPanel("Could not find output preset."); + } + } else { + $._PPP_.updateEventPanel("Could not find/create output path."); + } + projPath.close(); + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + saveProjectCopy : function() { + var sessionCounter = 1; + var originalPath = app.project.path; + var outputPath = Folder.selectDialog("Choose the output directory"); + + if (outputPath) { + var absPath = outputPath.fsName; + var outputName = String(app.project.name); + var array = outputName.split('.', 2); + + outputName = array[0]+ sessionCounter + '.' + array[1]; + sessionCounter++; + + var fullOutPath = absPath + $._PPP_.getSep() + outputName; + + app.project.saveAs(fullOutPath); + + for (var a = 0; a < app.projects.numProjects; a++){ + var currentProject = app.projects[a]; + if (currentProject.path === fullOutPath){ + app.openDocument(originalPath); // Why first? So we don't frighten the user by making PPro's window disappear. :) + currentProject.closeDocument(); + } + } + } else { + $._PPP_.updateEventPanel("No output path chosen."); + } + }, + + mungeXMP : function(){ + var projectItem = app.project.rootItem.children[0]; // assumes first item is footage. + if (projectItem) { + if (ExternalObject.AdobeXMPScript === undefined) { + ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript'); + } + if (ExternalObject.AdobeXMPScript !== undefined) { // safety-conscious! + + var xmpBlob = projectItem.getXMPMetadata(); + var xmp = new XMPMeta(xmpBlob); + var oldSceneVal = ""; + var oldDMCreatorVal = ""; + + if (xmp.doesPropertyExist(XMPConst.NS_DM, "scene") === true){ + var myScene = xmp.getProperty(XMPConst.NS_DM, "scene"); + oldSceneVal = myScene.value; + } + + if (xmp.doesPropertyExist(XMPConst.NS_DM, "creator") === true){ + var myCreator = xmp.getProperty(XMPConst.NS_DM, "creator"); + oldCreatorVal = myCreator.value; + } + + // Regardless of whether there WAS scene or creator data, set scene and creator data. + + xmp.setProperty(XMPConst.NS_DM, "scene", oldSceneVal + " Added by PProPanel sample!"); + xmp.setProperty(XMPConst.NS_DM, "creator", oldDMCreatorVal + " Added by PProPanel sample!"); + + // That was the NS_DM creator; here's the NS_DC creator. + + var creatorProp = "creator"; + var containsDMCreatorValue = xmp.doesPropertyExist(XMPConst.NS_DC, creatorProp); + var numCreatorValuesPresent = xmp.countArrayItems(XMPConst.NS_DC, creatorProp); + var CreatorsSeparatedBy4PoundSigns = ""; + + if(numCreatorValuesPresent > 0) { + for (var z = 0; z < numCreatorValuesPresent; z++){ + CreatorsSeparatedBy4PoundSigns = CreatorsSeparatedBy4PoundSigns + xmp.getArrayItem(XMPConst.NS_DC, creatorProp, z + 1); + CreatorsSeparatedBy4PoundSigns = CreatorsSeparatedBy4PoundSigns + "####"; + } + $._PPP_.updateEventPanel(CreatorsSeparatedBy4PoundSigns); + + if (confirm("Replace previous?", false, "Replace existing Creator?")) { + xmp.deleteProperty(XMPConst.NS_DC, "creator"); + } + xmp.appendArrayItem(XMPConst.NS_DC, // If no values exist, appendArrayItem will create a value. + creatorProp, + numCreatorValuesPresent + " creator values were already present.", + null, + XMPConst.ARRAY_IS_ORDERED); + + } else { + + xmp.appendArrayItem(XMPConst.NS_DC, + creatorProp, + "PProPanel wrote the first value into NS_DC creator field.", + null, + XMPConst.ARRAY_IS_ORDERED); + } + var xmpAsString = xmp.serialize(); // either way, serialize and write XMP. + projectItem.setXMPMetadata(xmpAsString); + } + } else { + $._PPP_.updateEventPanel("Project item required."); + } + }, + + getProductionByName : function(nameToGet) { + var production; + for (var i = 0; i < productionList.numProductions; i++) { + var currentProduction = productionList[i]; + + if (currentProduction.name == nameToGet) { + production = currentProduction; + } + } + return production; + }, + + pokeAnywhere : function() { + var token = app.anywhere.getAuthenticationToken(); + var productionList = app.anywhere.listProductions(); + var isProductionOpen = app.anywhere.isProductionOpen(); + if (isProductionOpen === true) { + var sessionURL = app.anywhere.getCurrentEditingSessionURL(); + var selectionURL = app.anywhere.getCurrentEditingSessionSelectionURL(); + var activeSequenceURL = app.anywhere.getCurrentEditingSessionActiveSequenceURL(); + + var theOneIAskedFor = $._PPP_.getProductionByName("test"); + + if (theOneIAskedFor) { + var out = theOneIAskedFor.name + ", " + theOneIAskedFor.description; + $._PPP_.updateEventPanel("Found: " + out); // todo: put useful code here. + } + } else { + $._PPP_.updateEventPanel("No Production open."); + } + }, + + dumpOMF : function() { + var activeSequence = app.project.activeSequence; + if (activeSequence) { + var outputPath = Folder.selectDialog("Choose the output directory"); + if (outputPath){ + var absPath = outputPath.fsName; + var outputName = String(activeSequence.name) + '.omf'; + var fullOutPathWithName = absPath + $._PPP_.getSep() + outputName; + + app.project.exportOMF( app.project.activeSequence, // sequence + fullOutPathWithName, // output file path + 'OMFTitle', // OMF title + 48000, // sample rate (48000 or 96000) + 16, // bits per sample (16 or 24) + 1, // audio encapsulated flag (1 : yes or 0 : no) + 0, // audio file format (0 : AIFF or 1 : WAV) + 0, // trim audio files (0 : no or 1 : yes) + 0, // handle frames (if trim is 1, handle frames from 0 to 1000) + 0); // include pan flag (0 : no or 1 : yes) + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + addClipMarkers : function () { + if (app.project.rootItem.children.numItems > 0){ + var projectItem = app.project.rootItem.children[0]; // assumes first item is footage. + if (projectItem) { + if (projectItem.type == ProjectItemType.CLIP || projectItem.type == ProjectItemType.FILE) { + + markers = projectItem.getMarkers(); + + if (markers) { + var num_markers = markers.numMarkers; + var new_marker = markers.createMarker(12.345); + var guid = new_marker.guid; // new in 11.1 + + new_marker.name = 'Marker created by PProPanel.'; + new_marker.comments = 'Here are some comments, inserted by PProPanel.'; + new_marker.end = 15.6789; + + //default marker type == comment. To change marker type, call one of these: + + // new_marker.setTypeAsChapter(); + // new_marker.setTypeAsWebLink(); + // new_marker.setTypeAsSegmentation(); + // new_marker.setTypeAsComment(); + } + } else { + $._PPP_.updateEventPanel("Can only add markers to footage items."); + } + } else { + $._PPP_.updateEventPanel("Could not find first projectItem."); + } + } else { + $._PPP_.updateEventPanel("Project is empty."); + } + }, + + modifyProjectMetadata : function () { + var kPProPrivateProjectMetadataURI = "http://ns.adobe.com/premierePrivateProjectMetaData/1.0/"; + + var namefield = "Column.Intrinsic.Name"; + var tapename = "Column.Intrinsic.TapeName"; + var desc = "Column.PropertyText.Description"; + var logNote = "Column.Intrinsic.LogNote"; + var newField = "ExampleFieldName"; + + if (app.isDocumentOpen()) { + var projectItem = app.project.rootItem.children[0]; // just grabs first projectItem. + if (projectItem) { + if (ExternalObject.AdobeXMPScript === undefined) { + ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript'); + } + if (ExternalObject.AdobeXMPScript !== undefined) { // safety-conscious! + var projectMetadata = projectItem.getProjectMetadata(); + var successfullyAdded = app.project.addPropertyToProjectMetadataSchema(newField, "ExampleFieldLabel", 2); + + var xmp = new XMPMeta(projectMetadata); + var obj = xmp.dumpObject(); + + // var aliases = xmp.dumpAliases(); + + var namespaces = XMPMeta.dumpNamespaces(); + var found_name = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, namefield); + var found_tapename = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, tapename); + var found_desc = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, desc); + var found_custom = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, newField); + var foundLogNote = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, logNote); + var oldLogValue = ""; + var appendThis = "This log note inserted by PProPanel."; + var appendTextWasActuallyNew = false; + + if(foundLogNote){ + var oldLogNote = xmp.getProperty(kPProPrivateProjectMetadataURI, logNote); + if (oldLogNote){ + oldLogValue = oldLogNote.value; + } + } + + xmp.setProperty(kPProPrivateProjectMetadataURI, tapename, "***TAPENAME***"); + xmp.setProperty(kPProPrivateProjectMetadataURI, desc, "***DESCRIPTION***"); + xmp.setProperty(kPProPrivateProjectMetadataURI, namefield, "***NEWNAME***"); + xmp.setProperty(kPProPrivateProjectMetadataURI, newField, "PProPanel set this, using addPropertyToProjectMetadataSchema()."); + + + var array = []; + array[0] = tapename; + array[1] = desc; + array[2] = namefield; + array[3] = newField; + + var concatenatedLogNotes = ""; + + if (oldLogValue != appendThis){ // if that value is not exactly what we were going to add + if (oldLogValue.length > 0){ // if we have a valid value + concatenatedLogNotes += "Previous log notes: " + oldLogValue + " |||| "; + } + concatenatedLogNotes += appendThis; + xmp.setProperty(kPProPrivateProjectMetadataURI, logNote, concatenatedLogNotes); + array[4] = logNote; + } + + var str = xmp.serialize(); + projectItem.setProjectMetadata(str, array); + + // test: is it in there? + + var newblob = projectItem.getProjectMetadata(); + var newXMP = new XMPMeta(newblob); + var foundYet = newXMP.doesPropertyExist(kPProPrivateProjectMetadataURI, newField); + + if (foundYet){ + $._PPP_.updateEventPanel("PProPanel successfully added a field to the project metadata schema, and set a value for it."); + } + } + } else { + $._PPP_.updateEventPanel("No project items found."); + } + } + }, + + updatePAR : function() { + var item = app.project.rootItem.children[0]; + if (item) { + if ((item.type == ProjectItemType.FILE) || (item.type == ProjectItemType.CLIP)){ + // If there is an item, and it's either a clip or file... + item.setOverridePixelAspectRatio(185, 100); // anamorphic is BACK! ;) + } else { + $._PPP_.updateEventPanel('You cannot override the PAR of bins or sequences.'); + } + } else { + $._PPP_.updateEventPanel("No project items found."); + } + }, + + getnumAEProjectItems : function() { + var bt = new BridgeTalk(); + bt.target = 'aftereffects'; + bt.body = //'$._PPP_.updateEventPanel("Items in AE project: " + app.project.rootFolder.numItems);app.quit();'; + 'alert("Items in AE project: " + app.project.rootFolder.numItems);app.quit();'; + bt.send(); + }, + + updateEventPanel : function(message) { + app.setSDKEventMessage(message, 'info'); + //app.setSDKEventMessage('Here is some information.', 'info'); + //app.setSDKEventMessage('Here is a warning.', 'warning'); + //app.setSDKEventMessage('Here is an error.', 'error'); // Very annoying; use sparingly. + }, + + walkAllBinsForFootage : function(parentItem, outPath){ + for (var j = 0; j < parentItem.children.numItems; j++){ + var currentChild = parentItem.children[j]; + if (currentChild){ + if (currentChild.type == ProjectItemType.BIN){ + $._PPP_.walkAllBinsForFootage(currentChild, outPath); // warning; recursion! + } else { + $._PPP_.dumpProjectItemXMP(currentChild, outPath); + } + } + } + }, + + searchBinForProjItemByName : function(i, containingBin, nameToFind){ + for (var j = i; j < containingBin.children.numItems; j++){ + var currentChild = containingBin.children[j]; + if (currentChild){ + if (currentChild.type == ProjectItemType.BIN){ + return $._PPP_.searchBinForProjItemByName(j, currentChild, nameToFind); // warning; recursion! + } else { + if (currentChild.name == nameToFind){ + return currentChild; + } else { + currentChild = currentItem.children[j+1]; + if (currentChild){ + return $._PPP_.searchBinForProjItemByName(0, currentChild, nameToFind); + } + } + } + } + } + }, + + dumpProjectItemXMP : function (projectItem, outPath) { + var xmpBlob = projectItem.getXMPMetadata(); + var outFileName = projectItem.name + '.xmp'; + var completeOutputPath = outPath + $._PPP_.getSep() + outFileName; + var outFile = new File(completeOutputPath); + + var isThisASequence = projectItem.isSequence(); + + if (outFile){ + outFile.encoding = "UTF8"; + outFile.open("w", "TEXT", "????"); + outFile.write(xmpBlob.toString()); + outFile.close(); + } + }, + + addSubClip : function() { + var startTime = new Time; + startTime.seconds = 0.0; + var endTime = new Time; + endTime.seconds = 3.21; + var hasHardBoundaries = 0; + var sessionCounter = 1; + var takeVideo = 1; // optional, defaults to 1 + var takeAudio = 1; // optional, defaults to 1 + var projectItem = app.project.rootItem.children[0]; // just grabs the first item + if (projectItem) { + if ((projectItem.type == ProjectItemType.CLIP) || (projectItem.type == ProjectItemType.FILE)) { + var newSubClipName = prompt('Name of subclip?', projectItem.name + '_' + sessionCounter, 'Name your subclip'); + + var newSubClip = projectItem.createSubClip(newSubClipName, + startTime, + endTime, + hasHardBoundaries, + takeVideo, + takeAudio); + + if (newSubClip){ + newSubClip.setStartTime(12.345); + } + } else { + $._PPP_.updateEventPanel("Could not sub-clip " + projectItem.name + "."); + } + } else { + $._PPP_.updateEventPanel("No project item found."); + } + }, + + dumpXMPFromAllProjectItems : function() { + var numItemsInRoot = app.project.rootItem.children.numItems; + if (numItemsInRoot > 0) { + var outPath = Folder.selectDialog("Choose the output directory"); + if (outPath) { + for (var i = 0; i < numItemsInRoot; i++){ + var currentItem = app.project.rootItem.children[i]; + if (currentItem){ + if (currentItem.type == ProjectItemType.BIN){ + $._PPP_.walkAllBinsForFootage(currentItem, outPath.fsName); + } else { + $._PPP_.dumpProjectItemXMP(currentItem, outPath.fsName); + } + } + } + } + } else { + $._PPP_.updateEventPanel("No project items found."); + } + }, + + exportAAF : function() { + var sessionCounter = 1; + if (app.project.activeSequence){ + var outputPath = Folder.selectDialog("Choose the output directory"); + if (outputPath) { + var absPath = outputPath.fsName; + var outputName = String(app.project.name); + var array = outputName.split('.', 2); + outputName = array[0]+ sessionCounter + '.' + array[1]; + + sessionCounter++; + var fullOutPath = absPath + $._PPP_.getSep() + outputName + '.aaf'; + //var optionalPathToOutputPreset = null; New in 11.0.0, you can specify an output preset. + + app.project.exportAAF( app.project.activeSequence, // which sequence + fullOutPath, // output path + 1, // mix down video? + 0, // explode to mono? + 96000, // sample rate + 16, // bits per sample + 0, // embed audio? + 0, // audio file format? 0 = aiff, 1 = wav + 0, // trim sources? + 0/*, // number of 'handle' frames + optionalPathToOutputPreset*/); // optional; .epr file to use + } else { + $._PPP_.updateEventPanel("Couldn't create AAF output."); + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + setScratchDisk : function (){ + var scratchPath = Folder.selectDialog("Choose new scratch disk directory"); + if ((scratchPath) && scratchPath.exists) { + app.setScratchDiskPath(scratchPath.fsName, ScratchDiskType.FirstAutoSaveFolder); // see ScratchDiskType object, in ESTK. + } + }, + + getProjectProxySetting : function() { + var returnVal = ""; + if (app.project){ + var returnVal = "No sequence detected in " + app.project.name + "."; + if (app.getEnableProxies()) { + returnVal = 'true'; + } else { + returnVal = 'false'; + } + } else { + returnVal = "No project available."; + } + return returnVal; + }, + + toggleProxyState : function() { + var update = "Proxies for " + app.project.name + " turned "; + if (app.getEnableProxies()) { + app.setEnableProxies(0); + update = update + "OFF."; + app.setSDKEventMessage(update, 'info'); + } else { + app.setEnableProxies(1); + update = update + "ON."; + app.setSDKEventMessage(update, 'info'); + } + }, + + setProxiesON : function () { + var firstProjectItem = app.project.rootItem.children[0]; + if (firstProjectItem) { + if (firstProjectItem.canProxy()){ + var shouldAttachProxy = true; + if (firstProjectItem.hasProxy()) { + shouldAttachProxy = confirm(firstProjectItem.name + " already has an assigned proxy. Re-assign anyway?", false, "Are you sure...?"); + } + if (shouldAttachProxy) { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + var proxyPath = File.openDialog( "Choose proxy for " + firstProjectItem.name + ":", + filterString, + false); + if (proxyPath.exists){ + firstProjectItem.attachProxy(proxyPath.fsName, 0); + } else { + $._PPP_.updateEventPanel("Could not attach proxy from " + proxyPath + "."); + } + } + } else { + $._PPP_.updateEventPanel("Cannot attach a proxy to " + firstProjectItem.name + "."); + } + } else { + $._PPP_.updateEventPanel("No project item available."); + } + }, + + clearCache : function () { + app.enableQE(); + MediaType = {}; + + // Magical constants from Premiere Pro's internal automation. + + MediaType.VIDEO = "228CDA18-3625-4d2d-951E-348879E4ED93"; + MediaType.AUDIO = "80B8E3D5-6DCA-4195-AEFB-CB5F407AB009"; + MediaType.ANY = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"; + qe.project.deletePreviewFiles(MediaType.ANY); + $._PPP_.updateEventPanel("All video and audio preview files deleted."); + }, + + randomizeSequenceSelection : function (){ + var sequence = app.project.activeSequence; + + if (sequence){ + var trackGroups = [ sequence.audioTracks, sequence.videoTracks ]; + var trackGroupNames = [ "audioTracks", "videoTracks" ]; + var updateUI = true; + var before; + + for(var gi = 0; gi<2; gi++) { + $._PPP_.updateEventPanel(trackGroupNames[gi]); + group = trackGroups[gi]; + for(var ti=0; ti" : clip.projectItem.name); + before = clip.isSelected(); + + // randomly select clips + clip.setSelected((Math.random() > 0.5), updateUI); + + if (clip.isAdjustmentLayer()){ // new in 13.0 + $._PPP_.updateEventPanel("Clip named \"" + clip.name + "\" is an adjustment layer."); + } + + // Note; there's no good place to exercise this code yet, but + // I wanted to provide example usage. + + var allClipsInThisSequenceFromSameSource = clip.getLinkedItems(); + + if (allClipsInThisSequenceFromSameSource){ + $._PPP_.updateEventPanel("Found " + allClipsInThisSequenceFromSameSource.numItems + " clips from " + clip.projectItem.name + ", in this sequence."); + } + beforeSelected = before ? "Y" : "N"; + afterSelected = clip.selected ? "Y" : "N"; + $._PPP_.updateEventPanel("clip : " + ci + " " + name + " " + beforeSelected + " -> " + afterSelected); + } + + for(var tni=0; tni 0.5), updateUI); + + beforeSelected = before ? "Y" : "N"; + afterSelected = transition.selected ? "Y" : "N"; + + $._PPP_.updateEventPanel('transition: ' + tni + " " + beforeSelected + " -> " + afterSelected); + } + } + } + } else { + $._PPP_.updateEventPanel("no active sequence."); + } + }, + + // Define a couple of callback functions, for AME to use during render. + + onEncoderJobComplete : function (jobID, outputFilePath) { + var eoName; + + if (Folder.fs == 'Macintosh') { + eoName = "PlugPlugExternalObject"; + } else { + eoName = "PlugPlugExternalObject.dll"; + } + + var suffixAddedByPPro = '_1'; // You should really test for any suffix. + var withoutExtension = outputFilePath.slice(0,-4); // trusting 3 char extension + var lastIndex = outputFilePath.lastIndexOf("."); + var extension = outputFilePath.substr(lastIndex + 1); + + if (outputFilePath.indexOf(suffixAddedByPPro)){ + $._PPP_.updateEventPanel(" Output filename was changed: the output preset name may have been added, or there may have been an existing file with that name. This would be a good place to deal with such occurrences."); + } + + var mylib = new ExternalObject('lib:' + eoName); + var eventObj = new CSXSEvent(); + + eventObj.type = "com.adobe.csxs.events.PProPanelRenderEvent"; + eventObj.data = "Rendered Job " + jobID + ", to " + outputFilePath + "."; + + eventObj.dispatch(); + }, + + onEncoderJobError : function (jobID, errorMessage) { + var eoName; + + if (Folder.fs === 'Macintosh') { + eoName = "PlugPlugExternalObject"; + } else { + eoName = "PlugPlugExternalObject.dll"; + } + + var mylib = new ExternalObject('lib:' + eoName); + var eventObj = new CSXSEvent(); + + eventObj.type = "com.adobe.csxs.events.PProPanelRenderEvent"; + eventObj.data = "Job " + jobID + " failed, due to " + errorMessage + "."; + eventObj.dispatch(); + }, + + onEncoderJobProgress : function (jobID, progress) { + $._PPP_.updateEventPanel('onEncoderJobProgress called. jobID = ' + jobID + '. progress = ' + progress + '.'); + }, + + onEncoderJobQueued : function (jobID) { + app.encoder.startBatch(); + }, + + onEncoderJobCanceled : function (jobID) { + $._PPP_.updateEventPanel('OnEncoderJobCanceled called. jobID = ' + jobID + '.'); + }, + + onPlayWithKeyframes : function () { + var seq = app.project.activeSequence; + if (seq) { + var firstVideoTrack = seq.videoTracks[0]; + if (firstVideoTrack){ + var firstClip = firstVideoTrack.clips[0]; + if (firstClip){ + var clipComponents = firstClip.components; + if (clipComponents){ + for (var i = 0; i < clipComponents.numItems; ++i){ + $._PPP_.updateEventPanel('component ' + i + ' = ' + clipComponents[i].matchName + ' : ' + clipComponents[i].displayName); + } + if (clipComponents.numItems > 2){ + + // 0 = clip + // 1 = Opacity + // N effects, then... + // Shape layer (new in 12.0) + + var blur = clipComponents[2]; // Assume Gaussian Blur is the first effect applied to the clip. + if (blur){ + var blurProps = blur.properties; + if (blurProps){ + for( var j = 0; j < blurProps.numItems; ++j){ + $._PPP_.updateEventPanel('param ' + j + ' = ' + blurProps[j].displayName); + } + var blurriness = blurProps[0]; + if (blurriness){ + if (!blurriness.isTimeVarying()){ + blurriness.setTimeVarying(true); + } + for(var k = 0; k < 20; ++k){ + updateUI = (k==9); // Decide how often to update PPro's UI + blurriness.addKey(k); + var blurVal = Math.sin(3.14159*i/5)*20+25; + blurriness.setValueAtKey(k, blurVal, updateUI); + } + } + var repeatEdgePixels = blurProps[2]; + if (repeatEdgePixels){ + if (!repeatEdgePixels.getValue()){ + updateUI = true; + repeatEdgePixels.setValue(true, updateUI); + } + } + // look for keyframe nearest to 4s with 1/10 second tolerance + var keyFrameTime = blurriness.findNearestKey(4.0, 0.1); + if (keyFrameTime !== undefined){ + $._PPP_.updateEventPanel('Found keyframe = ' + keyFrameTime.seconds); + } else { + $._PPP_.updateEventPanel('Keyframe not found.'); + } + + // scan keyframes, forward + + keyFrameTime = blurriness.findNearestKey(0.0, 0.1); + var lastKeyFrameTime = keyFrameTime; + while(keyFrameTime !== undefined){ + $._PPP_.updateEventPanel('keyframe @ ' + keyFrameTime.seconds); + lastKeyFrameTime = keyFrameTime; + keyFrameTime = blurriness.findNextKey(keyFrameTime); + } + + // scan keyframes, backward + keyFrameTime = lastKeyFrameTime; + while(keyFrameTime !== undefined){ + $._PPP_.updateEventPanel('keyframe @ ' + keyFrameTime.seconds); + lastKeyFrameTime = keyFrameTime; + keyFrameTime = blurriness.findPreviousKey(keyFrameTime); + } + + // get all keyframes + + var blurKeyframesArray = blurriness.getKeys(); + if (blurKeyframesArray){ + $._PPP_.updateEventPanel(blurKeyframesArray.length + ' keyframes found'); + } + + // remove keyframe at 19s + blurriness.removeKey(19); + + // remove keyframes in range from 0s to 5s + var shouldUpdateUI = true; + blurriness.removeKeyRange(0,5, shouldUpdateUI); + } + + } else { + $._PPP_.updateEventPanel("Please apply the Gaussian Blur effect to the first clip in the first video track of the active sequence."); + } + } + } + } + } + } else { + $._PPP_.updateEventPanel("no active sequence."); + } + }, + + extractFileNameFromPath : function (fullPath){ + var lastDot = fullPath.lastIndexOf("."); + var lastSep = fullPath.lastIndexOf("/"); + + if (lastDot > -1){ + return fullPath.substr( (lastSep +1), (fullPath.length - (lastDot + 1))); + } else { + return fullPath; + } + }, + + onProxyTranscodeJobComplete : function (jobID, outputFilePath) { + var suffixAddedByPPro = '_1'; // You should really test for any suffix. + var withoutExtension = outputFilePath.slice(0,-4); // trusting 3 char extension + var lastIndex = outputFilePath.lastIndexOf("."); + var extension = outputFilePath.substr(lastIndex + 1); + + var wrapper = []; + wrapper[0] = outputFilePath; + + var nameToFind = 'Proxies generated by PProPanel'; + var targetBin = $._PPP_.getPPPInsertionBin(); + if (targetBin){ + app.project.importFiles(wrapper); + } + }, + + onProxyTranscodeJobError : function (jobID, errorMessage) { + $._PPP_.updateEventPanel(errorMessage); + }, + + onProxyTranscodeJobQueued : function (jobID) { + app.encoder.startBatch(); + }, + + ingestFiles : function(outputPresetPath) { + app.encoder.bind('onEncoderJobComplete', $._PPP_.onProxyTranscodeJobComplete); + app.encoder.bind('onEncoderJobError', $._PPP_.onProxyTranscodeJobError); + app.encoder.bind('onEncoderJobQueued', $._PPP_.onProxyTranscodeJobQueued); + app.encoder.bind('onEncoderJobCanceled', $._PPP_.onEncoderJobCanceled); + + if (app.project) { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + var fileOrFilesToImport = File.openDialog( "Choose full resolution files to import", // title + filterString, // filter available files? + true); // allow multiple? + if (fileOrFilesToImport) { + var nameToFind = 'Proxies generated by PProPanel'; + var targetBin = $._PPP_.searchForBinWithName(nameToFind); + if (targetBin === 0) { + // If panel can't find the target bin, it creates it. + app.project.rootItem.createBin(nameToFind); + targetBin = $._PPP_.searchForBinWithName(nameToFind); + } + if (targetBin){ + targetBin.select(); + var importThese = []; // We have an array of File objects; importFiles() takes an array of paths. + if (importThese){ + for (var i = 0; i < fileOrFilesToImport.length; i++) { + importThese[i] = fileOrFilesToImport[i].fsName; + var justFileName = extractFileNameFromPath(importThese[i]); + var suffix = '_PROXY.mp4'; + var containingPath = fileOrFilesToImport[i].parent.fsName; + var completeProxyPath = containingPath + $._PPP_.getSep() + justFileName + suffix; + + var jobID = app.encoder.encodeFile(fileOrFilesToImport[i].fsName, + completeProxyPath, + outputPresetPath, + 0); + } + + app.project.importFiles(importThese, + 1, // suppress warnings + targetBin, + 0); // import as numbered stills + } + } else { + $._PPP_.updateEventPanel("Could not find or create target bin."); + } + } else { + $._PPP_.updateEventPanel("No files to import."); + } + } else { + $._PPP_.updateEventPanel("No project found."); + } + }, + + insertOrAppend : function() { + var seq = app.project.activeSequence; + if (seq){ + var first = app.project.rootItem.children[0]; + if (first){ + var numVTracks = seq.videoTracks.numTracks; + var targetVTrack = seq.videoTracks[(numVTracks - 1)]; + if (targetVTrack){ + // If there are already clips in this track, + // append this one to the end. Otherwise, + // insert at start time. + + if (targetVTrack.clips.numItems > 0){ + var lastClip = targetVTrack.clips[(targetVTrack.clips.numItems - 1)]; + if (lastClip){ + targetVTrack.insertClip(first, lastClip.end.seconds); + } + }else { + targetVTrack.insertClip(first, '00;00;00;00'); + } + } else { + $._PPP_.updateEventPanel("Could not find first video track."); + } + } else { + $._PPP_.updateEventPanel("Couldn't locate first projectItem."); + } + } else { + $._PPP_.updateEventPanel("no active sequence."); + } + }, + + overWrite : function() { + var seq = app.project.activeSequence; + if (seq){ + var first = app.project.rootItem.children[0]; + if (first) { + var vTrack1 = seq.videoTracks[0]; + if (vTrack1){ + var now = seq.getPlayerPosition(); + vTrack1.overwriteClip(first, now.seconds); + } else { + $._PPP_.updateEventPanel("Could not find first video track."); + } + } else { + $._PPP_.updateEventPanel("Couldn't locate first projectItem."); + } + } else { + $._PPP_.updateEventPanel("no active sequence."); + } + }, + + closeFrontSourceClip : function() { + app.sourceMonitor.closeClip(); + }, + + closeAllClipsInSourceMonitor : function() { + app.sourceMonitor.closeAllClips(); + }, + + changeLabel : function () { + var first = app.project.rootItem.children[0]; + if (first){ + var currentLabel = first.getColorLabel(); + var newLabel = currentLabel + 1; // 4 = Cerulean. 0 = Violet, 15 = Yellow. + if (newLabel > 15){ + newLabel = newLabel - 16; + } + app.setSDKEventMessage("Previous Label color = " + currentLabel + ".", 'info'); + first.setColorLabel(newLabel); + app.setSDKEventMessage("New Label color = " + newLabel + ".", 'info'); + } else { + $._PPP_.updateEventPanel("Couldn't locate first projectItem."); + } + }, + + getPPPInsertionBin : function () { + var nameToFind = "Here's where PProPanel puts things."; + + var targetBin = $._PPP_.searchForBinWithName(nameToFind); + + if (targetBin === undefined) { + // If panel can't find the target bin, it creates it. + app.project.rootItem.createBin(nameToFind); + targetBin = $._PPP_.searchForBinWithName(nameToFind); + } + if (targetBin) { + targetBin.select(); + return targetBin; + } + }, + + importComps : function () { + var targetBin = $._PPP_.getPPPInsertionBin(); + if (targetBin){ + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "All files:*.*"; + } + compNamesToImport = []; + + var aepToImport = File.openDialog ( "Choose After Effects project", // title + filterString, // filter available files? + false); // allow multiple? + if (aepToImport) { + var importAll = confirm("Import all compositions in project?", false, "Import all?"); + if (importAll){ + var result = app.project.importAllAEComps(aepToImport.fsName, targetBin); + } else { + var compName = prompt( 'Name of composition to import?', + '', + 'Which Comp to import'); + if (compName){ + compNamesToImport[0] = compName; + var importAECompResult = app.project.importAEComps(aepToImport.fsName, compNamesToImport, targetBin); + } else { + $._PPP_.updateEventPanel("Could not find Composition."); + } + } + } else { + $._PPP_.updateEventPanel("Could not open project."); + } + } else { + $._PPP_.updateEventPanel("Could not find or create target bin."); + } + }, + + consolidateProject : function () { + var pmo = app.projectManager.options; + + if (app.project.sequences.length){ + if (pmo) { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "Output Presets:*.epr"; + } + + var outFolder = Folder.selectDialog("Choose output directory."); + if (outFolder) { + + var presetPath = ""; + var useSpecificPreset = confirm("Would you like to select an output preset?", false, "Are you sure...?"); + if (useSpecificPreset){ + var useThisEPR = File.openDialog ( "Choose output preset (.epr file)", // title + filterString, // filter available files? + false); // allow multiple? + + if (useThisEPR){ + pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_PRESET; + pmo.encoderPresetFilePath = useThisEPR.fsName; + } + } else { + pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_SEQUENCE; + } + + var processAllSequences = confirm("Process all sequences? No = just the first sequence found.", true, "Process all?"); + + if (processAllSequences){ + pmo.includeAllSequences = true; + } else { + pmo.includeAllSequences = false; + pmo.affectedSequences = [app.project.sequences[0]]; + } + + pmo.clipTransferOption = pmo.CLIP_TRANSFER_TRANSCODE; + pmo.convertAECompsToClips = false; + pmo.convertSyntheticsToClips = false; + pmo.copyToPreventAlphaLoss = false; + pmo.destinationPath = outFolder.fsName; + pmo.excludeUnused = false; + pmo.handleFrameCount = 0; + pmo.includeConformedAudio = true; + pmo.includePreviews = true; + pmo.renameMedia = false; + + var result = app.projectManager.process(app.project); + var errorList = app.projectManager.errors; + + if(errorList.length){ + for (var k = 0; k < errorList.length; k++){ + $._PPP_.updateEventPanel(errorList[k][1]); + } + } else { + $._PPP_.updateEventPanel(app.project.name + " successfully processed to " + outFolder.fsName + "."); + } + return result; + } + } + + + } + if (pmo) { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "Output Presets:*.epr"; + } + + var outFolder = Folder.selectDialog("Choose output directory."); + if (outFolder) { + + var presetPath = ""; + var useSpecificPreset = confirm("Would you like to select an output preset?", false, "Are you sure...?"); + if (useSpecificPreset){ + var useThisEPR = File.openDialog ( "Choose output preset (.epr file)", // title + filterString, // filter available files? + false); // allow multiple? + + if (useThisEPR){ + pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_PRESET; + pmo.encoderPresetFilePath = useThisEPR.fsName; + } + } else { + pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_SEQUENCE; + } + + var processAllSequences = confirm("Process all sequences? No = just the first sequence found.", true, "Process all?"); + + if (processAllSequences){ + pmo.includeAllSequences = true; + } else { + pmo.includeAllSequences = false; + pmo.affectedSequences = [app.project.sequences[0]]; + } + + pmo.clipTransferOption = pmo.CLIP_TRANSFER_TRANSCODE; + pmo.convertAECompsToClips = false; + pmo.convertSyntheticsToClips = false; + pmo.copyToPreventAlphaLoss = false; + pmo.destinationPath = outFolder.fsName; + pmo.excludeUnused = false; + pmo.handleFrameCount = 0; + pmo.includeConformedAudio = true; + pmo.includePreviews = true; + pmo.renameMedia = false; + + var result = app.projectManager.process(app.project); + var errorList = app.projectManager.errors; + + if(errorList.length){ + for (var k = 0; k < errorList.length; k++){ + $._PPP_.updateEventPanel(errorList[k][1]); + } + } else { + $._PPP_.updateEventPanel(app.project.name + " successfully processed to " + outFolder.fsName + "."); + } + return result; + } + } + }, + + importMoGRT : function () { + var activeSeq = app.project.activeSequence; + if (activeSeq) { + var filterString = ""; + if (Folder.fs === 'Windows'){ + filterString = "Motion Graphics Templates:*.mogrt"; + } + var mogrtToImport = File.openDialog ( "Choose MoGRT", // title + filterString, // filter available files? + false); // allow multiple? + if (mogrtToImport){ + var targetTime = activeSeq.getPlayerPosition(); + var vidTrackOffset = 0; + var audTrackOffset = 0; + var newTrackItem = activeSeq.importMGT( mogrtToImport.fsName, + targetTime.ticks, + vidTrackOffset, + audTrackOffset); + if (newTrackItem){ + var moComp = newTrackItem.getMGTComponent(); + if (moComp){ + var params = moComp.properties; + for (var z = 0; z < params.numItems; z++){ + var thisParam = params[0]; + } + var srcTextParam = params.getParamForDisplayName("Main Title"); + if (srcTextParam){ + var val = srcTextParam.getValue(); + srcTextParam.setValue("New value set by PProPanel!"); + } + } + } + } else { + app.setSDKEventMessage('Unable to import ' + mogrtToImport.fsName + '.', 'error'); + } + } else { + app.setSDKEventMessage('No active sequence.'); + } + }, + + reportCurrentProjectSelection : function() { + var viewIDs = app.getProjectViewIDs(); // sample code optimized for a single open project + viewSelection = app.getProjectViewSelection(viewIDs[0]); + $._PPP_.projectPanelSelectionChanged(viewSelection, viewIDs[0]); + }, + + randomizeProjectSelection : function() { + var viewIDs = app.getProjectViewIDs(); + var firstProject = app.getProjectFromViewID(viewIDs[0]); + var arrayOfRandomProjectItems = []; + + for (var b = 0; b < app.project.rootItem.children.numItems; b++){ + var currentProjectItem = app.project.rootItem.children[b]; + if (Math.random() > 0.5){ + arrayOfRandomProjectItems.push(currentProjectItem); + } + } + if (arrayOfRandomProjectItems.length > 0){ + app.setProjectViewSelection(arrayOfRandomProjectItems, viewIDs[0]); + } + }, + + setAllProjectItemsOnline : function(startingBin){ + for (var k = 0; k < startingBin.children.numItems; k++){ + var currentChild = startingBin.children[k]; + if (currentChild){ + if (currentChild.type === ProjectItemType.BIN){ + $._PPP_.setAllProjectItemsOnline(currentChild); // warning; recursion! + } else if (currentChild.isOffline()){ + currentChild.changeMediaPath(currentChild.getMediaPath(), true); + if (currentChild.isOffline()){ + $._PPP_.updateEventPanel("Failed to bring \'" + currentChild.name + "\' online."); + } else { + $._PPP_.updateEventPanel("\'" + currentChild.name + "\' is once again online."); + } + } + } + } + }, + + setAllOnline : function(){ + var startingBin = app.project.rootItem; + $._PPP_.setAllProjectItemsOnline(startingBin); + }, + + setOffline : function() { + var viewIDs = app.getProjectViewIDs(); + for (var a = 0; a < app.projects.numProjects; a++){ + var currentProject = app.getProjectFromViewID(viewIDs[a]); + if (currentProject){ + if (currentProject.documentID === app.project.documentID){ // We're in the right project! + var selectedItems = app.getProjectViewSelection(viewIDs[a]); + for (var b = 0; b < selectedItems.length; b++){ + var currentItem = selectedItems[b]; + if (currentItem){ + if ((!currentItem.isSequence()) && (currentItem.type !== ProjectItemType.BIN)){ // For every selected item which isn't a bin or sequence... + if (currentItem.isOffline()){ + $._PPP_.updateEventPanel("\'" + currentItem.name + "\'was already offline."); + } else { + var result = currentItem.setOffline(); + $._PPP_.updateEventPanel("\'" + currentItem.name + "\' is now offline."); + } + } + } + } + } + } + } + }, + + updateFrameRate : function() { + var item = app.project.rootItem.children[0]; + if (item) { + if ((item.type == ProjectItemType.FILE) || (item.type == ProjectItemType.CLIP)){ + // If there is an item, and it's either a clip or file... + item.setOverrideFrameRate(23.976); + } else { + $._PPP_.updateEventPanel('You cannot override the frame rate of bins or sequences.'); + } + } else { + $._PPP_.updateEventPanel("No project items found."); + } + }, + + onItemAddedToProject : function(whichProject, addedProjectItem) { + var msg = addedProjectItem.name + " was added to " + whichProject + "." + $._PPP_.updateEventPanel(msg); + }, + + registerItemAddedFxn : function() { + app.onItemAddedToProjectSuccess = $._PPP_.onItemAddedToProject; + }, + + myOnProjectChanged : function(documentID){ + var msg = 'Project with ID ' + documentID + ' Changed.'; + // Commented out, as this happens a LOT. + // $._PPP_.updateEventPanel(msg); + }, + + registerProjectChangedFxn : function() { + app.bind('onProjectChanged', $._PPP_.myOnProjectChanged); + }, + + confirmPProHostVersion : function() { + var version = parseFloat(app.version); + if (version < 12.1){ + $._PPP_.updateEventPanel("Note: PProPanel relies on features added in 12.1, but is currently running in " + version + "."); + } + }, + + changeMarkerColors : function() { + if (app.project.rootItem.children.numItems > 0){ + var projectItem = app.project.rootItem.children[0]; // assumes first item is footage. + if (projectItem) { + if (projectItem.type == ProjectItemType.CLIP || + projectItem.type == ProjectItemType.FILE) { + + markers = projectItem.getMarkers(); + + if (markers) { + var markerCount = markers.numMarkers; + + if (markerCount){ + for(var thisMarker = markers.getFirstMarker(); thisMarker !== undefined; thisMarker = markers.getNextMarker(thisMarker)){ + var oldColor = thisMarker.getColorByIndex(); + var newColor = oldColor + 1; + if (newColor > 7){ + newColor = 0; + } + thisMarker.setColorByIndex(newColor); + $._PPP_.updateEventPanel("Changed color of marker named \'" + thisMarker.name + "\' from " + oldColor + " to " + newColor + "."); + } + } + } + } else { + $._PPP_.updateEventPanel("Can only add markers to footage items."); + } + } else { + $._PPP_.updateEventPanel("Could not find first projectItem."); + } + } else { + $._PPP_.updateEventPanel("Project is empty."); + } + }, + + changeSeqTimeCodeDisplay : function() { + if (app.project.activeSequence){ + var currentSeqSettings = app.project.activeSequence.getSettings(); + if (currentSeqSettings){ + var oldVidSetting = currentSeqSettings.videoDisplayFormat; + currentSeqSettings.videoDisplayFormat = oldVidSetting + 1; + if (currentSeqSettings.videoDisplayFormat > TIMEDISPLAY_48Timecode){ + currentSeqSettings.videoDisplayFormat = TIMEDISPLAY_24Timecode; + } + app.project.activeSequence.setSettings(currentSeqSettings); + $._PPP_.updateEventPanel("Changed timecode display format for \'" + app.project.activeSequence.name + "\'."); + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + myActiveSequenceChangedFxn : function() { + $._PPP_.updateEventPanel("Active sequence is now " + app.project.activeSequence.name + "."); + }, + + myActiveSequenceSelectionChangedFxn : function() { + var sel = app.project.activeSequence.getSelection(); + $._PPP_.updateEventPanel('Current active sequence = ' + app.project.activeSequence.name + '.'); + $._PPP_.updateEventPanel( sel.length + ' track items selected.'); + for(var i = 0; i < sel.length; i++){ + if (sel[i].name !== 'anonymous'){ + $._PPP_.updateEventPanel('Selected item ' + (i+1) + ' == ' + sel[i].name + '.'); + } + } + }, + + registerActiveSequenceChangedFxn : function() { + var success = app.bind("onActiveSequenceChanged", $._PPP_.myActiveSequenceChangedFxn); + }, + + registerSequenceSelectionChangedFxn : function() { + var success = app.bind('onActiveSequenceSelectionChanged', $._PPP_.myActiveSequenceSelectionChangedFxn); + }, + + enableNewWorldScripting : function(){ + app.enableQE(); + + var previousNWValue = qe.getDebugDatabaseEntry("ScriptLayerPPro.EnableNewWorld"); + var previousInternalDOMValue = qe.getDebugDatabaseEntry("dvascripting.EnabledInternalDOM"); + if ((previousNWValue === 'true') && (previousInternalDOMValue === 'true')){ + qe.setDebugDatabaseEntry("ScriptLayerPPro.EnableNewWorld", "false"); + qe.setDebugDatabaseEntry("dvascripting.EnabledInternalDOM", "false"); + $._PPP_.updateEventPanel("ScriptLayerPPro.EnableNewWorld and dvascripting.EnabledInternalDOM are now OFF."); + } else { + qe.setDebugDatabaseEntry("ScriptLayerPPro.EnableNewWorld", "true"); + qe.setDebugDatabaseEntry("dvascripting.EnabledInternalDOM", "true"); + $._PPP_.updateEventPanel("ScriptLayerPPro.EnableNewWorld and dvascripting.EnabledInternalDOM are now ON."); + } + }, + + insertOrAppendToTopTracks : function() { + var seq = app.project.activeSequence; + if (seq){ + var first = app.project.rootItem.children[0]; + if (first){ + var time = seq.getPlayerPosition(); + var newClip = seq.insertClip(first, time, (seq.videoTracks.numTracks - 1), (seq.audioTracks.numTracks - 1)); + if (newClip){ + $._PPP_.updateEventPanel("Inserted " + newClip.name + ", into " + seq.name + "."); + } + } else { + $._PPP_.updateEventPanel("Couldn't locate first projectItem."); + } + } else { + $._PPP_.updateEventPanel("no active sequence."); + } + }, + + closeAllProjectsOtherThanActiveProject : function() { + var viewIDs = app.getProjectViewIDs(); + var closeTheseProjects = []; + for (var a = 0; a < viewIDs.length; a++){ + var thisProj = app.getProjectFromViewID(viewIDs[a]); + if (thisProj.documentID !== app.project.documentID){ + closeTheseProjects[a] = thisProj; + } + } + // Why do this afterward? Because if we close projects in that loop, we change the active project. :) + for (var b = 0; b < closeTheseProjects.length; b++){ + $._PPP_.updateEventPanel("Closed " + closeTheseProjects[b].name); + closeTheseProjects[b].closeDocument(); + } + }, + + countAdjustmentLayersInBin : function(parentItem, arrayOfAdjustmentLayerNames, foundSoFar){ + for (var j = 0; j < parentItem.children.numItems; j++){ + var currentChild = parentItem.children[j]; + if (currentChild){ + if (currentChild.type == ProjectItemType.BIN){ + $._PPP_.countAdjustmentLayersInBin(currentChild, arrayOfAdjustmentLayerNames, foundSoFar); // warning; recursion! + } else { + if (currentChild.isAdjustmentLayer()){ + arrayOfAdjustmentLayerNames[foundSoFar] = currentChild.name; + foundSoFar++; + } + } + } + } + }, + + findAllAdjustmentLayersInProject : function() { + var arrayOfAdjustmentLayerNames = []; + var foundSoFar = 0; + var startingBin = app.project.rootItem; + + $._PPP_.countAdjustmentLayersInBin(startingBin, arrayOfAdjustmentLayerNames, foundSoFar); + if (arrayOfAdjustmentLayerNames.length){ + var remainingArgs = arrayOfAdjustmentLayerNames.length; + var message = remainingArgs + " adjustment layers found: "; + + for (var i = 0; i < arrayOfAdjustmentLayerNames.length; i++) { + message += arrayOfAdjustmentLayerNames[i]; + remainingArgs--; + if (remainingArgs > 1) { + message += ', '; + } + if (remainingArgs === 1){ + message += ", and "; + } + if (remainingArgs === 0) { + message += "."; + } + } + $._PPP_.updateEventPanel(message); + } else { + $._PPP_.updateEventPanel("No adjustment layers found in " + app.project.name + "."); + } + }, + + consolidateDuplicates : function() { + result = app.project.consolidateDuplicates(); + $._PPP_.updateEventPanel("Duplicates consolidated in " + app.project.name + "."); + }, + + closeAllSequences : function() { + var seqList = app.project.sequences; + for (var a = 0; a < seqList.numSequences; a++){ + var currentSeq = seqList[a]; + if (currentSeq){ + currentSeq.close(); + } else { + $._PPP_.updateEventPanel("No sequences from " + app.project.name + " were open."); + } + } + }, + + dumpAllPresets : function() { + var desktopPath = new File("~/Desktop"); + var outputFileName = desktopPath.fsName + $._PPP_.getSep() + 'available_presets.txt'; + var selectedPreset = undefined; + var selectedExporter = undefined; + var exporters = app.encoder.getExporters(); + + var outFile = new File(outputFileName); + + outFile.encoding = "UTF8"; + outFile.open("w", "TEXT", "????"); + + for(var i = 0; i < exporters.length; i++){ + var exporter = exporters[i]; + if (exporter){ + outFile.writeln('-----------------------------------------------'); + outFile.writeln(i + ':' + exporter.name + ' : ' + exporter.classID + ' : ' + exporter.fileType); + var presets = exporter.getPresets(); + if (presets){ + outFile.writeln(presets.length + ' presets found'); + for(var j = 0; j < presets.length; j++){ + var preset = presets[j]; + if (preset){ + outFile.writeln('matchName: ' + preset.matchName + '(' + preset.name+')'); + if (preset.name.indexOf('TQM') > -1){ + selectedPreset = preset; + selectedExporter = exporter; + outFile.writeln('selected preset = ' + selectedExporter.name + ' : ' + selectedPreset.name); + selectedPreset.writeToFile(desktopPath.fsName + $._PPP_.getSep() + preset.name + ".epr"); + $._PPP_.updateEventPanel("List of available presets saved to desktop as \'available_presets.txt\'"); + } + } + } + } + } + } + desktopPath.close(); + outFile.close(); + }, + + reportSequenceVRSettings : function() { + var seq = app.project.activeSequence; + if (seq){ + var settings = seq.getSettings(); + if (settings){ + $._PPP_.updateEventPanel("===================================================="); + $._PPP_.updateEventPanel("VR Settings for \'" + seq.name + "\':"); + $._PPP_.updateEventPanel(""); + $._PPP_.updateEventPanel(" Horizontal captured view: " + settings.vrHorzCapturedView); + $._PPP_.updateEventPanel(" Vertical captured view: " + settings.vrVertCapturedView); + $._PPP_.updateEventPanel(" Layout: " + settings.Layout); + $._PPP_.updateEventPanel(" Projection: " + settings.vrProjection); + $._PPP_.updateEventPanel(""); + $._PPP_.updateEventPanel("===================================================="); + } + } + }, + + openProjectItemInSource : function() { + var viewIDs = app.getProjectViewIDs(); + if (viewIDs){ + for (var a = 0; a < app.projects.numProjects; a++){ + var currentProject = app.getProjectFromViewID(viewIDs[a]); + if (currentProject){ + if (currentProject.documentID === app.project.documentID){ // We're in the right project! + var selectedItems = app.getProjectViewSelection(viewIDs[a]); + for (var b = 0; b < selectedItems.length; b++){ + var currentItem = selectedItems[b]; + if (currentItem){ + if (currentItem.type !== ProjectItemType.BIN){ // For every selected item which isn't a bin or sequence... + app.sourceMonitor.openProjectItem(currentItem); + } + } else { + $._PPP_.updateEventPanel("No item available."); + } + } + } + } else { + $._PPP_.updateEventPanel("No project available."); + } + } + } else { + $._PPP_.updateEventPanel("No view IDs available."); + } + }, + + reinterpretFootage : function() { + var viewIDs = app.getProjectViewIDs(); + if (viewIDs){ + for (var a = 0; a < app.projects.numProjects; a++){ + var currentProject = app.getProjectFromViewID(viewIDs[a]); + if (currentProject){ + if (currentProject.documentID === app.project.documentID){ // We're in the right project! + var selectedItems = app.getProjectViewSelection(viewIDs[a]); + if (selectedItems){ + for (var b = 0; b < selectedItems.length; b++){ + var currentItem = selectedItems[b]; + if (currentItem){ + if ((currentItem.type !== ProjectItemType.BIN) && + (currentItem.isSequence() === false)){ + var interp = currentItem.getFootageInterpretation(); + if (interp) { + // Note: I made this something terrible, so the change is apparent. + interp.frameRate = 17.868; + interp.pixelAspectRatio = 1.2121; + currentItem.setFootageInterpretation(interp); + } else { + $._PPP_.updateEventPanel("Unable to get interpretation for " + currentItem.name + "."); + } + var mapping = currentItem.getAudioChannelMapping; + if (mapping){ + mapping.audioChannelsType = AUDIOCHANNELTYPE_Stereo; + mapping.audioClipsNumber = 1; + mapping.setMappingForChannel(0, 4); // 1st param = channel index, 2nd param = source index + mapping.setMappingForChannel(1, 5); + currentItem.setAudioChannelMapping(mapping); // submit changed mapping object + } + } + } else { + $._PPP_.updateEventPanel("No project item available."); + } + } + } else { + $._PPP_.updateEventPanel("No items selected."); + } + } + } else { + $._PPP_.updateEventPanel("No project available."); + } + } + } else { + $._PPP_.updateEventPanel("No view IDs available."); + } + }, + + createSubSequence : function() { + + /* Behavioral Note + + createSubSequence() uses track targeting to select clips when there is + no current clip selection, in the sequence. To create a subsequence with + clips on tracks that are currently NOT targeted, either select some clips + (on any track), or temporarily target all desired tracks. + + */ + + var activeSequence = app.project.activeSequence; + if (activeSequence) { + var foundTarget = false; + for (var a = 0; (a < activeSequence.videoTracks.numTracks) && (foundTarget === false); a++){ + var vTrack = activeSequence.videoTracks[a]; + if (vTrack){ + if (vTrack.isTargeted()){ + foundTarget = true; + } + } + } + // If no targeted track was found, just target the zero-th track, for demo purposes + if (foundTarget === false){ + activeSequence.videotracks[0].setTargeted(true, true); + } + + var cloneAnyway = true; + if ((activeSequence.getInPoint() == NOT_SET) && (activeSequence.getOutPoint() == NOT_SET)){ + cloneAnyway = confirm("No in or out points set; clone entire sequence?", false, "Clone the whole thing?"); + } + if (cloneAnyway){ + var ignoreMapping = confirm("Ignore track mapping?", false, "Ignore track mapping?"); + var newSeq = activeSequence.createSubsequence(ignoreMapping); + // rename newSeq here, as desired. + } + } else { + $._PPP_.updateEventPanel("No active sequence."); + } + }, + + selectAllRetimedClips : function() { + var activeSeq = app.project.activeSequence; + var numRetimedClips = 0; + if (activeSeq){ + var trackGroups = [ activeSeq.audioTracks, activeSeq.videoTracks ]; + var trackGroupNames = [ "audioTracks", "videoTracks" ]; + var updateUI = true; + + for(var gi = 0; gi<2; gi++) { + group = trackGroups[gi]; + for(var ti=0; ti + + + + + + + + + + false + + + Root + + false + false + + + + + + + false + + + + 1 + + + Presets + + true + false + + + + + + 1 + + + + false + + + + fubnunkus + + + + + + + + false + 5 + + + + + + 0 + 1. + 1678182105600 + 0 + 228cda18-3625-4d2d-951e-348879e4ed93 + 0 + + AE.ADBE Spherize + + + + 2 + AE.ADBE Spherize + + + + + false + + + + + Spherize + false + 0 + + + + + + 1 + false + + 250. + 2500. + 0. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 2 + false + false + false + + Radius + + + + + 2 + + 0,0 + -91445760000000000,0.5:0.5,0,0,0,0,0,0,5,4,0,0,0,0 + 6 + false + false + false + + Center of Sphere + + diff --git a/pype/premiere/extensions/pype_avalon/payloads/PProPanel.mxi b/pype/premiere/extensions/pype_avalon/payloads/PProPanel.mxi new file mode 100644 index 0000000000..fb7d11f83c --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/payloads/PProPanel.mxi @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/pype/premiere/extensions/pype_avalon/payloads/PProPanel.sqpreset b/pype/premiere/extensions/pype_avalon/payloads/PProPanel.sqpreset new file mode 100644 index 0000000000..ed28feb232 --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/payloads/PProPanel.sqpreset @@ -0,0 +1,41 @@ + + + + + 0,0,1920,1080 + {"capturedHorizontalView":0,"capturedVerticalView":0,"fieldOfHorizontalView":90,"fieldOfVerticalView":60,"projectionType":0,"stereoscopicEye":0,"stereoscopicType":0,"version":2} + [] + [{"mAudioSends":[],"mChannelType":1,"mExpandedHeight":25,"mIsOpen":false,"mIsSubmix":false,"mMatrix":[],"mName":"","mPan":0,"mPannerAssignments":[],"mSolo":false,"mTrackID":-1,"mVolume":1},{"mAudioSends":[],"mChannelType":1,"mExpandedHeight":25,"mIsOpen":false,"mIsSubmix":false,"mMatrix":[],"mName":"","mPan":0,"mPannerAssignments":[],"mSolo":false,"mTrackID":-1,"mVolume":1},{"mAudioSends":[],"mChannelType":1,"mExpandedHeight":25,"mIsOpen":false,"mIsSubmix":false,"mMatrix":[],"mName":"","mPan":0,"mPannerAssignments":[],"mSolo":false,"mTrackID":-1,"mVolume":1},{"mAudioSends":[],"mChannelType":1,"mExpandedHeight":25,"mIsOpen":false,"mIsSubmix":false,"mMatrix":[],"mName":"","mPan":0,"mPannerAssignments":[],"mSolo":false,"mTrackID":-1,"mVolume":1}] + 3 + 2 + false + false + false + 1,1 + 1297107278 + I-Frame Only MPEG + 1297107278 + I-Frame Only MPEG + cc7991f5-c236-4db1-957e-2c71f924e81c + cc7991f5-c236-4db1-957e-2c71f924e81c + + + + en_US + + + + + fupduddy + en_US + + + 0 + 200 + 102 + 1 + 5292000 + 0,0,1920,1080 + 8475667200 + + diff --git a/pype/premiere/extensions/pype_avalon/payloads/Registry.png b/pype/premiere/extensions/pype_avalon/payloads/Registry.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8f5a4ceae8f5e161e0dd47c894760916518605 GIT binary patch literal 228114 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

aE`iRM6BX>nyHb+{5 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 z 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 D9FQjq literal 0 HcmV?d00001 diff --git a/pype/premiere/extensions/pype_avalon/payloads/addons.png b/pype/premiere/extensions/pype_avalon/payloads/addons.png new file mode 100644 index 0000000000000000000000000000000000000000..c631ad903e21e0ca378e5589b9f8c853552de7f7 GIT binary patch literal 783736 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%0A1Q$gNp&RVspgLgTGwND*f zO?|jJr5{0n>(X4x;UV8;mMnKBt6JIt^SyhatX?N3@*#ud?tGC3GB|U^PY)O5LDgt= zj#e#%mR?+SSEvQ-(%5^5C9lm5yhf=z*ITiSTL+--70RrSQ5`Grp%;@MxkWT+Di7o5 zXepXJ`iL%Pm43*_CWi~XgQ8jo)Bz_qG8S?H3BW^~lc|;fVy56AH+C>lV2R8`u8!;) zfk0IA33}J;Y77(ash}*3)KGH2Fae8*7ANn?J6B^<)}F0%N^oW;uYOa@`h~5A1v@#h z73=y;?A;{f?UfJ%7o{MvL5}D(-z?Yn7kRfi^>6~;d-A@$d03YsA>EmEBzk5tZDMQc zE`gE&bB7@q3A>><7Mk~NzDWmHPOs~+@ucflg{TQBrEu-`UWame>zHNP?`FMrtIcW@ z%6XB6LgYoBN%FO|6{p?l4PF^fRzeDG%T62ZR5wl=$~_N%@KSf{g;$3kW>LE5g80_W1OfSXhG@(^;V34QFWPCR5=4greGK*F?Sh{iqIngqr{T~j1O`=z{ojLl`B)#J62q{z{yn%C}t7NVnusqWpJle z^<$A_H8kAL_YjNGw5oz?QYXj{XQEzVANx_XyaV9+Jao z(DK0auDaf3$z9=K19M?g;O0U1;xm_w!+YO%dTSgn-`acT#W(IbzIE=NlM;n%QBAOb z(Kx>E$p`-Glc!HQwj9UC3aGjmvDQc)8X_Cqt2(p7O2S?hS5Bf;4ddpxJ6)~xhFYt8 zrG6N|U|#wus)GRm!*ysh$U#z;UXcV2904!Ic`2K&GYxWLqDtlnB3Od>H6t^Su8zXr z{7>Hd!G})&=5My&`qDR^dEvtS4{WWr@u^pLzxV9b;~Oi#^a~$9vw<&v;f3G*(lcLq z=GBKD+B^naxz&IDyRWXSZ~TMLJ^sOy@`qo2^MCxkr@r;l;-PzSqQSElZoPhU|H+Sj z@Ux$Ku$}AIzx;i{!HDs$d&b8<`>}7oj{otupB?MX|MTDeiIZblo#2&AyQcooz1#ob z7e97t972zkF*;z@>tuE1XMgVTPrY~Y%pb4)_U}LSqd_q;6k4^iRj5N#3IbNuZrxQ#*~b_s4>Y)vnU&WqgU6Mfyd!=NEdLc0EG?ayk6XFSj0p`ge3xX3Sz2mCT0UR!6LL| zzaJI3)M-o|;Q7*ece&{~)1fBj?mM}>HA9Y1&9`^0BKm6FFfdklNk(zp8h!W^4|a?08(-_L-?^Sx5|3bkgPXU-GdC)uPUpRqLM|~( zNk$U5iB00f!V)<}1d#XUC|0R226HQxYnsDszZ;E@9Xs{l^*1k?mLHTE647WhYDc3# zg~Ec^Rc~H-;mW0#B~E60w@l|7>#L*jm?aEWXMmOrplzGUC=e|w`GbW=A-SW6If^%d zBK5fl+B%w#k|auC>H5C!_MLMu0domTT?s{(QUR|YCW#tCaZ}3y;$*oTsFfvLNJQ#1 zCmFF$O_jJnIx4LfE_%>uWF9+ZvJgX)LQJW30JvT9+{m(ZQWAU=9PHKylGwyj`Z6zC zTzkuXZFWqvgGidXZn!A_zhS=i-V{%8of5S9W91)RPwmuK87O` zq-E-0O44MnJ~a-vZgBv&m=Z~2*7Z5RQ@$j9x%K?zoyCFqQ1lFC$&vi28t`75P=zz< zf?jo;gVpQN*S-pn`K=_~S`_+l?$ryeYC+#lj-a;|h=*%JRgy~N5Sgnf+OT-L`ypLw z7;u4pXq?&IF!8&TIXKgD1URrA2H!4IsCx~s9CE~#W&WVnlL0TT2?9a`li8iRf?lbI zI8y_UZiGX?xGwZg1c}1J^fu0jzePXjhk$LhQ66TNOLo~2IdTPa^sT2p*a98;k`vWX z0zN`&BcVZ)HJqu}H1tC&GCBg%GhvCg98nP;B01H1U8j$v2j7`q%B$v?!I3BeJUl8C0+DLTmRJV0UsXpl zGlM`1%c_A{i3%VbC{pjbaP0zuP;9uccU^Jv(Wp(61W;M@2c^H+&%n`R?6col%;w`p zgj~&Q7vS#d3+do*m z>*2@d$WOiUTyE07NZYPZkcF!-adEY;qGDZnc?!6ghH;AW+0Q5^tTh6m=jT-gR;95W3*4$kIP!9JKs zEEnT?z{^^gh8g`3Sm5|Eut9xkAar+~AqSgNpDh)TG#Oz(Q%r#gi@q445vkE1%ng>_ zQcBu8C>OXy7P#~roCVOVi)dZ6U=VjcBEfc4#uVdp6$&9=?D3;>%|i#TVuRJonn0ozf>i{Ls6PV;%U=qxXI7>C3NOFK-+`#(3$% z?%rPh@M9|sX(?t)l0FWb#%ILD>4k=V6E` zF^8BLsV@jULSzs~m||qGDMUEP&hGB_zVZDwHIM()!|C*9&YDs1>cc*(Q zFJ^m)Oe`^RhA{#$NJkd?()8$~J9$tRX{c$MHcpZ>kw^e@*9tJG6S=|EVD1IQd+XY! z-P(ND@iQ0SeEmgLtpOiL-*;NZeE!E`H10JfHt+Av=C?=fXtHu5#ze5U?Bwn_cg}J9 zjTDZoVht@s51;2i^1k@>{oV?!r7& zkyb>E-UtO^fC|JoWp4I~_kiM-R2$8%xj1^3!oevJsIK_1+>ozCA0?NX)jqJss8B52 z8Yglh?Lt|wb$$p*41ZV%GR(P997Vm-=QRUnX(a2%#_QYTG;Z8ki)k@cNaPr42tFdl z!0~ZaH^q=7Sdq~BcV+>3x8S^xng=>?vdor>gs#)QS)O$$iky)PvU&&@ji{Z*cBM^i z3NbJtRG&Yl6lgVYw2=4x#tz@WD#vyMdDZ4r=AJt>Gq{MS#FJ?ntu~skYSm$o_8P?a<1EpXS3o?hE_0YI51_!uHugSycECx9z5_- z3JleEqKK-AY665M>4qIb9z+sYtlAEGWExhWQnF`|J5dCbsW{+85%>GW%yS8;SjT-Z zvV+_kfup#&xVKDKc5aNVY>bYnX@d7cS+K~3a{-~s*-Q}wr9rUI?B-s?X+`A!3m4h?_2+dOWGJ^@iJ|atgpFsl8j8%iMWX<)OSujkEBTTDe$)J9P1a- z+Uhv2j7IDf6d^XV!UuhSWA9EE`YkG>#$r&iIrTHLaoZ3pX59^woZ7~@G)Y!s+}khQ zwqcZ!fgLb%bJLuAB9lb5?uaZ2u6@r&5uxwQ zC9SWX?EA&7em98rV&A&cz|y&a zAi{mAm8p{#s$*)Zsel!58yKi$0BrCf9E<}PhYDTbos~z>51(e%cmg6bD=~5FWUg>D zvCbwdKF3z0F3gQgSjd$fLIOuNaf;^AslZh=C#B%LluQqHaef!%aQmTdx<{^o7Tj6b zPWIckcK2tq1}ppf2N$pGq&Pa5*=*ld*SK?Jcy$|dptv_cAc8Vy688?cvY%*nIbSYPfQB*z`kk*Mk4FNWGH|# zX66f1VG)81DS3c>;+1+Z{u_cdbnx87@FPU8a3fP^5;C=+MG0=Rs8*Wl+)Y>a>r@W82d>)7PG%`#b zl&pjGu0T*AJNF(ldUFE?>>wMYE5UMr3NUI%({^-gH{ZDf9}g^d{&RfcPZM7pIPld3 z%Sur#MNM-qIp<1YSdQv>D1hBG*F}v04ic>(B@fZL+Tl8ghrxzwDY-9NRI~fS{Q%sD zKpH}kKpX%zgBhE0Ddx^V6mjAJkUKF+FlVlrtX290^BQMp?s_OwfH@HpS?zs5QRA*IX^i6H`qm8>Oa)gsIig2a#vPL*FtW?swVrASy+ zHJ3%sooZj*Vnq-GhY|xv5LIPsE|rTROi`q%k;>KoiQ)A`;Hc_u0(l*h+ma$&uk;{A zVJ0#aD%n`* z?758(e&jvf-u}zaJ-6G>ya`O)fFenT0U* z2NFgwR(B7a+OV=1&x_sB-iVmQGz$<0?-2*N7?=Vo{YEtx>syaWAd(OxiCNaRS(#Hd zErz0AN-6Vx?hVDzw9;x>3H_|(ee(j4X;JNm;p%dhKpe@{tY6G`gQT`uX`2zJ@mQ^4 zm@ek~x6BG75Qs(GnK@91?gQ*-gBrpI0e~=vz-p!RW=brkrSA?@OD^xAbkKUc^Zc#d z>pP@~3?i54qt-c*gn+s8GS<;UkYp zqktT)UYry`B^iy>gXW(511=qw1_c6-!~v9+hPoNlDYCh#W%bg-vrB-VXeSS>ZJga~ z#*hy=qUA=Liny$Jvoz3?oD2LFFz~eF(RkET` zC2AU48;9w5)V7UC^+xxlj-)X%bw0V zKVbAiHL@H;O+XCZLH^*s`3UDyXJ2ULh%Y0U5bIS)>W|$r5 ztoLk0gt1T>Q=D)+=Gbzb%~r*oJB%qbl2}F}jSCr@TQ;;=<9^>=&pR{UH{!vM2MAb+ z+_)pVbyNyKjO3mO0d8)^)Lbi%A|Q>ViNp$IEDHAee31HgXk1&j&!v0NFlhjk0H}kO zmTNX(R#Yu94KOpYtVWrl1Z8IftlT(QbRnh5BnR|mUUI*;$epP(bzL7+Co#lHQ<5B5 z5dpDZxplMI;}gxOaabpxJ3>qUP=KJ$s?rpa8U(&C2er6EUugM?7jMh!(X1&3%W$EA4c14Vam@ zqXe-wvFoBc*lk7;#9cqTb1++I6PnF2DV5AxCez7edqX%O6o>}Vl|~X%H|zH9%oZcE zw&~qqg&nBqnsad#Xdo~P8%UAO0|^-$IHl=yx;4Mk&9paOc-Qlr-Tq>6tX+{zk8erS z&UbFyKDM$pP7|2J$;4TRI1J=WQ>axsxECWUuGx{nuDPF=QYnJOf?S|#)vb|8m`jC1 zv?s4Q=;r2B6g5#YNXdDzw+KlfqH4vo+651a2f)pVttJ9uD3_{ax7OanOwd@E7_3^n zm@3>LOHmUutfra#c>L_%lECXmt_d2vL${aGN(0MEB1}YDbPyYWyn3jC%sg^5%dire z)BzLYYEGfia!VS`NIhFvP^wvMPBmx&Le6(iUzxe6L-hE<42s;^H{N9`2{Lc51&OY-~ALa4N zvoBq`cYF1dkDgp>_~qOFn_qo8=H36pU;21Vvb2t`+{0KXW~L6fV|1WwEE%*9>~=nC z!m)8P1_)RYaFiKw$C&4QFq@y)T0OoxHJ}G#?)xtHT`9%fKpZ$S#cGnQYJJ~nQGl33iXaQZQJ9J<)R}8c6Ps(FyKXVd zWp18{RLg>pLr@WC;Shx=sB%%{!lf`tBY}d0s4{vuP-Ko?O?Awfk`o+iUd+`zGm}Wv z0ymNnMMTwzTqu%}dd-d`0vp`CH~^tQUcU^)l`(-z5p^SW5h+^Ks?az|5cAw??`i<7 zpkxweNvQGl#6C#aK;kvGaa1TB7s_R>)HKr&>dd*o|9|ZL*^_Knmfned zYpuP{;O;Tr8NkI1Br+2@R9=l&feS<)4 z&?Q7hJ#z_H+etrK)7;u%rB)+mq@F!MiStN~`;Q-g_h0|y@cQu^Uwx?`I|2G3z54o% zdhyj#>$~s$L~Es<$%Ba%6@rvI=8gt*+@&t1ltYA=*+XDN)Xogv>hQwa7!g*@EZ`E* zvY90B@4s^Ag^xe^;2o_+ws4+9b1PVj zWo9CA!>pAF64FaA+$aSwkL|1i5`w!z+F#DSmZGylTlz>Dx=Um$LJ=N8LNxTF#$pPi znuLjRF%5U35SAczXxAWrff`VYsLm2#A`X@oSnV@vMpzJ>%)Ocwi+*6qM77I(8mi<- z)wQ*}48Qbo1aT%JHw}25F0J414{ohi*K!^lmV2r0re4cAfhBb$!VS^P*$s{@qBdeV zAwp7f8L$~zT+3Ti$W7<)Fok*jY**U$z53voygFDac; zXXFFYq9duK>WL^bPr`+AGZFVj3%0RCxAfe55+nzCxRHa6*}F~) zPNtw8M=z2?B`Am_ken>$i#T~$7K>?EjLW?~5B*%7goiPY9py}tND_$%Jm%t4G4)-- zr=fDSx+5Uui)@KyDvhj_+`?RQRdXlwBS^a3>G{UH-up_NHXWD5=lY~7{L=sm-;^SS+Y=o z43Rv#q2$z4H`$5OgrX4v0Ys3PdV{pCu_1^eQ}nPzgn)Wqz4HK~7YqaCjyY(*QYm3l z^U!^smq2g$YBU)=fH3wJ%ebO96H&C*JwOx;4^*}ADv*tOreF#4dQplYb)e3O3^`|K zxt!`$iiHY?M!e9E!q#F)Y&+8{U&u6ZgarN$!ZE8Ks`wYqg^r*Q4NmL3C*h8&AK1b3(LEY zo<6M8hEh7I`je-R@27P~{A8v-)J$>)rOqjL|ke1JPV=ui_JAd%OcmMgB z9BpVB++6{`EW-GTqf60{-8!-IKtzLY z7uezoaDG(+Z(RSu_aC1>-99n+#4jHVcMliycKc+CTgdO9Tz>mU zpM2>{Z@qCBPd4=JpKkW#>3ZrzW(~N_0tTQRFF&}mzxUEh2cJy&U;gAw_|aeewSA4nx4-}C{>}Bx>wDJ( z-+%A)AO68lFV?uT$mbVUEr0*R`sne4Z@qea&=2oF*#61SH+NQ1t}+WP&aHrPnvqT@ zy$^iv)9LXxe(lc9p-U$-s`0gf4@c^+Iw_U;>DC^e#9KXj(B7~Za^9WF2r?$*FxR7u zS6|)x$3Le3@%MkS-+$$Ayq5O?2IQ*d!$5*Dwf_zRa5#deG&~4Nz=7kC;f(0g7X71| z-ZlK--ADHxJbmp>cY8?*(7)_Q`~?pe+Rdq74Hs(EYNcqkQl{-ZPiECUm@_)=Ql=nx zm_jwmT-}fb64_IP!r46>=0Of23bXK9Ybnz-uLGs&2N7P2GEI^qXJJlNsZ^dT8*U26$QlCe=tM3R|StLCPa<_+Av8%VMP8ey#%OOQk&Myc^m+9RQX9zYb+ z>gHy%OK+4jGlHVBPp(_j*=i*ZqC|?U?wy%p=@9%q{neadF5( z?z%wi?|G@y`g|sUQqL?&m_be%Lg6K%%?sSa*~v(Gxfo}b01)kyBLWO z2+m}1_DUSHqq=xScr?Wy5ozq&dK3uvmTzNbHezuwxQ3T_a(}9NvMKfYbBE*JDs>XX zL2N`q$O$*?UmYH{O$mx~%GRZRkkrIR$WR7OeOfr=x8jKv&*NZ^6;$hjjYIEOWA4@(GBCQcL# zqu|&n-HC|%-0j7l`*mi&@TXJE7Rf>w9&ko(j7^3!yd&=jiNH>UI}m9&BBf|AH6rd9 z3&IAGv&82Y2j?Ad!=ydn9^r6e!IguAg2+MP?fHWfjKZK@LV}Pc;*id%6LB&Yt1hr! zIs;7vLa4hTTwvsz^@S0qRWhp`@#5g16SbUdt635^p(|5OC~O%ufz@(QrZCllD!E%$ z4>t`du&p~2IR}cy<7xZxcHV9_*NeY!;~GnzO@)bsD?4c=aD-VnyZKy+5}YIrD*e5S zjSB4tOG+R(l6p;Cpxf!}vev)>8M(S%&YMHp>-xkc>b7{-rE!@TtJL?fbLW|)OqZwW zCmStv(9y-LbPZeCMBKu~V9Q&8*ZFgsf07QzS$RdoYM`rKklK`m3uzGL3*&ZZt- zp%tcp25a-}1Z=kz;UIAeizdn;1`Avw0#4BucRS|a=lFT?OJ&54jnZ)Lt#?dTsjO)} zOG1f@%ff=-CK6;tu4FXN(!vo}X!k3u9 z7Xg$+WqG8el@Nj;54V>N@atc_R!&Ym__u!Jjjz0#KY1_FxX=CQLeowG0RlYt=REwg z@7}-ncv{WtFWg%E?ytTQ%rUMmu)g-(jkmx4;^RyEpa1y56F>gjfAiG?jz9Qk-~atT z{`vmhy%Wj*>gP}HT-*Qe{@cIy{)dl${EH_Wbd?a)Nq0oDD!~&#BET^FTDANWqC&KiS}ofnbJS|lShC0zPE8y#I9ev}Ym;UfO zAO83M@cYwWz5DBL9N%3@y2_C=L7?z@WnV&O9)|vt`so!pO=EY;tn^aV0JS%vvEl9n5J1I6WBwl zSygLB`!9dxrFl~?r}^Hak2#o9N|1&ON=zi2 zl8oIrj(fvm?D~#`U5H5%vs*nsdGgUG-+OTXCp1&)_GKKFX-v6G%O&$Fr{Vna^5nr| zRp&o96F1t+)h(VGM~R5|-yk^r`M;ZK70EBZ{>_)){4K*?nPx! zy187>oAYw})w*|WpQTGo?QTejI$;nsa0N5v2yN2Hxax&DOr0~Q<-+Ew^)hO^y|*?@ z-D$;$`avY|s3=Brbq(iYKF_+DYA2LPa>od=K%0&vE}lx*LVR&RM@yb(+LlznoH%uv za&m-PyWH-$Wd^hXLTkwt)mrL2t5($-S{sYFjr!RmD4bdlD@t1aVuOC8p$Se*QJ9oJjlr}w$2vfZ41)AKM`QfT0tOkVkZfwE67+= ze;6Pkge>S8>6c*9zxY!WixfaT2*?y@-g-D0m?^kjAK00knrmWL;$NgR2rtl&DWwGI z5LqVD3nexa7K+$zH>c~15;kO+&AD2aGgrl2Wr$L@O7_z6^&6rK)kPPq?pA}~;*=4f zDZoW7gcw1|$#qsjp_CPwlz20#A%fjlhHH=S-+TD@>G6%5TS*UQx|TSFUvAbUQ{NBM zw1%TgLP-Kz!#Ui0j%6;xu)dtmA75PGPe*%W&O@nlG41!3v(?SKbr!Q~+rlY)23dqgsJnV7v19kQzH1eu zwP~Bk5=3rS*EaLdI}A!~^0RxhG1T=((trH*0UdK_pP69wx8U8@WRV4 zz5ddzZXAB`AlBP>@z(KjDW9BfF6vN$3K)c>3&0swP=nhDhhXG!0Ng#|>&xDWU%C@V z063vvPBDJ)&>q}BS)WXIuP*l5Wh z1~{P6e9m}$vizOF2Yunr(KqfaKic~9w{Bld zyqV(R=KSHkM=#u1{gp2se&t|rUxZXjryG0W7@ypKSSNb!&au$$xv>CUHE!JW z!7onE9=Km@_iwI%xngXjeCUo;*&g!ip0?X=WF$@&Bt3~7`>PxXj?m<1&Kk)IEWAc# zL1V-c0%2}i)vBW!%52brn8}S}NBj19juZx)%+ynog#{^!2v|C%WKPMSkE~$QYc6W@GZotRfDsK`DaZL>6XN%$$&U@Ze&?0Z?u9K~*zT1mzU&HgC6~CdlXK zlcZs}w+9jrNRriJ;oyOa5~GG&qn8mg|HtTi+$;ijUjEYE z*Z&%KH_p#5x-8LmWJDH*2(L&;BI;NCRi=*9v&gX!OUL2vHIsuVZ+$KiM3fT+XJx0T zVGh^e%u0?Lr17kU$8?2U3CV6%SlZ#8Q%1O(=5QoQ5oE5#3PlGkOq^17a|!KoFKK~! zW2Ty`Mr5F;oFHAw(si@zG+oT|WQ_oy!c;$Vk(HFV)ng?MrIu-4FUP~&^^(%2UM6tL zOLYe<+#rqj)X>dYQCuwo?iwCh`o=_I$si(~S&+Mdn2Lywo?)v}S6POSP z4RRu4XaHt8sYFc%3tF3XVhn_%L~H}w=5z#tLU*xjG_3-+)f`1Qq&3eZgd!1nG+JRx zzk!T`T?x%1&meJ<2nm-6bLME)NRWU7p}2gi_vQ;XyURGZahOw12{|LB)MtsH8n$Ef z?d-e+g4-2{T+PgcNLI^mC@y{L(a=8au8M_Ox?U2HEVwx45Sa8L%v!Z>3o~)&NtnEu zdV_?VsUnObCtfc5Zb)fXM>va%DBQHcX`1j7?qP_4w?(L0ST(B_?pG0ffSiF~h=5zB z1JOEf1Rx|kM1mxYgSIhMha(Xdna9qDj`kP%`nB$OU&ezzU0cciDpIc13%ItOVWN~1 z=Om(?SY{F-A~@Wc$T(`~CSn=V?{4GOL4uUIAB7WHG`Kw+?#-&~ZN!7FmqBeW5QKqH z2&_A7oqG_G5K$s)xO|RQw`!aq^EMi9lOY6WH;i2UGfYFuBO%TV?ar6?KHJE6=%n!usv^*m@ZtmcE^;o}F79-Y0K<)~xz zs1dVi4x?TYv04p~6IaO7i>>JSwQjjOyhg*)^r9M{ZDt9dyThlx9%UNFIMK}$g~?)4 zJzr0eyZzOkoIHGa%$+QMeDBfL0{sFJVA&Q>*D-)78lj<3YtMv(++sUzPd6uGez>1m{{S!U46?oHJA-!e?R=%83%x+*Gv$1!tk1L!6z+Jv6*{s6_>o*(nN8B1)jN z7;Rwon6AE31B$5OvzvkxqyYn4ur=We$N_WsFS(VUV-S>{9T(d<-bo`7kJ=qg>1c|B zGg=htomkj&6ogqyeq~1Zw*)MAs+=neMo{ZffZ)v3^Bj7q8z7v!-lwf~YT&k5+yOH) z{%qv30Bd9J)9stQy%;X1{O+Sosdo4Fk=E(a<3}f(L7UW*4bq$x$Pz<90&LnsDH-U@ zsT9h@S9di?{kC>L{jmJOAO7T%kMDi;OE3P-{co(@MB=~woj3lE-?({AZ3#Xc@X^LQ z^`m7R^vFPz*vxufH}5|k_F#|e`H9ivi6A&$EUqmQ0fWe$>xXlnuQaDK%h>#!1`*<- zSkFw7qnkcG+xD}c>cyjtt{sI@W5@iIh~D(7|?K@ylIQONq1lg6n_zx9)!RwHLnq&p-I_ci#EOzqkEcfBWm)W%VGI z+M78gLhmoLb_rk?$@yZ$97s-~KP(cy&noghiJ&K=qnfU%Inzm)l?a+V$V~%E1aq z5f0~;jQr1i%J84kAJI$--eT!hODScZ=Xol%)>>7og;^nWCqUecNzBYtLBY(Rs9HU= zYw{MDM-Uh!KqjzRn2~uZDy77{oobl@PN^HZE+s**hq!SNNl=iPRu)Ra4YTXSjn+YC z9!4I0CYYt%<(y0Lc`8gW;UsOv-GYd2We)NrMA%s{0^&|?;bcGw(z$p$EvHZFwc{7AA0GF8?j(Tdb4=UI_1VdG(r!rJQfov6OO!+M)n>xejwcCsD`lD; z)lAzX(`2=#fJ!Klhm(bQI5#8Mp;Ze$5_D=!e7*@--MB{%lq zxrEOeR>%y&L?jX}Mk!2UGV_qm8_aCZ*>fgI!ok+I=Rp(#a$;wOBmmMPb=9=#m6%OZ zusOnoJ&d4~Lckmz9#*NiCAVyDU}%Jgsv3uD4K0(1n{MXIsch!QPdA6xUpP2Eki?E5 zB^m~~xZG@}d739M^#M&bErsC?iG|d+Rf}0#U>G<%NCw1F^tjd zL{Z%ev9KtS!jridpFa8Y<1uypIHd8Vz87KQOgEkzzw-6hFD~aF{qc9tFV09>2ZIR6 zM3Qny65*T^6D0hoo-(rMRh(oB-_*pHG%mMl2|>P7!df?y}TCCLe7+wJ9L>Q~F-VQ&S(X1nf?2N|p@ zs>RfVW+rk76K5HSP;nWqyH8_;kxK9mR}>`3lzUEzNs55@bNu))KnWnycKk;;s31xc zvNM^5gfe(x(HU>qHy%wtX#o$g0_>0$(2bo%5fL1akOqQpkYF?~C4<3bpL0%qmLy^x0!mCJ&`g8G zyY_PI6pRrSmLiS)&}UzEb+e7hPz|n3L6RsZWbq*N5Vg+20kE`zg;lGYN)`}qzoa#G z*f=4znOW+Dt#`P44JvBUfVaD`B^*$YBEp?o4I!L7h>(OskP<0Fjm@2mSc$-(AVfk_ zcSJa;BdJU8oTAG%%`goCbvYIT_LqEoqdPk8hgFyM7HMx4edp2QC-y8_!_0|En1m@4 zI*P=;i+(w|q0FeWyAl$c0|XITth&|yfJ9ZzCfzwdBHC?#Fjy#elB;wUD^Mbun00ot zu)=L2-Mq?ZAwG%R5eG9OJY4xIb_Ew=LUs%_I{y56LojNg5~=`)xw9ZrIDs7O%x+;I z+nEA60;$=ovEyMI4B=6U#XFYdUh0f~DU!2ee{XMdxxSny?lLDK#NN1A<#FxAkc6bO zss}|>H+X;vPM|4u8|kC?STz%6qRFfPiR%{rZzEp4Q7QHFJg-9i@Q zv?&{{B>Dc6^G_dN+_-t2m&e{MCK(AG4g2f$x_Hf*o?iOdmaea4A@X#)eYmlHIrfaY zna)o>s+-NNgZ&N`WloH$TS)5DP&U(Cwc~*);N&24cOnlD)yeg2+HC98b6%~+K{Bbq z;miaMH>Z#YhE)JVcd_*!-hY@Rec{%f-Y9bl3N=$RHzgoNR3|AEg_=afgH0WrgK3^) z5GEwG8Ws^@R-M6#+Yc5VEYgX$3SEvppN;9iM#tOd-fv| za29xU$&j=V**hG5{AvC8>2@#sR}aK%DmraS*`1=P4SCVjJRlQ9m@|R>rW8`NXfk8Nc4k*CIIjQj<{qZNC z{`BKjoL!up9~|s4#1*%WuiZEz0BlY%XR*WpLcOY$h)}>e8A}7@sp1cR|ASAy_u*L1 z&Yqk-cl%g!@&Zmf=4S`$C21{MEQ=f;9o)TreU!vN4g}%O!Fc1^@y91Ne-N7qw{G*T zReOT3Y{CR{x4IpY-#X~tUeWNi=T1NPO$4!>3S5lt~1_fp9ZMMX(pm+9z2OFwa{A^_?U4RvApW zODPek2GlLV*(}<{wpApYDoG8v&a*_$L+`5FX)E1X(5dOu$M?7McD#N4Io)n0%9umF zT%4Ufd3?6Hm@K+NM3uoBREc0bxc3oZZsD3bad!Y(>t?+!a0>^qNJ7BFJQQZZ79ev{ zV>JsX&oP_B?#>Ri0b-1VM&<3NtYoCpa`ghxRXF_+wR!*YnA&H6Na?z^EMvMJYMl4b11 zBpI#f=MioiYIP2$mg1$vZO0alUXokguGfLJ+hx-E;_2CJ+;z9i4bE-iRJL|@dU0`i z>5NY2&Bn*EPkkS5?&Lx{1pVhTXYlZ%IwW>V6e$s00Or`yhUMz&NFXprBFO~h0yk8s zn=*Zc+JAr1b<)dS$X>sYv6nk99{kGuCfE5p-}}LOo*Q7kO*qhM znZm?Ek`gBtA(G9-(tc0q z>+Z|9pL^~2)@%F6H-<6oE%!wFTI#fYdiLalUwrW4&))gL$%BueC3pRQFv#F;!*ccV z7ruUU?X_)9X0uQ#C5WmLiEwgQglnK82ssO93HdY2l-+uPi8FDRSdE!DXA&n%8In@! zrJrLmG6z*tgtuvlwVjm!F))g!DO5PSE0Y9q(aJ0x2t2f$q7gZb5ZZ5mo%zxg95~oIwD4U!!pONT%Hv%)w1IA5Ts z03#$|5y~L}b(D4sAaEsB7uJz{FQ^*U0q5vJ0Fo008VSvb5`u|f2zZ~6I}o78>H!Z$ zyLaNIiO-3p4?#=;*XG^=GdRFxjl#eV1`;8ARD&WAS3Qmd4_uzt2OpmA9S{5aDX$KO z#C;}CVG3bNOw|zt;T9oo%V3WHM5xWoS<={J(aF4wsd}kV3!5=BX90_YGSPsrXs#cq zx)p`Fo7Y(*b4r{Veuk(MwvH1s`p&x?#-ZjOaAUI+5l-5yYmN$33is9)FgO^IT6Q24 z2;`hHn{icB4>(a!>+K11V&X>9wW#i0@!WYgV7m=fhfx;nFXj4;{`f{etcE-ed4DD2 zB8aM)b1*Se>oGe3CK5&y9wk9a;FkXfjA^piPCgc9BDH{^@6)yG%fsWP0rOP1o4Iah z-KwgE?c56uE0VG#^%On^C7>qKNUzWnPVtv@o?j-B5BxLSMI$x?zU8m zna-OJAFj8TsziFKr)9ed;Z@pz9C-i3_xJ4ljTfG);TlBKrk<{&bX~tpJcd@Urdfir zx#@0;=4v`aBh!$_K~e@tojGMrs;=%ScLeb|TlgG7(#epXZny8AtkZb;++x|8!4WLx zRm~_o1$B~<1)QA#Mor*)j3a{?!P=SLApkM?Cxe^&*#PK;w zB(5Zp&z8ajqpax6c|ekWVbV?NE})b{qnIX1*0LL*&x|MN8R~?H;?I8Z*}p>wH&ZjF zWG#`FJ0do%O(slN`FX#R5emS-R&h3g88`Q+ll=Yr_}Qb!x5xQl?`9No#L4Vyz~Ba$ zhyzZ5FhS4;O8^rb2#TEQC_Hd+ zTA(5WQRj~9YtLW%+KcQ~vb!idl`;fFt_~uL|6Jxz` zs{V!Nu6^^hqeI^=gl^y2zr7mn-$Mo^=2l6l-Wg}-92(|P+}lG$fsSx%Z+YwH%}>t# z{Sigh*-jGW*pHE1@XX)2vnj>_lIIk??D;Exz~j{lEXOFHSEa0*R0kn9aP#?&Sso ziwCS~QR{LJ5TOG)^F7j+uXpy!-S^&q@ZIk}e)SvIc^8SH&sK2$a=!5Y|3~9zF9QL% zyR|>e!VIcWij_LY#-{BycPS;IBqABal2V_$Bm(wYo!E&i0ujup5g9H-0`NT7&3ZmP zy*N2Lajna7xfuIy*dK;Ll7xfJ)IC5|!xZpf0zsWjfSi~lg5gdKH`|tJ%4H+sOjPEL zSpg>I{fN$Mr~#xEQ||M~3}e?&*M_l-h#-e65Q&o;sTw=xsl>cV{pIEP>DkE{`Sm9c zK0bMT(vR3XWJx~Nf}q8sKR>VAHA(Iu7CeJIakzvVi4=Dg6LSYpRo536${NgF?$Rzq z-%R!979OO|MXe~ASAo`P-d>!glsF}l%#wvWNu6|=Sax|Z-XU&606lgIq(+Lj{~*u%Z%(U=j#;x59>d!EJro8Wg%{13K zFQMEWg{P`!2-C`DJ$E^!2%BrMP*`Dd&OJ@wg zY9Z$5Ui!jIuYdLM)~o&E_PBqvT#aK-!#JeWtt2IW>COwU-hKV@r8mCz?)U!i{dc}| zcKSGXL;4Rv8QkOY(#n=o&S0aQS;PS*0q=|$s_Ibz7i!LLSFuDwfQAETuo8DkeJqV- z*-gS-?MrgC-nG_kWu#(Tz+tXdymj*faAYInRL3s4#0*MXxJN^Y#td}AnKH=Uzc<&R(j4aMrR%ybccrv#du~QaVrF3wGl;=E z#Ju}dHfQV8eA4IKGxIQx5e2j?wG^za%#mG)gLC!d?jmDjh`ZH*LCKN_f(1fMP$FdM zIcOsL96uVb(xrj$27eBSL2Fngq}J35D3Dw@MxkD@Hq3#{=$M$uKta)H1xYXnFFIQF zbTCri!wI!ut}&^pM!-BGoDk^1!fqKUqSk0P-$cw2a<$4Lh9D9c9Jr#eGdL1WifxK{ zvWv6&_}=>P=D6Bx({iSqn4B$=ab`waL=pvqQk$~=(iZQylkL=tqu#$*m6HX4m#zE!6hHN5z4%+T1f<{>~5 zYFltgZFL69WG-T&=DzEEG~TEP^DaEMcJxdGd6-ef;>tu56w^K3-G0cY5;ki?b)w280N*AW0p|DhsK{6sG{&(HH{Cg6Vl!DBNLWIMEm`0ywl*|!U(Yj@y zxdnRmjY`G&+O3r9Blh=ja{AB_G{Ngbn~UzyjzA!nP_f z-VAP?3)jYJK?E5XDN_=!esMY7J6&%~D>^1HaJ*U^U%&n@-@CZ1+nWd1?%rPIs}#aB zc0qfEm#Wpxn>vS6NM9>2fhCnsHrq$ra*m#WbB9(e2n)ty$ou=N@4Wlq@x^7ujSg6s zczk+(bnV*V@sR=TXfgp6SO5p3C4^T)WZuQXE%4dpO1L`U?a1{kGm%|$o%b?*>uZPq z;HN+P&iB^8@rCPm7P~(1j{W_Y`Gvp05yRC)uLTvYRb5TP%|k=YRb91C^Tgsz;GDW) z1Sm-!#$gybgtc@4GXmtw;g@ED$Vqx;nag&)Uav1NFV~k@&>b8d93CAVUh5=>lfl@O zw5S?U@NP~a>g?f0<}^2AIRfetUIPl9w;Rf-GuzDN1d>u`nfD!WvA#SzKf9dP2Zsl@ zkM9g=;ijtfnN5P31Kb>wsxuLHl7QH5OJ}-1yLkHK!NvL0d!J0VpMQD(h|ag`VT^G# za(5tg-<`E`gajjm9HCrY$W>Ab4`)ZqFId&f%S&TTIVC1IF~OUl%+(zhY(Q10Hq5-L zRWfgUFG(59!qN{z?)xhOHpPyc6WVBNB$CF6G;gva{zxa`Nh!`0D^JT6t3 zBiK-C3C!#c9!Po%s%FA4Pzq)eigs6Li0V=1QqRv^L{zQTi)pTsMxm7xZ>H0er;q0I z`FQX8%^SD7uB&QhPMl4x7DHlJSo8Y@)X8vwFvQ0V69ODZ(Sd0{L^qzfH@8=q}k)#f2@H#(l4*S`quH`@pDJlZh!wze(&VrJqvK#y#24f zGaB%0yZ!l({`CBu`sK0eL^$SQgd*4OwkbTyUpT;{Xi_c zw?tkb+`|iGpp<10rVvUdF+|maQj68|s^xrIcm25wFlQp{^sPjUPy>0d1tuyZ$?Q zLo`-!MPNH!oITCsVkMoVE@vG|Xp%AKMbYY}NsOTCAh<9ivhS(@90YSE7NXoBy%ZsV zG3BZ2!JnIlFIqM=+UZSQc+}q18QL!O`SUSahNDO5@VS#NO04o5rIfJSSTf| z7IeJgy#+}RcN7GfS6CZSMYsoxLjoN*$R&p-2vIZythG8E80dhGAQTAd0Z=4CFA$E| z=(OPJC2fnJoNP}Xt&fhz<+2M#N(nGaNFEsi4fSXi9b%?ttTBUy2ZcwtgCHqM0yB$b z5~0do)dS=NBELd_G+!a5L)1Ys)>j;CR6S; z_bILT@a0&ZJ-qzHFm==)bRD{GmTnteMDp;7v5w7fupgkOmvatIBwqFDR#QeWEYrA1 zm2B&@B39j;JbG}xIp3Z?T8zUJ!+W3HyLW#2>301jLy<%X!nL|HQ_8es21!KgkqUDc z@OiGLH3j;Rf!RcW_L0NZFj2umIZ>}JnUiGkqUUp*6y!)>HGKT|Xi||1$=C_9X8q=FTrh z8oKpIPu}@`8;>iGvvUL|Mno-cV2*z`Na)|SUv9U@Oa!8024+ZC>ZU&Y*~scUkEcCr zB7Am3wb{UnT-!Ssb2`e{Zcf%0+r7P82LrG`5}69mfD_F#o?dtbq(f26T7wXh3%Im% zEWzAssqW3U&P1{U4Djx!XCP643MDr}apbGd1~qs~BLMsR-Ev&cQ(_6vOaxu(FbtJ{OQ@e?3@HJ-EOy+^GZ8D2hJ<+RdkH&`!punTrvT(`=9>k zqw^=9{+&AqU0wRL^l8;2(Vhn!Hw}}fB4~}v-rEe_Tuxm zk7Wn!G+Z?dEHInQ)M?HJJTZKHGSyO#`?v<&I@o)k%1@qLzJ)yiKYHNz@1Nf|=w8{w zt&X3+arAV(edodStH5pG!PegY@WG9nH*ej(slcOkJgjke#D~BdIA5dFvJ^DHqy`*9 zDL;EkiJUSqW$9B3n>gT(@IqF4jyLY&`#1H|`_qp;-tNCS_B*0|;6L|Y|H=FjJ7841 z>+>*obvJjn=3;Y%fx*Jb$%>YFo+6AAr!otr++}mCr4Y2u7uqGUnR%@WsLOc}5{+85 z-@E_Gr|Ua+x>vsN(qgY{rUxB^`n}D?biSU{j|hD@0uqtU!%-m-sSis5!TBLw$1o;KL7px;~wrzxiT64*PqD=J4PsX4Qx|MgYF^?NVf{lfW^cTXODTDO|JAu&HoD?H0A5K(;Qi}=hxB|x>Z@C&bf`OR&ZsOJCJ5$08|}Qi>Uw!>j5v&vU7>*tRePixgp)u0)SnvV+`fPa!14 zmI2aKf{dAi8i!s$9L@fkz@B?qb$P3{b}yw~oNp3HQ|^EOia>S06i&6enYP~~akOnd zF^F=K1&GyVxVe?e)Fn~3&9o+=fd*#D-M~7f)OW+4>g-zF5pK*B$nG_~UI}B3sOi=U zEJe!1iC8?8q|aT?^trZauK*;myG^Uc62=8CXf&GY2#rPWtAQ6nm5>R8#K0jDtpFTg z5DX+amOU0dCt-?cP9Qh4ieCa9!`lQwIE2v?4;>BS7ICq~wnP{*kOgCcFq*khBvQiI z`H+yAD*2N_-I?4wv8l{wC+p4Ss@9c9Fab$Y7vhaw;b9>r<@iVGi@~7QP`cySmmI zP9hxA*qWIGTD{3b-N_p$YG)#ZGdvo-9ZqD-5Dtd9RR!G5!Yybg0m&>L<}N|PBIHFn zH4e>=nXQsL2t-%3LolH&Lj!PgGEhSEcC=m>I0V5#kpjU1Sda%vrp`f*Jks7_KOT(S zCzh1EF6GpSGs4^wBF5|-L;^^7xO>2fBMEXspK0uAQ&G*`;lY~{n~g6r#ucqb*;@|7 zVq7c-?JRYfm|QKE$RI6h7V5BVbvI8ub`0ljcmz>+Ftty^Aka)6j2x5!kzfH^B6J-@ zfC~5yWmj7gY}da2oW^dUsuMhPjsS%xz`+di1atajVmDf^9zw)mYEMi^1eAg#1wo_R zYP}3HStz<%VqEk!4~5krpe#@|{pezgQO3n8r9KQ7h)e)?>MfipPDDsSU_v6YP+}6{ zVx|fhUk1z3@iec`tZwJ>@N{w-GfwyVVQ()p&8H`yTwh@^_TX+Cxf+sHVIj#H3=v9H zgPj(H1@Yi}d+vMZp2Il!@a|iG_2Gwq^5OmOzHn{1PuNUT8TPl-i;N<4x_SI?s?Xh7 zK6m^1c|E()mU9WK{fHciZ0~rHs6u%=PnYvO(=zg9?zcB??|u4o^X`XF&U~Je)kQy( zYYCwUiV|+b!6NPnA|sdX;N>jedn6EJ9AnyhA@hHk&)u%OI+PDz==Tme&ypdfKGgfl~(LxWk0 zQ*UID;6}L$1`yo55ACFC1`BF*Mq@aI5vsF>6bgfZsDesF0jvQXK?-PC1)K;;+(`o# zu&V}B1li}DU!Wa^n?CaumDmn`en1kZ=MSFzY>qBuFi;Q@Glzy%0`tEI$V>xkG@1 znIf!~5b?Z<@TIT!Vmt513oZESf`)tBed+SzlFH`A+cy?n9)OYNYlGZ4*h|1_5lLcu z5wl{^bv^mW6kACtAO;w3j`$*Y7dUXDsr}O&{&c6TQ zqc@f}nQ%Dv9pi(KAO7IyC)xyh}%b$0fO$j zCJ_KxP$ilm?>{d8>bU;+yZ3+g(WBef_g+}>KJfMzUj6O|)BpS@KRv!X9u32{|L~*p zlZ(Ic)^o4**au#{vw!`@@gMzcefx)(U%r$7<@Xa zX1hW7>YF!z@4-Mv9dnbNE2S;Dqp^Hh3(T2Yo(#^5n_s)9L)|qU-R=>(}Xe#I$*^VGZEapReRl{7O(0a6r9j;h=XKYEV})D2K9Zve{itaJK%nSJiq`~ zau1jAEJ!J3v^3eS#~cm~4>(7J+r+e$Ja#GCBttO=E&+y3TI;56x0f@^u-qGRznT@7 zlY*GRR%gbP63o`Kxv@Y7H!kMh598u!=nmKCk2dFo=F?m(@3i`+LKX zA3j}Q&VA~SIAv8ub{2{-SVVljLq=g)F82c=b%NCjGc6IROU?}aw~y7ErdflfO-=>G zB+(~A(yCtBT_Ll_d~$m7^B?|bNJ8=!y?Ahdq3ft$%FA!wT2Egz!|BPx)=CV%WZG`47bCWC1gy^)Y2tWu23$#W`*i0Kqc;NHSH40X1|v!dSKXhs2S7x$#5*xd&%#Wm!96+p zGJ8&0h_;)ll$ulW2%U?~Wu7*d<$`z(FbYjX&I*^$u&fwZAQRko_x^R{WS(YrhPtOJ z!N`nYCQ8|c+}FA&ei>2cd9&rNGZ3Z#SA~ZQkHm^70izI+Mc*xQ8VyW3g%{IF>%4)0 zhUiMnYY_LThkFO_5fQMF)v&Ies9Fdxs%FM%~YRtvw z;@df@HHQhc!6#7+J;t7L<{=>w&DEQDfDuFXzC(jYlZ8Zd62pK+k0C_@3IjDZ5*O<0 z%h+t^%~YycOA<5yCku;5Fr^>|MQgYrh$ymfw6qQdz(Q7=5GPoii5iJ0=&D~2Zo;c) zdeLBlA>18gz>XoqZ774Qyu&U5)NXneXxw>c@dPJGYpe=&Nvwu?s0PR=F%u^dN$ddw zMFcfLGzjFoD@cIp>c*Go8Lf;0S)|J{EW6YR6AMd|0ehH{w0DaG&W66D(ec(~Lxxdr2Vy0AD~q@FqJ+L9FM_1dt=eNQqJ z9%^SoXBjkfeHhgcb15z%9gsWeaz9{}%kxVFj`y!$+dDizTa*Vjv#-l`ee#5lk7Kz= z{R+f&v%z>E%j=%^d1W2v%`|hDWS>nhC8lwI>{ybSmTE;sVi*V8)=wVZzjt!Ekvcsq6oz1l zPDnyS$?2?TXp>>|hc3n5zFfEC*b7F9Wg*h=gqUI=~|H%15Q}S4V z;XR|yRC%pL2AxGW)i*UXQhUcpBZ(yNDQ1PnOnNe$g4 z-nf4F)z@y`|M-*t&;NAs;7qUei@*ByR|kSXZ|vv8K4oCRI2<@<>4Xz-ka4Y#B|KkY ztBJwD(A$ke-tQ;@8EDgo1RO2cMj99Z4#w^quUz}&_kZ-y|LMIkRm|Jp{67sKTfh0%o43*kIIvH+ z*yWB?-wFvUXa(Q%kv|KH(!~=au7c#JKI&U|RHO_J#7{zRI_0@Phj)!3>(NMkL6i!TnU_#E* zX8Y+U5AH!$H=ln!=RCW68?~ zGH4Oex1C|I1=nD4+9hN8bA1Pj5HktG3Ti2JuC+uggjo`VfyTKbX*qa+5&Ep99U-lf zM@c#(Bp7uR1yIamt@Zxn$Ky}l&10AQFCQBHj0c=@HbUZ@-W$&b?da?=PXX68U* zB7#?t$7Ze?{mtjUb>r4^AO8GL-+Sk~7pG6ygPBF-&+(QIRXw`#{GHdnCF67J%c+*y z^JOBIErYo z@J8XsvoOVGb1|(SJ^JLmTen^v$EBNj5ISkkt%F>g2<)ulLe!%X@tD|zgqXX|hD-y~ zX`;DyDRBhUhM4B*GV#=<+$X*Wk_dIbw0RJo+V+)mL8O@5g< zM3jdl2IVSg?rYtIhKm;uE}lstl9(k8oO&u_(bsY$ywQY-iNa%8mBXS22+z=XM!GfG=>}kpE5Q?7Acj!B8CzPV| zT+B@nLeb86Oc0_Va-vM(6huUc1)#=DFof^!mmwS;X6g(u#gZ7sKpinw9}|H zyg8m_ubOD6jUF1Tk|4|k=N)CL^-Xp-xb~Gq;EcqSgy)iqlDRp=F^nk-L&yTsj0VQ6 z&3bcH$slUYe<6@?LL`E6@&uyjavnzEUv`_xJiHBpKp;|gGe;{-T2WOq-^ptmKQcwm zmL-IOJX(lPE6jFEIa4ijt;PDDyPQ_5v6M1THqA=zk}?OGxEXThE`cJM`fgHBh#(@0 z!HL1T^ZXD;q8$`56A}|B%!1s>z!Y7kzN5wPEJ6J_d|nU+KoXlf5kv?MbDzr0k}?AU zBNAbNBHHwaIWd6)eUN z(H~t}XK^uhvlB%cScE)JGv7NoJG-2w*_l$87D{L zIeL->$v~7Na>`76ezwVb;AIal)Qvy}58SV642I+>rsy_7no<%n0z%uY6%@{)X4PB+ z1nMLcvNKs*s7VIzSRn*YO&TBW3{YYUcY;{6^G1Y4c)MVcy0kWy@8SZ?5pM2{xDCJq zsvf|VLY52x#?`KtKJPOIQ9PSZf_Ydh$G!c2u_r_WiBfXx}@ZtI1&Ba&We&MfuX}<@qE%WdG$`|k4JsN>q%ki6Uy-4gw zeeQv;y>#o)>E-KtL+iaXIRfy)jm7W&>YFdVaIi!(GCDxZoPPToZ+KqaTEc*Xg#Y5L zRoXuP!=FD?r!Tzu(rO zV}ARueBrNt@#YBhgunLILg$y?{n^8Lqi??T`fq;yg;k~(R`}b$`r3=v2te-SE3aRB zWox$%`wV>Jm23a!zy9_Q-}zuq@Yb!pqZ9<%BRsdCzi{{X_Q9gxJ*g>Rbk$z(iQazx zn&dZ6tM`$Xzw+8EH&$=Iez;2Hz_pD3@~^yfyc*v9*+)K|efh0Bzx6AxeDQ@90S*j; z-}&b46y=?tKCILEue^HmTVH$Ot1s+#0299Q`i=kYZ+_#QpFgtA`udAE-gy1ySH67f zfOmM#=SKXkuiQ?w*Riyx_S$Ov?XSK5@^h19kxC<{RX_B=ThHH2-%76@j(foJu=`uT z^2WUf>jMxOSkiyyqlN#(^M&@ZXwWD#Q*~9->RR1(M~-76^IhDBNU{Wo9F>R>?B>;j z!&?wD%t}?SN=RT(;~A&u2OfIqvt;U08ijK}5YMR|=DDsxRS>l>+Dlfzq{O>4 z1-XS8k*m&6Pfms$Nf55yqQkl|L~p1 zk1t-jyNpl|X~X`hXv$+A4r{b|$Pr}W zKrppg#_T?a&*x_+b&IjPtaEIq6T=y79uBrcN4Z-$FV(F&o3l9;XG4hk{*vbU^!@k$ zufF+3xpC*h^0s&&O)BCN7(jzV%p=I1 z%~67KYqrwonO|VWaulatw4y**GV|rUbt`I9@sM3Z14kZ-4RV|YZo%>b^CGPlUCuXdEZ%tY&Rq2u?|rIeiUi6myWxLC zKnOYccB(Puqy0C(^tId9Z@>25yMOxe&wo5`FLKT)<>oPLv4!?$y87>1c!4Dy-+E)* zd+FkIuIj{qm8fi-z2U9r()eRL0aPFYW==Z|Ds_49`B%U373 zau1Qz@Gh;d!OZU78j^%?$$onP_cZC+!JArH`nHAnqt3N|+Q%!RUeHB}G-BOnS+h zbJryT$b&?f5{vLMrCDQRHkEpj#j|8eUGB%O8yT_D@pO}YDv44*4yo%Br;gYFjWPwy zboR5*bN5=yrq=U$aj-~>fJFd?K6N^*bYouDZgWrt!mLJ^NZJuzfdCUlkXEk=y@0?( zIp^GePUk2>bnKa-4W9@{xJJwXyGu~-)a@A07J#~_gT+&_l#m!g5#VglcK0ulNAH(1 zE+Opd%`pf~K9X$#MYEP7BGfH{7@+WKm}Z*`;M7Yjdh`P!hnh!FG+zQE0bTF_ZXlCn zBxE@;vupKfDpBjzwju}+YSMw-2{19c1i4cj@gT~eAmX`8xtlXZ5Klim#D!`NSSgXxNWxExz5AT=aiP?Q1`W%n&!-;zRjIT z$5|3but@Xz@oXi?8rh&HC4@LRk^~D06C%POgv23?FoXsZa-v1%zC-FhuZc7PJ(B^Q zh!TOC_6NyXz(j3;3F084W=n0g_W-d7Lx>sNY(&&ZoE*q02M?Fiye-qLq%0a@?i}0^ z8B?LeT|bVC9CIgK4-%q4QU^FOOSH8?7`aiiPG_{bQslnNNfK*}@U7Qrb;Ns18Aoo7 ztEzcB1V`VEOYQcfXnX{qaHZahm5v>ZPI>uV?EQ>2P&y=uV$LfzLU2Sr*Cr@Qv0vI(5K}Bj=5a z(h{i#afFkBL5Ybe1$Us1h=qutGxYz*-k<(TvSnAE*xGxa!OVv{#Qes5naq(>6|0i$ z8ik%DRCNK}tq(1<(E1kyL4S|{eUpIdE(rS6QUhJ8xmYYF$zo2-Io}-9jXSuznVoa? z-uiI-#*5_CY<30(s2F&7z>T=q{kof***R;k^;;FjM%LR%I25;H&JGR~LpUspEz6jq z2;aM~3M_$`DY$fd9XUhE6siCuN^oNHYGP`{-dol| zOlC}#iDAS>Okj3*aNp5)0iv6~fS!&akoWFgdU*+WeUlo$b!2tHqv+ z|2O|l454?OJH(y+Gisv)ek;h*|6DEOXm0mjwGoWtQM_=dSgTo(?tJORequ@Y@2t)P2zaoK zf9F@e5Hm&K-a4K9(%a2E4?%!meCy#??%&%aiG+^z>DbP9?`-dGzZ_Cnbu5FKxn&7| z=U3l0qO$?+F7P*2{P({8)?fYN*-+@Uww7g>Wh{x4s-U()fw~) z4_5#A-}!}${hrj{JU_X+A~GlVgT(*qzxwdkKEEwXyK}O7Fa`&H;T-S$^+#D;fgJd+ zeCe(^HVF>9oA^Kdr8~d&RvyIftYfkYjCqI7U^wFcU&F!%{9^4+FTSxrjyW4l) zSud>y!zScyMq)V700zEr65jawThG3*SxVci*Y{3_f$b@*_w{%F+86JXqUYP?%vNnh)r61V2`;_~^;&E+tRtJPp$tr3eDp=c>8<}ix)AAbJ5ckexX z^j4$hG#8tjc|!(85W{-WRdq5aQZv&^ScnUwnRc>uINI7-L=tlVvLV*~CO0+hZZ2Y? z$V4Up)D2EV(I}{s8F%+AyEGF5V9KVZZK;cDYi7&>Zcbp95GcgZ;B}syc^oAViGagA znU*`}XQwBd!+w8rbu(m6ITT%{d2b#lhTzg|^9bT*tu+P-X9}xj-Yti#C?sNa!S&Sy zyS#I9mt&}EwP|%&cN8$gnSoa7?&^Bp?bcy^zJ7>0&Posw4sN=X!deUQ-M7B@_QTVA zkKU{6bJBp_L0c7fw5H%j#4sgpbTfBba6mK$u#s^`|1c0m4lkbK!uV5vEc!e88 z2qq9>yG2^|3l$564Ph8)L9=S))Tk}WImDb&iXjg%Wo8KC!LF9W?DOQ*T%v&}84-i5 zp?DFmOmO2vt;=!<1(9e7?29eMW&+0)Ox9p;iEbWcAKkR?um)UM9r{NvSt~y5)26xUD@3n3=R~$ z69POmbTmLEl4g+*1u>&)n-5E^4RA9jJ6^q*VN9WO7eNMVj*dL`?zir08$o(8Vh9E& zc6zx?cbIw$#LRGKn0EvGQ6x02%~Z)98A$Qy4Ztf{*4uA)5$;tJ0QF92GwKeCKq+Jy z5Zu|0z3}}^yCrogxZ{9s87{M`+M6%m@v)8eXip&v6 zL@5Mwhr1Bvz{x2JN0CS_MB*f*fe?t8h#l0!S;xIUM(@xY>?t zNurTGvU`h(BW#5@8l@PrbVD8!sxgHWM@2mw$2(^yEWwsW)qF;~S;{gawBanRw_A>6 z%4ytk+E%_vX`l1z*$4ZJ{d}m)dKfr~!;LtMr*SNY>l^j!lhIbgT3c(2aw&+Wl`soS zj$s{1jY6%3S``NoBM6azh&Zr26Blo;-kDbY)Xp3=pn;2Por{{~aU93Il=)_!(l%~G z2xMgj%unL*=C~a(F`R-}(@0^(alW1^Ki}Tl4mlo}3Ynt~L+}`{Z~U;I3)&zl5M?8A z>U9;)ILe6}9O4FMjv=I&g~f=QfCwyIK6i39A_18b2?4~-`g*bTv(`w}6lfq2^jMwC zw*_GcFRvPXJwjAThQv%e$<~=Lguc#&*fBCQe2me3ZTvV=sy1%79hbN{y1Uo(#wn;b% z;OHbOVsmHsMtCd9jx9WWH%7vIe{}>!^!{#fKgo3RaMK^K8=lQAF}-t=fb{*Fnad4H z_dkOTZ*S#|?aA@3(Zve~yPrq8cW;H`X1+zj5QG95sG2j=S!Tc$wYmpNXMxV{tzU_N z(We*l#q&?U{44kGpS`^L5g>4Nhl7~06>Pwi^DTg)FVs5k&zS5?a-y?z%l8kv0s=_M{9$ z3leIzS{b$?kEOO0rT5o`$h8=Git((LJWmUYiR7k3T?+hA>x&Q@Ndf|qfZWi?E0IdX z?r{C$^7)wJ`Q3-(5Y4NZ3uk6F=u-B}w0EXA-u#6(-+m|Zs+GoC1KmL8m$WZ4s2W`R z$U)WBn()G;#11#FuB=BVtw@X`$H;Mj1dzM4ky@wwgP9^zCKjV+>INZBYEWipHji!q zv-Z6^si9Q0*37D!D?`~Ogg{ABP9cR}$F0PYHJZ7X!@OUnLli$fIbY|Yt@COXC19>_ zwPkKr6eI#N_ipm#V|jrGIa%PfT{E>1U?%(hV(psjc^a&mKm>ub4`-O593&rZb~i7s z)_HaR&V%iE-)gRX3{URRxs+-Dd^UgZ&R5=i>upIVvyW;Zo+K=$lhUq-3;}a==C3t( zb$-bueSPwRX`8N}58Hcby^#>>;;mtm2e6n~(Y>}A;HFJj1Y>Oy#F>@gM1eRtJ6uU` z)p&6y5|7EbkrA_b)?f#nAAj;m{NC9x<~(F#8U|TyzkQ{Vq^l$q39Jl zo?{RRAe!f*g;tx-efgIk-M#CrG&PF=iIiZk7C-EvKSol znJb~+{NQG)j^+*^Na&$@;@}K<egC4CCqD&#z9t^Wy1G*@Q*hjQRkj(2NDZLKU*%;RRWH40N{PG;_rf~qZMQo!t$%oGALbC~7m)cp|P%5ZojFd-+_0IHc_ zlu)A}(2!!xDdr(XA@<05UxsVmsVwGm_2w;5Y*3gPxqGV|s+*ftQg4{{m8*JYVXoE9 z-BS?A0Cj7ss@1FkA%r2P)n+Rx45f`}JFVt<-cN^p zGXV3vBW*IABqstHEE2|$EDnp!X0P1y`U2XBn5Yl35y8}2DMZObYp(wKh+V`iK{&CK zq4dSUEg#Fx7Dr-=LJZKcryMa+Itei&29L~%gq=;ek{THkg#Zy|5DOD&*B9zUOZCz# z8yxEJ>X$uAJA&BFJQLP}F+n0V>4lZu8t#Ee45Wl!Wh=yNA$SNrL|P^6mNrkzvZ$G< zISc|AGqW+f8!;o0M^Ix{a%V%pEyU97h=d>r_1Z`3G|1+z)|!zT1!m@3$)N{|tyR<7 zm|3NX22<`s#lFh5m+fT7J}n~Ylvv@Ndbx=VENg4sngtUY#*GQlVa;o6t(8_=Q*X^woy;RM2^+}$=%vZ* z2Xj64a|(4VqnlNm_GPzk*H`=6mT@g-cebbJrs&B0&}pUx;a5#r{|5K0z`6RaW_}*ZQ3vg3ljyBNEFGV zQ6wamBnaMpF2tbVl$Zu0W-sQ2h={;kQ+!dvOdctSo09g1fnZpNybf_-8kw{EDujyO zX%$;jHv_SdGeIH(69-CxrpR+}l~$WNY6^R`WnN~TEsm;5mPrg0r>5KiiwA9?k z&2abLdE(TXI)-7jO}uIKIu5)#*_x3}vCd^$=6Nn=X6gZPKxobiYs4@WC$ZzetDlo_ z9%Ej#YHJ}UcCc9p!DDoxsZ})1LyUuaK}yD>z% zKhwJp?d5pHyJX7-Cpg~*JZ|rGT|9^2cunbrqWy67AJ$%&=tusJ!I)ZqOsIEoo0|g4 z#OO!};$AJ+fe;Eaa_;ZLE#yFs*+imlWM%?571f(7Lu9)P@R1%#pY62!wO_oePhcRp zI;!+<@j#z-b!eyZQ7=+Z>-H8CfaRw7k3M`c?=C<0!0zSSasXl6y5exuf4ijSWJh;Q z?-uLb$mE^YCx&o*SC2$$7b2nlv&YfJ(UU^N-SgofBKwTcxiA?~0cTvk}-pF3npj^ZsyMrs;8+tZEKnyOKOq<~BwQoUgnc z4wJLx5S?97jY15u<09c92576(^t@+Z+(#f*t=1;>2$Su4%Sq-kw_3=_ytetWOc&-; z9$Z4JSU_%$QY%w1vZog}#;f(6w~)?vjVh8EB%oARFC-DJ1ZQeQ@V+{A_FEF)>(<<= ziZ2$^ZoP^N$D7F$)h#(;v!8s{R<%}Lf~06_B-Wku1gpl({a(a$6m%Kh6hwp&0nfEU zv4m!_dQk-*eiBm}Qe=KWcg7faTn~@ll_cTQkFWRBp>Gg^Q*BnAoQN4wh!VU>wRU|d zIjrtI`n9Fm(@#G->^~F{f4Qr_{XYOVlMq9GK(cZ-kwAff2naC|8Jnv^>*AQ0Vi1D$ z&?-a_Vl*YSMxv&++T0tr=P#c96mET2>#9FS z#>0G&z)_^SDokL3B>)OE_ecas4X%U7cpOwwbdXoTm=Xi*2m}=(#3W2yld@1?Fs-UK zFok`HluV6vKEZCEL4 zo%Vja@^Lq~vIqo6yf{-3QC$`TLRyGwcSgOQyJTR*01fUH>YX^!*8%{nIjXWS0wFM> zP!Ny^Cy~LJtyf_Q$eEc`z4zuhGYj!8Zp?YbWkj5cG;PLaZfe#r6At8wku!4et@t{C z2dKb|%n0V}2q1D-M{zWQM^I)Vgyu=Gid>S_>b2Ce6gxWgdXFT#!0pIzclUT)7?VrC z%sZ-T?~bE>CK54uU}mr#(T>(sn~|yqabj|Jhg#1bHW)Y%1KyefMo?1{b~AM5C2m=d zLP8RQ3xX5e`Z5?y6omtk!_~~1dFv+)_qGdj>v3)o?-B zX7jL2UargGaC7;1dG_gx2k$)i%2z)3;O^PH8UkUOOH-?*)kbLI>aA8TwGTrT?6+HI z1JvC8cp|G?bO#_L=>G(-O{YRpdivC@H*AmK=tVZSi4dmdhJg-Z3ck|k`^RVZJ<}AX2nBeBt z+}sgTh$=80QeL!7H9yRLMJEsM4ujlyRXf0(Q6-036RQsHv4V=Bxi5{auEvyviMwT3s!4}8gGE7o zZySjMQ{axUVO2QXnboX<1ukl#-=NvaNytUGftzaWU-o^W6EQOpyNf#kd}OFt?NJG~ z#xSq|;g;s}TJ{%yEcAi*h!y~XD!^c}+cwAE2u^>FUPu1&!&OMwupV1@9l)`; z(a=Fg9dmjc%_3uR$FZ@5NCK0&b%~oP-0Bq8`4nbghN+zm{_9`4_ls|g+YSiwhEDkI z4aqMnLg8@p{`-D*1UwwqB?|94+O1yW#xN#uze>9>ZeNHWKRrb3)S=1!0b9QVyQ3eN z9_IJ%JUkj;!45vEEKWe6<9Jf~TWK9hggza>zaJKczd-*2-43P1CAb7-DI!&(o4K>I zb=Rc#c1JS`AxK!I6wRzuHM3HUSj~w=h=~LB0(&(tW@O$B&3TMt3Zl*3RcTq;uG-QZ zb6NKL!#GliR_7O0u5!+&XJ@3Vi>DkskKXL(Fz zSZq{rb?zN6qplJa99{3p-t1} zVNwahxH%j12_!UA2Q76uk<)b^m&05SMFdmX2frDIc5(Im*@cJoLmmS#v?^lJFig{O z`J$Yj-sN<iafe{gNZ0>F?K-nEiu9+;7Gn`)g*)N&LbJpv!-xJPcyq8v? z9Cit`j?FY0Mv&Ex_t1$YBww3>B}b`1frY?~ZXzcP9r`n3*U>86>r)tu=RW$eR?meKr3-m5X$< zUa3M7^Ei%Ycke%X=Syb~zsT~a%*_~}7>J8BZisLbEqy%hwDkF|Sw+h#kpsb^Q4j*d zNU9vUW+saOeQe-}G;8t^M<_;!Of|X^S=e?GqGu7a7K%7mh7Gh5( zvwJG$5P(A8rVxc7QLWES)!juxWML5^@?h+q!`MPqGj(&gmgcGfL5PnA_#XE&cbL}0 zJPU?Rb~j68z0oCwaAHza7kWAEaRU=`g3C*TVvu0)>UxymU*qk>iKn88@d!XaX9*g9PVPd=MK2OW;|=n$=QOD|s`Le$#ShXYWSh zm)mb*l15cYNgJ4$tTzJCts&Ok`a^_%oSdm!+|0@8xXM#gbu$447B`f(_%yd>MOzNC zJGq|5bw~+J!ox>Q|-rv8raRm0>p^n!r>U^@II3=SL-Ot ze%PFD!QaF&ZSI^uczYPq^^>+cT-Ul#Qzue2VP*sdyJ>4pt2T92S2q>}ktjk!)y#w< z5i>D+5NGo38mDWdL?R%E*2?oN#;f2?*k3PC9`B~b-+S-P^Rtt1ev)&%yxiUF4^y1E ziB)GN)z)gQY6ADgOpb98;%+7(x2|Rw2;GdG+y`}IBlWr%7}gAUT}#K%iRI+66Z)8m zAj0f!OT|)!C{oOX=$3#C41f@W0z;T62}knOag{<*NP;J^fk}FZp2>;3)s(@BF|rII zV~};?Gf8U+;!-$*1A{6wkVa7^7giAuLPL}k(8{7#@;HpEHHTO|g+Mm8gatqfvK_{t zYzs~{C!mv1&f4`jyQWo2A*_+3QIIO@%xn}_64xoOgkvPPWoC8>HjFEcCrlewb1Y*X zBJr2re*5$smw?FOBn=4M2kn5X3?iv^Sw zlM82QU^R4YjldL$8ad1xyje>j1daj{n3DyfBoxRE(7-x1F3UQ_v(?%GtHrntdE^MQ-FJK(s! zqd(ut>R=ql(V(AkM%>0Kd(AMhnY)9S+?)u3>9~_6??ZA21R(0$Y(p1nj&_0uE8wmL z2^`E0QjifKPVf%*MFYSHEM$D#Djy%TSA$94gx{vrd)sjLL^u=Nn>lxw&k=0i<$P1P zgA#zV&G4W7?XM6pl0c8|xWSKYLEZ97ue_z?+M6F>Oc8!;D(Qm2G1!V%jBX4#TyYxt zKl=I?e&esbn_}eKB*{x$w{<2r9g`5C+oOEj($Uv1)}8XiM;ba&wv` z7xdmEA_G?^c7)?GWkVpan}g|i)Q{s1zZF=BZ!MPaen#9Hqag}bqVRG+(w~w4(!cQY zG`#le17Ys14NTl!D$S3`1&A;UwW_t5u!Jzgkbyw#f!oqbDU+jsnz{C|kHe0I-UdQ& z7i(~jAt%S8+K8RV(hx+lsWh8QYiK*u!??C)Hymu0xow8lmO!R(mjnvljfdcnSWV1o zO2e?GA+5*NDU+DHn>AA+GgpwSw%TfpwoKQ;*Q-^U_A>2nru|_YHvpN{B%zeU5V4Uj>=U6f9h=PHN6)S{Qa5ew=vZ}esGF)9c{@V6IHX}UtTuVOl_XS_ zq8$iPt(ig^H~>yYf)J$EYDOSo$r47E5s1dMxoTaOsRT4~GM8FW$dp48F=tmSYR#NT zavXwSS>{$$h*m?g5SU$UuB`#fGGDN{v^3=PCS_f6yqd6k*@>?DI=WX%ctYN&4JY7_ur5VNN|1PN4XT#DaZKe>4Fy;g1{#6Rtf z2j>_=9@NB-cXPi(XQRm0 zIu4vrwE>_A5;rwh!m;ImDFoJ>e0#d$gveCmP_)!m#K=jMVM`t3A(j19LnGO9MutuY zl;H3drbUrF3n`#|G3MR^i-&cyQrfgE`%-5&B}m^dJFL}KYH79fbzxI2wcsUdv%B}n z&6}GkY+iQChJB0<6IVdW3v~9S-Y6+vBG*1`1|vKu%0V-s~0z z(N({;FuI055z=j4nYJFeaG1TcF%UaRkT?#T&B-dq;6-Qxme$PFoXjCCLJN}vu1&R>HZ?USa12Q# zN^lre*8mZU>|-EbA!j~24?`k>uQp-52{A%Qg)JuKfp3V)b$g1N%NGX{Ioqx~!v-*g zv8X4K$kdM~lZ4t16@``xZ+*AaUsI>*A1^i`ATzAF0czYuT{3@d_X|XZ0hvi|dAI}; zP-HSDVs!T40FR&q49*!~_i79Zfe@S$(Lh8@gLtDDV~kAdG=>L_Fu2F?`ntO~D*C=wAj5sBmh7$C&#frcT+VKCTID+kUgw-Dd~jA6A- zIeSquBWkDHk?Z!wB37dIrB_ZFi0~A$5R5X#fn(+z)Y?Et% z1|nnabs0inW`+w3#Owa>;`;h@+^okThtRAOEIcxW)#$c7pLW`Oy;{*yRSWwtnvaJ2 zo3ppx`TT>;`NvP*UoM{v!qJ;^Yi<&S4P~kI;)URFelq&v)8e5VxEy4uT0!b?X3I_? z3^_&QooyY2}vl0*|?~RfD8-|WSN*9t+&q*NXS_j-Ik$%DG>va$cU?>niqF4 z*r|b}@4<*FoJ_%N?gquJ*eFNBfK=iL7SI5;KuN#r!&wQzOmE?Ty*q)tU&r`mKkm;` z_56S763=h{``L%#<2``|Aa$5~=j8e^m(fS=pzepT6>?cmP0DvW#23IGA*AaREf zZBoxV9K#LHUH3NtLLKWtFb5r148q-SAV3e~96`VR<|)T#BOKiTy)n(n{Upi=F+gw| zDd=}f!qJc5-F)%0Ihj|E0=>!;Jqk>IToM7qJ+kAU9mw1M(0&Q$&yKPpB2306<^COP~$d6^6x`7;x9^HIOd?~726VS=}~?JKbtmH1>qRuV`fPq z4lLP?07wYINxinZG+VST3Tvit4WS2bSV9sR%%ZA*0w?N`&O~c5v?-RQly+I$jkN>Y zn%k=2LiKqHHbkkImT7Kam+de<7+2e6!8}(ZCSfo`BES$@0_0~T5H;xRwm*YT^LYBGpM^9*ZwRLljK42ih`IrWN`@!?X_c~O4W=D;2{L#2m{F& z!#c`Hl+;1sm?Bx5=cU#q^rB<9s&R7;5Dp;^lCnA(5JC(Lw8{t+*LjF#*_Sr$%jGmT z)){p#wfVk0Uk)j5H)r>&PnTC0G{wArV;J8YRws3lS!;|;?&<`}ag-28C8#!*-~?CC zIUWu-Zc7wO(&pXe?!~8N_vG#!+OFR)kk+x3)FdzgYL^$!FP?pTdiTLFNGUrGHss(| zh!(d6W*{LDn@MHv{spM>L=9{LB)sN;gllWli?ltpF0nLxp!U3wBjV+K)BI6;M-$eGmq=Hlk@2TzC1C?PO# zaxx^)dQ9!!#=uvPcjc-TH?1lrEG*1ek}bAR#uBo-vQ>7QsM zfJt1XVcWD>t=;%$Zg2^aoR_wk@R&1)lt59KQxawdw^~|jEE10XYQSDr_Wh|U=KAE$ z{YURSdgr~j-uu$|y?4`iH|C+%d3CrhW7`v&8d`I9udxOOdlC_dS5!1pR1#v4d4bW= zA_Tw;i5iRy?8Oj;8LrKh4DMQ$SR{BFh#ParImR}kcrmZ6@D_?%U6qmtISgTv0+wJ+ zM~zjRD$T{JS}X*r3n@!TLVzm)LP5RG%Y4I^L*AreJ+_s(S8HXS%QBTRFXd2ln%WdN zI){R0ur7f5EhpQosy0vov!xZ0Gu)UY(m?B!R{LeBbz&Ar1kBpOZ&wd))*K=9fi9|P zwdM5*Z!sPrh#ZK8ptq|eP#_YxnlI`jAPK{YS1ae_flY{n#o^7#piF&POFahLF)Ku1 za0n#KUTw3%>IU=dYCU-ADcCB>*+BPKSZ4w-b>paMA0UrR!2nQmGxi|hARI!FKxQNJ zhPVR8@WitlYnw~WW}#2maMV4z;hx#q03!DuR3>2x3^A)htwGf~p2`e>y2Ay+#M0Fl zHS;4Y+`Ag#AS$)(chmlA+3)L8w6xkv4UnN-?=LutZ0_VYKX*p(K`6(8q!&Usv* zJm1K>Pzh%su*X|2rT0Xgdvj~%Xs)W}Voo4CMlAqx5zZ+MDd*@?Zt7w2x(`9B2G!=; z+^DfHy;A~Qn^jZw=42s+C=^AQ+>Kp@Ntq#naq#s@PVVN-Hgu}l+4*X7XB&n<0GhEw zM!vgA*TeGsa{Az>&!1gf-#^`K#&Mp@VVHJ@dC>}@Gz8(bh=dg9;ZXKVoXWCzS-i}x zET&Mv$gImk!j9xQqZu`3XK=6nq}R5K>cdY#klqb(T;Yo&5L1xAoFxpP0W>ft;v}4U zBQz)C6yT9)a9gQ@Y-I*U1`Wo6<9W=_RVw8w(Yde2C2BjB;e1%1NZnH7atM-g%zI7b zk(}6!7y?9>WE`2J`C5ZFgIcBp_oWu&01+29MB*VNO2di+tIo_#Fb`R46pjKGl1wRw zRgSQr)rtjnCr&BkRdj-og%|>@QjE<*vq3P{a*zc%kyzul+`IpvZa3fh$+Kn)ak#vB zu2xRBckfHsjLB@DGPWn{oZ2{UoFC2;m&+*4ILzcR5EGLVDLh*nVGdPlLP}&nAVDB1 zy0ltMt66P2Yju!CrVwD}wU)qilH_`7m)E;m=94%ML)2PM3|~2W@b=k#UZ1c3#^1g3 z_y?E2{V(RL>k%SKPR(H;j4`sSTwQH^M#xz6E9>6 zrvfMGbQK{(BV~4mi+f}X@BlZ`9-UVh`bXRqu+}Zzo%LwPUN;6s79}nQaa1sOc8$Z> zy(@)q^5Zqzy15=CczyB$+$z&;lAakLCvGr04!*6^3SaI){B~wee`I6&XQj#gtgJvV z9CO5UjA-A8H`oBN95s>SZr$O%9PoBpZ*cTEXO|S*ph|2^ofh1E84mW2gX)kE4!EuP=t}{C zvGw2y9S0BevYqK@PU%vMx_8T>9FvFy7j#U7A3qMnFQ5DPxyZL7fZ0o0aTgV|YwI9) zkP`vQN6Z2o9q^CP9TA4(r``*};Q@4f>gLMi@|XFDpQH4S4t;TUqh8J3K^Fv=S}V0# zb%2;tlo+x|prZqbLg399#}@Y2dUdm3N@I2s@}?q8!XzXCAs%rpBq7DznyXIz!`7_L z%Vc)LvLSfBN`?GC#S0{)M+5zS%aLGH>?Np69L!)b76TXc($I{E zB#3~hdeu5RY7g3r#1O_9N09^;7($jX4!q9S(k`D*ZJC%5a|q@Vj*iJ;NW+*|NYw$3 zfmH&W9aX(mpLg>Mt0ghS8aKb$?=l~5E}zt@58wHG-mL2KVxBFOx>^b`<@CTalUuDt z-9$1FiUHm@L`YzY6tV=ab?=Ai&go_~;Ns&?pFR1Z%{O;X-g@xp3)?%J$rdiT86Dd&sYmw5Yb|k?U>ds&%QRM#7YW2kj1LxU#`1_KPCHwNHaM z66Z+Fesw)P{^)v0s}v-SF@_L?PBsJFZ7%!6LI)Tj2&XVq_uY%fkH7VUPk#E{Cm(^r@ujv>^E4#Mfuqcnl2#`Md24l94s$zrAdssSt9o0u(|JYA6p9_D`SS8Qg^*UO zQzAB7+ES-l4)vzCDovVdlnka)ODl`};=Z_{XDi$cZp_iFl{$?%0D;*#MB)r4;&33T zTA6~7H>_Hl`^un?(OYv095^v+du@GVLFh!9pqK1{QC6)n+EJokKqSRVzRb%OsXMgE^pgu;SV@9>FGdtn~ z%(o>EY<&S|P(OOtTwac7da{#lot{oaAfKjk@pyOnd|77e@fp(=*q(<{=Orhuq$lU` zbQ7mU3>)&$mtmdSrbk3sPr|4i2VA#2w4<1T=6(brGFYI;2(PaOahPHw9$oju&1-d%yzmNMjc zc6yRlD-e1}1MV?}yJurNv^wpcz5nFn4<5hs=x!Dc!ZAev`|HDeC~1|(VTh}|A*8@d z3UQ33*s|#UvQ#bF)EwNi(|yYnkOp5AX3WQGqn;;wU3UzDyFeIh#{v*PX89<^kPLyC z%_AWZXO58(*d4AtB4H+u2#W+#&)yM(l!-{vHmJ0w*1(YvKm-+09v~ZuYr&dZYSOLY z1TuA3z=)Xz7L5l;f+zAVM{^~U7GiN%GfAMt3wNk<0#UD;CgzlR3^W9r3^IrdFH4=7 z>X?QE5emj8%py657@<}H43hIWfCC{08&FBj*9a?uQJeRds|RmAdT{^WeCsDS`)kNZ zGv`5!&gW&{7C&9pyASR>yr+Rb;lOcof02NBZ|T~35Xr(3Yz^kFiD~8RjKW6JOS;YB z2ogd(9QI`?+i@T!v&M)yMsl=jLVj2#ZDovcvbHP}#UX|`P`qcGuRMJC3va)N%^8jB zhhP77I*Awm=C|wz?*~I-Uf=*ni34gV3qRjg5>rQ0I6@eD1j;!fq+uK+s&HMcWs?+T zN3{rOCUp`gh6uSVz5pst-NF#u$#1#7e7XKoPfT4IqGKf9tUKYkIh+Ipa%Y0v2J2qkk@%~)$3L&cfS0a> z{(pK|b9elTK6CHW%kS)$Zu3`%+1;;6{ipaAZUEw*2tYTeIs!BGojS-nGQhz{G3VtE z({ZQ(aHkC3J~ti7lui`D!H;4?=LPg85cuNr&0(46rM6+SUY)Kb9UDdfbAt9*hwIUl zfLDNJo#D_Sls(z-@;2hPZpiLrfc3P2-lk{!TXpoa6BMqu@5`9?jxDBJ49}UkfXOiZ+FGq9XKz$nEYsn@#CxOFdjZ49^kjz&f^O; zcj+&+H>r1$15~(o@5tuCHGK_~1O^uqSEWs7l7L#3B+F{~pt}$^8 zL-18A`Nh?X+7_1Ju$1SA>xYnZvwu$M8cE}U&o?=wligfP)n1Qfrpy{c&(_r-DMTi6 zX-%~XEQdh4Slu%e9AgeKtGc_d*Td;%ymPjFpW2g8Ct}YbkSdWgmJHg)^^g|$V%4k>B9V}_ zxh@xTz1c4}`)QYB;E=e9d6*8qlu0~5b@$?W+?;QQ`-jWt({h2fB=&Tk$9%rq&&zUf zcQa|GoFt?~9Nk62IOL64Lz|mUX3G$qaoyTS5{jfZht=I7J>WUE+1ODJhxgzA@y-7F zt6%-{dJ_!`sFFL{OzlQ>4uG52%8FI+K|)GlNCFl$Qe!eECo^<4__bXM+}lzrAC{Ph z^~tb4hZL_D%T&hAo%IkIC!OT(#|1A|VQ`b1J9fZdaB=2`n!5HT|eevOAWZ+3NexXO9I8gtH(gh}!` zm^(%Cd8y3+Rsr02-^y`;(hIg`axrHSA_ldlT!H9KT!?ce3aF~JZ-5%H^$I~)W=b40 z=OCUD-MxX~63Cku)8$5oBq7Bd#xks?Wzys5Ma#UN+YM^7Mh2@o)n!s+7BN|+hNfhVhkV0fwDeX|^*{9Y#cz|g^F>l(;ytoyBz}l63VrEJb0^G|o%^ZnSGD#97 zL@?6;)mHTYAW$@6XmQuudIA_EV2~I?;uwb4c)tK701Fr%3AfpwqscG_Q1GHy)Il6G zrxhex2pl4X*!fM?`w*lj?~b+s>&3Q2#0)5NR*%rpdwLMbo+Pk{!D-p1?$_=Q=^&9%B2EV$W`1a+h+I^gW2M_yD< zDT4_Dn3EATh5)@3voqivuI<=S-uU@o%{c47)2<$^v2iERq zjsy>GR-2aUBpmuO9pYr(%c32mw`;II>7irER`=#wU#mIjmF1e7wRV&m;DU}744GZf z%*n``1dY9*)2)+f9R#QvtcOO7(M2Hdo>=Ry#if-)TlR$l?!JBJjW0Y1k*58gEw9Hh zkHZmPq6&hsF=QC?!@JsM-OcmGCl{C3`#Yy=2Siwe=Y9G3qbnmhKVP4pPK^GPuNX8JsDY)r!Pz540i8`B8io+_65fZ&c^I%|Q3WH-) zoMzIB1No92esq;YV*cdmlQ_uPqX!nUDtT=Z0tYE9kgPx>LM5#>P)ISxVYH+BE>sdt zo1BMFF6SlDo98(U&6}lhGi=V)%#4Mou@H$GB#<;y){>I9Vx;=6c-v6 z=NYC#CbYDJ=wV%UTloFd^H{VJiJ+zpFbh=Y3Z2)?G^9y2JG8a9Jsn+EdHwLMx9sc< zu0_)Q`(OR_So4SYoyQ-3n=xc^oAO{; z)S64q5~A_4RIpogb2ub4Wtck1NEM}%U6^nb1z4noL?A#326apz6$GKk*2t9j$jxH{ zxszMy1txH&et~c@^qQ|Og1+uB^0f9JxxYedw$wLm5LJ*+1vLqqaGI{gU)!jGF?k16?9WHiHML32~ ziV<5%v|ici=>qnpacP;9+OnumwO#IRrg<8iMxvE_ZXQi?-ke`QdkW1l$H~_f=ZMLf zW4aLDA9f!Nv>kJ-Q=6xyG_AF{wK4O0lvbhEK%wWdhn%L}Zg=^D$5m#^fts^BwU%-m z^DqqS?4f@Aou5p*-Fxr8_vpccX})%wPERR@+UjKLWof(Jm6-^yfzg>EF;G%iRpG{g zn4PS-3Zk$u2jYQa?8aZK%Y1_{=5f`UE&Iuv24)F~h)9fRA*xIbTFu2`3|WTlI?6Eb zrfGK=h9Slzpv`9U;Qo2cRCGDqJZG}NF0NuN!w23)rlwN$bi&-mXugzox$HmOx0^$$ zEJ-4(tGUFmO#`l8Tt?7pbsBl&WtHhXf|9%#{4l+EKl=9cPSSdq4mVn~&ZW9;H=AL- zVhZGeWz2a^WHq(rFx7b)l5bbOUfsAY9F=9YTHlT9c!x!sefwMA-0iO(eD2Y`x9^M9 zND6P>_P|VbV4a1@%$5eYBS?s=6bE8b6y~NP&dIz7h|OWI>C7;*Ivpg0S{LlE^U$`d zb!+F-G%w3M476DdqH9@-O08NC6hq9ml+tFnQRjtJBQ*;Rg@Hr@hQO$H;Eeli298)l zit9LTQpf;bAIjD91CIfW&6ols1lgXf?vz%ScG#B>Kl;IM{pNr7@elu1t2O1}bUO~i zc}$szJI3u#RZhH>vfI7TvZU2eq*90>gw|k+AdwRdne*TwQfpRgEp?f8T9yKzyAd8v zBn3>EngCic zH#7GjB*9G0Dg)NoQsw9ZK%=(?R1#1llgtFP)@m_t0Gvrm2niOPg$W^WUBjCW$$g)N09xc|8@arFyj0u%4IP>RgJFl3Csh7j02^vRX@JLX5dKUFt-K7iwh) zF_2VkOI^C=U%j?wrPmpPsUtIqA=Ux&phVP}$_8(&MMmO+^$xC*&L6~$2)Bey8TN?brL z0uBROgGXZ3MYVw_K*T}{>ljqj4Wl7-H~cV$I1B`)=DL(ns*I!SdeO6khbv5rtF{sd zEaE+=C+(AILJ_?e(sCJAp8y4E){)SfD zPrmv6>oRRttIZhqq4DboS>$Kl5^Wrs<4*^*MkU1uc;XsGhG#HJt+FjjzdiZG` z(t0(P%84@@34v0*(HA9eOYJBs) zZ%(J1x^HoL_gC}w;gfIv-p%*FwY_{cauq40qP$&rRby2$SIQP42`rTmPdD-Irlt|Y zn)P7zxXssOMONn?hvs~!`=~WBHEqIKJ(d;;?4c<)h6e=`m%t08x0Q)=1shTGSy3Go z*hF5rPqiIFBIWaOmYm-1(L?8;IZ&?lfK10&gff;&XZP!d%9AjSP<*Mzj4l1SA)Yyiz9L^X4ax@{xZRp|H zq3{yE^@nRY_z%0;ajgA2Dj>JpdwzMuj>6DOVdXQ$<+e!Tvp0$9m8T&38E*;wEW?vt z!8Op&9KWCO+P@@9@@J2H{H}hCj+qwlD?f9)qkhHOdHWLORRQDQ5B$PkSU;u16huti zD~~KBi8|D#LAa3gGfJ@U4e$zxn8`Ci=Y}e|xuo zp=1P~_J=mlTJ+{dhH*pTPKdTn&2?GYVba|+6|y0v%*?6{9&@sJa69_*JIo-leMCCA+|t_Hph_IQz=t33`6RMoTVHt=Ia-i z&-eRzwOOTnhv)>p8dsauYW3rfe)#O!^Ca0Dee-v}`^hIiiK)Hy_UY+1rWCZ{d*A=@ zcfR!pF|B^(SN{5!zW6KP(VW#ywV5l+G2(NCkZ}+i9298iA8}#`DSXj-P<68^;G9zz z0?iiU;^w9h9<(_b2O^ygPal8y{qKGM^4aAZj~>18?z`vbci5(PKKJ$;Z@y8M{ZD>W z%d{gBFK$i-lyabjIA+)D!@+40@T}!>Ib4-?U>QT&kOyl>vRVzNaea?!```z^|Kjrc z&3DiJ#dN5ZWtD<1hsTHMg7Eat`Jt`=o z9mTFMK7R7av&|soP;XxB_J_w7Vjl9dCr>~9$@d4U+l(h4{wTn`l^A>+NTi8WaxH4+ zB$CXDM7o=f&54*0;K7Z1F5z`w2%6S99YTt3Rok+b7*`J(6`!8gMV0QQyw1bAF4MA< zq`9iiGNbLi)K(2%fLck278Jlua_lggE@1QvpD?8ma#+PU#&MO>Foqb^r+FWrb;q`E zha3WhK~B!swb9iNfAE9v|I-it;9m}doS!|2F%mIx@4(YPgLhDf^!oXace}?A&L3o$ zxsf}e#mEwvnPT=3vNm4kvXr(g-bw`~5Fam1DO_$)!t7qzEgfPP~3oCBofk+aE%*^60Og=a4h??sy2K%;@ z@@O>Z>X05iw70$N>eTnt$3>vu7IULxt9vWPEi258-8)>ds%ld!N{dld6mPfDS281J zUqHb#(@B<5L`YJQA%&bI1Od4kT*#=C!j3Mb4%~qo`4K?S$zI-lsrHfqdIUinmt%ww zIK_~nNFbIYS5_va_kQuC5U39;zheHV`;~QUktm?pI_f> zXmfWwySF*Jvy~uq*8TNTW{V`Ngn=Q>VhBW$$(?iZYR8u7{`S1arIg(!YnYB}U?T2) zS|Dv6yqB;>A@4R|ur#Nsv?iH^1!(X^7iL572AypopQkWvPVd~&`26B9dzP?)M|W?s z+ZR2QqEV~2Q35DTweDM)LOe8@3JdcP6Ns}2vJ}jBzWi$+K7IPnfBfX$o2T*gyoJ2% zuhY;{;+>^~u}u?^B*wJt=0PwF7Z=mFfAVx^XS&)-yV=dvIouo$m%HKQ^rXe{<6T@f zC-=`z4)w|7i%%OuV!gW&XKuVIym>LtTQp`pSk26HS*CJ*vfhxin}ZFqzMips^cabs zUQS;Qc{Pqv!uI4Og;s8K22E}FJRTnHBSi!(|IslP#sz zI&Q-@j8?*MV==@?pyt($C4@#G_asTliNZ2Z`%;2Lo|nV^psO{VZ+$ypojkKOJ52lC zv`a}o_vJ5sqGfqM>~~MYGHr(J%@*Pv#skGhSv@=0i9N;f>|9RPi;;NZdKtnT^FjDf zQaDsS_)ubWn6MLQT4tvNiE0i&jGDs8>6VAq^Dc#H;&dQU79wlQfe@R(jNGFWae%i5 zcL5o*b{e6fGkpZmqqJv#%2eRzp1|$}j<0Mz|ImDzUjHxfXZlWm^;Y+1?$n?^`WODk z{JZ~g8p^GI!TmGu#PQ$xmPp|XmS=@0W}{MCNK7ne+mnrtISyWYs*4e?bCT`PJg5H= z0pS%-$DeJM@F%>=KW;bv$9|mX&v9Vr&vX3#kaqNQeeA!~7yf+rL?U8N)m&``R3b%_ zd5N$Uc@!!}O9+zV%3EX_nbrU~S0Z*NZLZb!yJfyvgwi|jzV-0I8x8vDleU zH-GP2Kl#az#rGj@Ao5ONw>gJJ20>#xZ3NcyAVViSMEI)bw zgXb@v?XJz*_07JVZieaV=EaleV{Y#~oY&)vli^$v>nG*v;;NQ1(rP$8A(v&^&sxUq z=oD2Qgpm09^2JX-{^`8dDl`p@2a(e!+fAimc^x+d`{^^hR|Mh?M&RcJv8%bGeDeZ{OC%CJ5b0kn? z+6qOY*sq~Nh|x%@`Rpz+cnCvIW36pkW+pI;dlVi6lSfEMyBF8L_1piSfAvrQ#fzs; zv@{O#;H|g+>eqkcum8qxXg$31-n(zT^)|acef;TRcQY3##Eda3&C5wHEH`CYmWi8I z*S*$eO*{^fPE%axJfyf{j+-2Zn4Wz4^y80yGF+7{O&2#)%GrH?_2MQD`Qf854!+r* zj?6!uKiciD4dn(G-}}+Ge*bsBb^T%zkuLj+5}GmznOR&kw6t-bdB-u=_Be(j52`pSE!ch)4*;KcxEmcSe;#MFh5h(id` z1F0POWv}(bFr5$AL8MP4Tb&O#&qpA}Ra~#jw3~L1;d*}mj&0ATU5nFP%Ob)QM5!$E z0la_=Em}=RC{$fFBIb|-s5LcaVG=N>oQ5%mao}MX(lDf)gS)l49d52EGzPDSz)YLX zKrBD~@l8EES+DbUdlq9nPB8t?I-BbX@5PfJUp)KCqtAWqWHZi7T}sQ5Bq|93369pN zmbNUVH9ZQ#$KnI(wZo3M+g&_;`qO#3&Uy8x=@}tjJbV9>Pd>PK^3mtM@^|mvec+C1 zx6?XXv2l~uLyjp+3^~WZRA`!s%pk1JsAk^K#6s>a(GVnZ^+wIy3DjVQ#tVEoc1eqX z0x?lS2!UKEGN%ywt4IMsK)oclu$w^)fCSECBs3`mB6DAsV%8!jx5%6-ifM@^nTARk zh%B+#yezeUYHFKGJp{>(#3a2Ux-&Ql+_jm((K`RhSwVqVh^hk=gcamu%@%6G8)@n8 z-w>iOhL`|erbA~7u)uvbCy|kuDM*MJ76asUo*dj=lq^8`beNtqYt5=%frH5mr}&19JRKxxMr-9_^ROIUz=f0FGvEAOniyW`@B%VLMP3V)Vp2 z$Vlvn%PI|XfwBkH25aO@iW1A|$&CJ#877XU3eIx0; zF|(@(=DkDn$nNfjg=5Os&CK1Jme#78H>0`9+_;!E?Qy!^I1IqlBm4P4n?!+;gvS(z z7*Y%@Y({n@!IL>3O^1GLY`RU-S}#kcqr%X8JkUj2nOuTUO0r5hrx+3w^RXwL zh^b>N*<1i&sB|7FNUf8?I|b8W$I)Av+ithWnBM!fFaF|R`_k#@W9Vw@ZeClPmZjE8#2!-Bx<7cio}NEjol zy(p#XW{_c^k@d2#mq=BvMOGT-=aH<-8U=O29T zUVP`RM@`~)KPn%5aQSOru+2Jaq1xOPE2bi=i{0}-_+;OPN3u>A?>~Qj{bIL&{>#7o zC2b`{8bZ>xjOXVcysy9a%};;-_m-#cUzV#4=C>Zo#k+hsOY;WHjC$qR*ZQ>jr#il9 zqLs;gFUw84KE&j*ZS#DVeINz7AxuT9qZXtPMS`QwzKCiPlv3*HCcX1U{`}i*Oj9ef zYN$6pWivb0hWGAjNzR z`8o1qZN##PW3y|sy_cH-yc&k8Mb(G`yV3Eg=pbTqGAB@Q(%#PJ{z@X@FJO@A^tz#0 zKbI5v^;e(M&nOr#)n5LL6Y$ayMF7aE&R1o+o>#mkN39hlXl*$Uh^R|pk;tKz)}|;c zLVUFi#9tLVx=_V0O$dMa=ik>q;V*6;nh-}*=Y@c;3RfBU-^*B5*X4;{j{AKZJm zyPp2m-}&{;Hbh^GMEBKdSf8Gp#Wb|pbv7osbNb-TH{L4?QrK=cXV*6$USA)Ut7n&= zKKaTQ&mP=^w)bthIp5yf@9g{Eefr|!`r+L#z5Di~r_T>R`RV&EI6Xhvt~NA8->BPR ze|TaJ!J1w@d-_lR@&Egu{J;JOTiRd$rC+;u=lpkm z_ZvU__HW-@JZo)=V+c_mz47Kd?|lC5`Gfs#w?7;%uWoiX&x>7~8hH_!Bvfjd+{q({ zjYM`nUFCbH+xsD;*3`_4DaG~r{#&cVB6*vJ4Ik!dfA##?*cnp#&3|_K>woj>|KPv;`*$ARQ5Jl)K)TbAV}?ejn<6r?VDx3=1x$MGbOtLAk+Oo!cmdwN1A1DHjKDtMtf#Ez*ct-v8E z5xX))CvRG)K%z7ERv>|7tYXL*Ld-eDC}SM+0M^AF*B+_OJO@f4MPWYK4sX8w&Z9R! z_vr`U?qkuua3%V)DzePX!n@t|$3OXlx8D0JpL_4itRBrd1`4LewQ{WmR!g;7jR0oE z7)u%5v`4%-S4gi??kqh#X99jnG6P|vCgnJLVzxh+QE5JXiI6OdTE6mw#@4sl)MFfS8YL#&)c zVoG&2={|%*l7J?*1T^(y&H)TkD%cms8=nD)N)21h!rshp7*kyCGBWX9j|xv?E3PfDevlL3U}suR%@Jg z^`mfoC)t_l)jVx85Qka9-ef2F#>VG0T+BT0%a2~nWAeEkruKd-FAnv|>aEWm&c67~ zA6^!Egm|)!^XA2V`1r-R_Elc)ul*};Ztt$Z?WQ77O2hg6c<0Bz-~RBU-~I7-cl6+2|6qUfjc?pL|JGMNfA8Me`47MMlgA(Y!PkHJ-Y*onxURqb zEx)*UoQKB0aCUDPBHCC@8+~$p^U>4mr*oEzdQ~oNu6IBA=_ip67uPp0EMfAOH0ae)NM=)pL=xxztJn<4pA7CfphGb*24t{q!Igw3&J9fyr>OJPlZk zhJB$>{jlsFt$dVRwN;0c5DUyy6^>rw7!s#QjdeNS(pNq&pkZoNKs=kMLS?*>2IJlCFy9=`PtV7bHThijQ&^7@ za8$VQ8F=R?f>QTPl7R7-fBsTmc+El@xqI_wuFL|0nUlwHOi-;$JsgU*qFPNW$R!32 z#)6QN0p?ofqFzP7g#EH>PpU|IclEAF_~B1J{Oxc2{>gafKmD73|Lp9}vJ`iG^2x{l z>fip$fBZlG^Dlkv7ryYNFPDneTriGlwOMUr81`+tuFo%S4y)Dp;KAFwT`5a5!)wO`8K&s`+Z)m*TV@c>~8is z^6BaN?!yOnK6%KSbs=|BE&|IvT@jX(IU2kW=~-hcd`{PHjU>b>)O zIb}25FIUf>Kl$kWkDfhye&_7&fA;tPi+}yEe)IqO5C1R!?wh~=H~!Y&x_AGcSpx!d zf{}q74eXHW%<8o0)QYQVcZsNrDRJ|_)Z2HNX|vf3tMSFv^JywjiY9?`Dc9fm&cFN3 zfBDaX%YXHs{~!LrfAsfGH>+>|t>6E@|3Ck4|N1-s>i2(V{l%|+HRO>cz4P|l_a44+ z@1Ys|@@jhg_~WaqAG%*0=0ga~au$b8%$YF~4NhcOuh(ZM+f!n`*kZFkxp_{|)ydg$J*%@PO@@I35x0)CGplVe3t%SU zFy^#PdBrhvj2tP)Fvcj!1<_%(V%k@Py}`C?qzn>z=bg`e^_RZ>~)!beCfVty#M22w< zFU^z@9k_b_-6uc!H@;k_)$l*DzEBL@`QMkqUN0Lm5IZ|*pGm{{c84PX#Ufry!9xdPG49|%;#JotIH5oID z8B*dhm*x=`LvFf6URX$qM6V(g+cK+FVTtf+&EVwTtO4wBN8g3?79}M_W;Qn>AtJ!& z$eXIJZCM~Dk^)I}BSI3RfkPXzx|X(>gOR{?oDUgHTWxAuUf+14Z;OL?PMk-H19M_! zO2yk`Z8C9{fJmGOUTyzaS1XZ6i0Q~&bRs7DOqF7G0#P8+<6^kya}9Cy@w9GFZMf8% z1+95iv`8#Yj#hz&5WzyVVX0adS3R!M4ilD{lG2jAc+kKMND!AK$RMw-s1MRVpw9|@R462cZcyT-NQ#6RfUq23fWdgz zJ?*=zy1L7otn``3?!DjlU2EyXKH1X)lH$E03yL87L`QZ;Ro2dvC->R=eV_F_&yO)@ zF32)aLSa-TL2En|l&SZ*F>a3Ynmbk7S-UE>x`Jw(g+NwRMNnj6Q4|JYP*GqZ);Y34 z0YOxi1z1FqaN?Abgaor7qsSA+05pen1AsCph&l^PJz5>mLdW$wS-(?uio$xQgd(7X z%57KDyf-VUruF~=D4@~;NkEdec-r|>=fj$W)|HRwoGmlo$$a6RG1UH37U6k=nL$J( zL~famh}3ptD63&sWhEp+BgCSN2wA^eIGL3hE_ zroS%>*Qa(rEeARZ%?RpgY_?Og+cVWdX)4U_jLm-2=`I{Mc7dT9$MJ3*bVRug_uUxK zUp(f!Fch)gmfC>xJy$O7uGjZ>XlJK+^5Sye`m5{Xn>Tl&ulJ?DUsu=f-`zf#E-Z}h z+}cl-8@|4KeVh-ca`~zQ&Fq!&0sAM{x(_Yd<)2K5vbu(m<6~826{m z_|41TF5UWb&mOnE?xi<|U;Flrx2_!|Ic~GXD7Dz7ec8X84*F$&WTC7=cxTq!j&3() zGn*UVH3XV?FDy@M7h@3_7IRZzGvQeX+V*EhW;7riK|-FHo@Sv*4uX?vv43La%o$i& zM5hk4*S9;(bhUpb%zR zBAm^FG+~*RZZ|tOrn8lPUYcxW<>bBFx4%8yJG$5H^opcTFi@O4x#S)ibo#`?0aQ9J zLrD$CN^t1HqZq_1dQxXL4Bs+ig4UCnIMwE)^LTSC`_OVAcQziTA;Q~ zv7&#Ko6N(Kn*Wx?g@50<@Gf5tM43g~k)(pLWSjxO){K@|ylRR8kviRyG7L#MNr;i7 zNEE3f8HuwPrZ&qx*m*|oJ%gurztj8kI$$=ClG)Q4x&-G6xXMeP+5m zn}DP`hFY{~!Yna%du5h8B}3MELo7{Q2Oze7&cRWF@nkYQ7;o&}`^GoF6NCQP=YR4a z{Oy0Vx_n|X3zqDqORwI&yZO$Ix7P1%`1}Ku!E90+DG-yUnAps!@xl0hj7_J%w!FGJ z8cuKByt%Wpx44j(ne>;+#fvAqohs3oHIbFq-uS^E{{G8f`P!9ngw6GPnJXW8^vOKS z76wZev+==nbK}0VlIJJ8olc&W9R0!WL6wSkT`KNAk1;*yp25E+PxZLIC}KSLHFq1-p>8?J=i-aGhgO; zf6-c>J8zlChC-0N-TigsW9KhEIvs~U{N3LvZ2##;p8M3tf9&YeswX1>vB_ft$;dbz zZ0z3I8*Y!s@r^6*96fUMCqDDJ#f7zn?n;OHJWZ)dgg8qFJG1-u_wT)R?XBCl@9iAy z)f28JLV}I3A_J&0p@R%mywer|4?t)T74ZQl_K=(}062zfHdX*Ax(nnehFSyxG0U-2 zU})lOQX3lOedCK|NXLU-N1hjR1+YHMxfBdNr*3(~j=dG6~lQFA;DsvJ}03aMw;-;FW6cFh@ z@;YIj7YC!gYj1viY3bAG zyn6bPr$2RM?W}k8!NF9-WDF8T)NXIwd-Df>a{bjW2?qrr*B|a5JofZYFRdK68CwCg zh^FNrgF#SMB>-dv0&w#RZD)j8BcmlmB(i|1#X(19Bftp+6crqj%g|aQ(pEQVW^oFp zPRXKE8^RnAm18lP`#y2C-+@ra#D** zfQ(XTnz77`No-Udszv5nCR<{?7z5ZRM8Y;EG53(S=6E~=y0>L~KmaI~R63okzbO5E z8CS>&qJR?QIg|)J2RVQR5P-na1c?oZQaclG0%|}NGb80(LKc>gx=LOx0nBJ3x1=V@>S=;^MyiY+|aJPVJ3&K#4*02C=DFUjfg0P54JMQNsF^R;aO^oA^ z_7hLoaO>%s`vA&7HNU?Y6h(VEom_P%k7ldOou!3tr&~Jj08tbKf!ksSL@47{nd1nl%f`~|)V9@z_D2J2Jd965+%;%hl z0HKL0Xn+uafytVM<=*PWlPjwWAUc`VRfv+90E{J01cZpxqQCSIwKk7ntAYwA;U=-j zY-Gaic?k=Ktx9- zcZM8Lk`(lT?Htq?6az#w@4ryQLlRuudx7)T3L*joqhuR~-8#ObOS|Ryfi#k)+U%J$ zLNN-I&@wu*J!hAkT`9^Flnuake7@>v0Zo*tZt<HVhx_mBHP;S?S#iSI!k7XSkTRQ|;{L@8wzKvG znC`9h=H7iDV1aBNMPp(^KKX@x9^T*(_eWa?d+&^3OP4D0Ni8HsPQzA22OjX=WLllf9_{*+#1bSHR0$$e#M=?RyVtxSiwCwNlvf%WsdAT} za_ij%tIm$66}de3Ugq*92!J5Uyzpc0t5H z!g~pz`o6gEzP|9lPxSfn8e)>9(l%tVN;Dv4Zk&TOsv=Jl*DQ#*E_LI zr%sm!CB)He8Y>qJ=G*%l)7i$#k)^T&O{{whoz>;ly@TzYo$+k4zOuy6Jhj$eS(-K5 zDvhz-7hd?zANlIKKltDN?9cqQcdowmfBhf-FW>s^HxFie0&KuPeBsfb z`TWm(Wb*7aG_w#p+B8PftQi~_Vv$^E#3mF zmRc5ws!8q`HL@K zy*!?beU>HB^^NT+gkG-$L;{Xu9cpeWOi3(emU@}%DrTZhV&yoCwS>tiO$+bs-tcZS zy}7cw*ek}(c+wyEx;Zl3-jli-Z4a}J>ii=|)=r$1MB})xLW0I-`Ra+&k881fWcBUK z&;Q=<{nnkEw?F@xpZxT5pY3-Rn=v+qYnWbLfAf#N^2fLD-M)4AYL#Z!uV4Nb|MH(b z{lv$A?k9fn#L)#oM6beexV8P_3(tS+)oTEZI8wEFXMy7kfJNeLybB6>w@=O?Y7CXC6lKrmr6h{gNI|h&X$cMn zlP0H{F_AI3ibRfy7*mKMVx1LbLukCS&RQbloXhgeXP%5FYtfMr1EKp&o-`~0xL-Kj|?yc)T@eBX( z=*e@UN`|{gTobe&|RAyPoxNfSdZDi;fTc;+fSU?pHn2|LRE0q9hh;nNkV&;t%&?W_=N!n>R zs(>gfbEvuM2m%>ZR6N^VyanHsRdUewjzKbI({U7=v@EInSO7f*B|tKmLUSGCV&K(KwF}>05G5+NGod` zT96MD890AxiXf;;BCM?zu9{if^?p!hdG3i?Xs(E$3WCf%x-3aVMFjv2lD^9iGeATL zAfipfk{Cpp6*HF&I$2pn)=6E1Xcb};lYkl`vKE;^6zH(J0Z|1-m5A^Vtig#jakD?2 zcJ?y_P%c91r?iqn71Au3J$0aviy$JRAQ(hYRbglZCajLt0z}ju)E!V(a70}Li|8zq za*V7GY#oi9G$v@64InBSR6$i$ObXckl1P<>6orsT&_?1J5cEz$=Ul>xk(#S+Ro%x} zIg)-UnJviZNw3c4nd3chFfX;qIO7a~DsU z2vX}p=lFE7zqjkJ+`8-RjG(Kg4`c}q8AQ{IQYqA(QgV+e_3m#qj8gWNP2R0!vc0}H z+_+m$wtK~epZfUPV!s$ouh+9;P%dCfRow_eR`_>rzVql~{YRhs81#?bxxRDtT59TJ z-c}(xL?IPcX-t8%czL+_`sS?&GKE0|ujEJp(nP|@K%lITCbQgRhBZv4Jn7ib%`zfu zjm@lYQVdP98AirY6|8lOy}_b&O{jM_*B{#7f!!t_s8FP_10^bclMfY@;O7= zAB_ohv3G>9)QC(6sN=%g%o3G=d#EiQZKXGyGodfyK zmISvPvOd7Hn(khj?7H=c$NghP(M7R!4WLpk%xw3{eST#t-Iryty(CE`5fK?hf)qGu zBFvq!2yNaB+jK4?G8$H90BK9Bln#3Y5&jB05&oOqzp5Ta74SW+2#0BiG-FAkMEEX; zQY0mTrZq&PbAGVchlD&$Xi$>WF%V#8vm!55QmSI8L$_Z>jn%kzJ?FZ4J3RgoEaSUm zruVgk_w|LpD*FN;IzmvH3D<~`h&eT=*z5YGLGNI9qpD|l$3%wMOk-0S+eIZ*W5^bH zr(q?P)(2?}8KkY9&DURjRqxUVrWU zi4z|tvN24D!+oPOqH-1vd>PP9Zr*z{)Mn5I6d25$Mt!dth;x9;42^zkS2vKwL@LLf5Ec?;GO5)pzGGDMAFBXd6z z0a#VTQG&z>(HeqI1`<%Q*C|$37N?`#)XcKN5kX!$0GKti-SJ-6^cxPdm^OD0cJ?NK z77Z$~ab`9R>vuO1g*lKhd1gr~;vA!M+H=??vE2633&$|wFssLth@K2p&E`^Pwp5sn zYu}ztec3sE{KyHe^kDt&`pp}8DJM^!9hB$x55|(zkPsi(@z(GB@o!wd_qxk^Ww*a}dJPd$9VCHZBm<7fk#WM1lA?-L6~~}yPG7_a zd`nw_Ce+iW9?z!xXiSD(1V9TZQZ<`o1v<+F6siC+E(ZgjIR&+nWh9Bg*vyb& zi9tdgNh7KTATs1L-*H(fXi`!DMVrVJnejfeXi$PkN}5CklEAED)utUM7G0$xvw82> zu?wBWQ^VcqXm>Q4PG?avC7+=yEGOOFy0gEtp+^5wyt2*Zi>kA(+gTVLY<>4ne`9ZJ z^w3kECubiRK<-b@ye(KZxFZ6nS zP_B?Y*t%X1lbaUn?!th`0>IL;C1Wj(Q6nT*iL7Mx>5d}0u1|>xZwWtCL z*(RE#iIGVt10P6)Bq^wJVrFhwZK9q5pJ`?Ztd#=GoD-YWU|q9u#$_hVnt+KsJA{nu z+KxSi1Y)7gQd6f|Vv~{~YefQ*XHI}hyO~zURRkFeung zxe*beK%+JZa1u=^2$PB0mMhilB(?qL)Dtv2`=dd#$uJ_A((jbUFGA zECQ)otKEW@bJHh4f`IMdT@4`^Xb}Y*0V0s10fZ!B3N(Ug2M5-I%S>i0DmhgOj9>`C zpb|k6QXmCUgw~tT7AI<(G-$8p+76{f=e!HWLx9<#XfN|jGXk_l9HJo1DK^~9IMx!i z?b&MQ_sSy5urP2J&vwq9Sy))=Wu1=Aaw1Yy0b+mz+7dC6hyXAELrbFL!%c$DT`+UM zt%527fEZB~l(z9AH>TrlZtYI94mtI8a|u93JwOe#(cqh*5v$ok;!7Z8Gm1f~%~Y5>(( zhlX0wOcj(A6;ug`z^IY{MZ}1hxn5!Wwk=_DmY7t;NF?+kft!iV#2OnLRa(e=*BCHH z$qG|n?TM(j_ojL<4vUMO();~`>{jd#%QecD42j|0EZkhAtIPftvD*m8_VBSfn}o1e zHIu^aYg090GO3eex43-DUzaj!H@Wg?l}V3X^tL({HuMyAa2+-4BOi$~x(5nF1=Oc|ES(&wFwu~&Aw z3q2r$Izj={sXqUMo4@(H-`d?T(JuN<0X%ZXB3cXeYL|@EBojxepSfOM5V|7ogj%Xe zBMlR(&jIr7zKz|&xw32X+@#S{OT|yE;nuI%^wxK|I*svzq%}h{OC{q9-Kpafli(JQ33Nu6?v8V>rppwjj%%m;Wp!cqm55)y@XdC+vUBmP}S_J)vJs0mQ z6YuK_{|j7w3Wl*zse-(Z>CIW^cdVJ7l*B^L;vc0!= zZ1w!dKmO^Xt7~t(dFjU0YlP|9=bnA?$;WJ-ZEWvfy?X1)rAsfp`MuaofBoZR;MLLDI*!Kik zp67W{I*gOO?TuN#w3Xt?lPBNmE?<7(L684 z<4Kk;5}E0&YO1NEnRA5QyvWFqR{}#Bsu2MoG}arp zo$`3MINB-wvDH-_4(}!z4yRS6*7l4+V`7wm=vdv>!ER>YZ+zirKlRB+zxJg+|NY(XzC3yI;M;^NP=<1PURb9*eL7w}p^xhgLm??S?!$HX~w`F5A z_Nm@r5sWcK4gl7HwMe8XhTV<3Z@u=t>u-I3d~mzdah*=j7{ko%5Dvz>yhb=LT; z+xP3qmNACNw9j8feaGizk0>XLQ5h9eG{9gHfCLp3#Yc-kh!M~uC{jE8L{^n{r=y63 z(kTgcNfZ&oQMFdb5P68gC_ZGZW@F5CJ8nR`XXH!?tTrC)$;qG+859obC1ZCHnGRwM|%N-CYAyBJfnU?CJsx+VT z8xTn3R2{6 z-wUCFf{18h=9EOh7_exN+ES1f(jf+&BcEAL5>nJ8N#b;GtkxQ59bo1hFcY`r1^^&K zR$8tDKmt`@GbhX|p<=t|Zn3SxGOOcc=DK;7agMA(Q~(xifCGR9 zZ`Bccg(w^|m|DB<#39#p!i3I3j%io8aJ}#@&)8Ht3`C1WLILand_H}7V2s|bTk=spkJ7^hmYl^ zx^^!~YD_VZWLdKai`&icJ8$3m;A?L@{^aM6oIE|ao{TyGn`a$`*<>~ySNq!sClW4< zs^*Q$+nYNXYnQ>Lpv(g7 zT*`4kzC_oxK5t1j3dVSYW>#0TWY8KzCM9J?6b54O4$uO_bVm2?R~tLYXDjGRL?DC4 zC5LfoV9p%P7IWv4Se`oMTr2OPGeBi8!9bH@RUt*ArZBy;OZNE6O2-yuOnDkVd(2+m z&u-k@-L8FdN5~Br(jR>YnHia>)_zP3Q+3v$yxnSPLpT1_JOjll>(eF5B5r zYmb)2Qqj%HU|Yr0mK7l?GKc|C5oB!5Rc*B&Dm>_n>HClW(3X5IE+_})q?&+$S{{+G z0#IA^L+yQ05CNDWG26npMVGjqO)3;5KvLo+VI+%|lq4_^IyF=Q%mBIsAU~oQ0MHyQ zjX$axy#IJ#UwBYwz7lYVvF#Dz#NL3RCWakGT3R^%)MJm`zT4S8xK)iOF?PLEVl_@! zqESQu=Ult;K@$JpF9lG++O-Z=GK|_t6i1ylDantS+yfJbLoY zyD#0mv9rCQouXIGrcEWH6&WauC*awv;>bH2+q0n_KYFf{cdW?{_9r)QUOgBMk>H_= zXTS69H-Gatzw*}2gHJvA`Hy|*^C8uo008dZyZO?~-#OT?nVm(l)-NqA3Vjt zyMAxu-qRm^yw_h$!V2_(hd+2~?E*l6#X|1b}Kb9S*m*cD6!*et)^Y&{;j+ zD{=<_D8iv8u&OA`8e`IIv<`tTEPzVgOD z{a62|S6=(Zpj*Cu?X4fY`I2#R{NxEs_F!-1{rJSOQ^$`S+26W<>&E5b#@3C=J|GMR zOUF)}0^pQtLPqON*7a^xhZ}X6hPYoqIj!oQ-L2i>z0u@gP%JH+FPiam9P zCypL{?VXojzw*XYAN_EDVKo7V$w*^Uhsk()XQ5ZD9v`e7fAsp5xAL-!#syVDlTxVa zS<_T32@N7aZ=rws>=~|?Z{4`JQID7tGbGj~HM3?si&M3T*7g?q%SVqCWmgo15!x|R z0zx2C00t5SFq!DPqy#-QEI+WquBf_K&Cn1>Z?iHh`iRp|Pe40>2xMH|wZ zVnCb+t@FGzWXF@?`n4B#H?H4UJ-M)Yy0dhuzp!eZC!NJ+wzoGt*t6=haUtZKj;m(A)h-o6)Q z+Fx2azI@U-E5gDWK@6ZZ2p*IKm;k^s2tq@eP@S=qD<)G%F{I9-&(RQpAw~sZ1SBxd zQ09XsAaK;vq5#z*i4g{2napOB$vA~TXiGyZOQD*k*{lh*v4np@+H z*JK$eNgI#{P!F9b4)8EVC}N&H*7SB-MZrMUzNUO$@9W0a9xOXd~9| znLy!TVCkO5Rkv8BhU&i{&;IWlWXRvb98mJZ!XY5~Mh zo>>t|DTa_ZL~b~+Kw?;#4LTifErF5>0a&s$mtjy48KC8CAfQ7y%*Bu)A^=OILBeQ; z%Emz1%}|I1n*^gKA64Z+Qz-}9VL)-h{DcHnc!4KiCK;I3>AaJ}@-VV5y$zy(%o z{0z#yajg8H*E?|f#-f>==ytQk zr8hSBU5snlzHxg+9u@{lgw~tkly2|rq}josf4Zt_3GDpRY_xFo?)u&+S5wrgLzyMt zb0q4@R$D8;4jZP8ljP znMm*Y`qm3qwoX3L8LZ|u-wDw=mm3qSx^gxn+Zm7I{mn_4XCZY=>4{wgB>+GQA?Aj? zRy`e;S>rqY?74*_M_1Q3hu6|@%9Ybl;Ar5icio^SYVt<<)^x~r&~(Uo06`5T;3e;7 zbyEq4Uhey4NeXq7wzs!-*Kb1#(CdJMZ+-8z7hkz!{Sj9Tvb@Z^RP``(cxr9%@X5tR zLo43&u*fkP5J;3|rO8VGqoLAJSt%ikN#%0ZJ<>_b&S&UASvf3r=%Wv>?$Ge7*Kcju zqii}HD>bl-ORvmQQQ5qwJxK4&;-#U#mx>B=qe?nP-s#x=6Ir!v>!a2!`?5sBlvET* zh%5r2a@$zTZ51sUaHL5@Q~?cP%cYoWst??|fd9!q`LA1HXk{N%&?u>4iPFZ~KoM9h zB9dWd;ndz$5y-SXW9{!p0X$F+Iul4pXo10~K>}}_aw!RnH@%{-LF(OUo|jihwj}nyIIv-#@mrSZwW8F^rWR z*L7^BWl3d`rNkjbW6_GKW-~~Y0ym+#ar4^Vc>9TqPn}sid;9jSFMaioe)5w)`LPdu z+#rRdnf2$-URb_-?Dn;-ORwE|`l*LwlQj)mZ)UUE*7lu)(bnzT>l^n*yL)v?=JeXx z<11@7Z{4_b`O@Za=jzS%`|CR=PMyAT>794(tv|N*)GziN@<%T`{n<}{?#SxV{-7&@d&41vF0U*eIex@AJE0TedH70_~zHY`-AVCx^QMzPXUZ|wh2uWs+>#; z;r9LYn^*6y-`m*T-`X4QhX|d{LVvNhwzfPRjlb}#zt$~^(qR*t*`(gx++M$XZ*O;J zHk-^QV*ogN{#>Ul@7=w9`OQ~%HrIRI{>d{Jmlju_eEhLH*WdZ$FMlz!v=9DFmlNZj4 zp3llqPeYi&JYp?W_N^&^C^Tal#|)3ETaXw?z!2uSRZ$MH9T|}K$_WH)*>kxwwnS&h z8E1TEo%3Y9Wim}rfWR!N;gnL0iB;7o68b=4#xoP5iV%4(-eaD5A~Hm|_hr}bA2@E( zq)zW#dimO0uf!0D%zN+U?I-Vk6cJT*-Y+h$csH3&#~XKE+qnCd$rsAbfUH3dF*LL3 zETxen&5OL~_r1#yP=xVE7Ygq^IH%C<56(RFl+XK3J*}&8sOqMfrPzdK*3^~r-IXK9 zkDPg&x<_0xKJUcoR@)OPBFIHlA806J^M+vJTgtVSgPAyLK>I5t%^$xLV27Yhr6{!(6+4gnDt zIK>y$f*GK=i7YirL}gV@kQ+L4B75?o?%I*QcNtpeyhURKF^UF+ zpqfOJKvEQu2pU28Fuig3Z0E6v`AlCAU-?#`6*htdAPP~GViYlCTJ8)mFc1J5RZ?M= zwwqEVab$@}STw`TS%ZiQiYkVTwdlPDpPD+RMpBd*C(uNi)n=*JElZbKV+e`V03$?r zH}s7H2m&f1L`p_f1q_l{i_Q=V#7QGfG|nm#DCQY<3RtZD;8kga>9<1RUuFh>O~+jgYW|kNc^z1@{nUsEpqOMSs7GBRb@>89)J)8Ne!WK-~mOE zEofiIM{sx1`%a<8z%-Wj! zTUDnF0+uYgn1p1uY-h`6SeX5l75kwN9A7%I`lcD-1SbTOgISSb$C5`uYXv<(%uzak zJ){E303;Sc4IpR%m{6h<$v}+)fpONRFs+9>Ii8wK%-6s1%B8pO`~0+k@jf#q7MaZp zfBYz%J3Z)WwwiT1!iIxIirLT_KuwrJbmRDTSGu8qa z)u=2WK&T8NK-!v*h?D?OQ2|jw;7}DtWQ4!E&c*-6%Nd(05P(MICWKm&7~;HeP2CJf>lzRChWEW6 zA3a)3r%r_tX4cX|FRLT%>@*>8Vo_;0POEx$Z~gwwo7X$G|J>6b%YEnj&wuZYcV2t) zktfHKafW#kC325k_`vBCr{BJD?akNTdgS6mk}~1!?(OyKH?H2geRX4F{r<*G7*_hH ze3req{#sqVG>)^gN6vok!_QTd$*tSBZohMRadGvhpZ(}B{_NlW%qM=@8`P*vgVp}d z%E7K|Y}{z#bp6)GxpOB@pIfOzv%9^ywX=U@?fBx-VEM>OJ)0=lBsi;5Viks7x$w!4 zd@eQPuYLc|Z{E6j1!W1Lfg5*j ze*e2axbo)JVVW%ZrDG@72HpO65--1c;|DK(?|a{SVS8)*u}^*`PDZc4`r4gackkcb zynB0nG~5KR$Ci#6OP61Jy=gW9dQUy{#G}tVbg;ko>T53_TU|STZkeD>VK zlX`l0bA4}f3u9Gg+|0JV`;AL)y!`4*-~WCy*hbSh|8{8V zi%&g~EiVoyFs{`b!-=7p6&g`F48v4AD%e!DKnsSS?;%)(l|jW2bUNA6Qg^UW&M;Vq zgpt}wu>!LuX;+5^)EUb1yw~e4<#}nW0T7XzSyB>202PDtnl)wBB+7Fh{e!o(X)WLw z02)xu%7M?jO+5~wYEAyh2SBnmV}aRp7J0kqgD*P5bqqk(7iHEMQdUZ0bH@ml!8-3d zy}ZaQfuNEz85y!_GcpEJ5RQQ*O2nkx2unf`04F9fv&33JV{LWlO^cU+l-xv%A&;}w7TN2t&+K+P~fVthMmz_>t79liEU8j0)8g^9`6&1lc zGw61+yl5r%HWSezA>MUH=z9(;l6+nqJM-l6i=Q&SuQ~&XDYB+UwVqAKo7^?MqJsIYaXsm9x`u+M(vr@S%DK?Ko&N9T-dwJKIg4Rg(qAX+sZ9a3gY z6hr|;B!kWxYpsAVON^nZnotunh$c|Y9C?q<5|L5RJV$3u?wzn0YXG2e1eT~KL*5$a zi%b+^;!xLBJq$6hDv>odGn@&qa@+Zj#!yT#gh@(0XHB=viw@;E8Zy>*QqtjQG@cAy zN(!PHjB_}jo#KOdV;FCUt<3q7^Qry2*#MY#&=Agv-k_jjlvTkPFr2KNu}b1NOGQvu z2sjXG*SSKikH1wYNRgCTLDdp?0t3(_nASR~r5A)e7(|0)jS*;RA0mc0sQ^S#Rm>1O z-ZW&zgD5r$0|NsXLO_QpA|WEl+;Ac9HgDm(kyZU6Tn$@8g#rK>P#{Q5ZOP7|Br)G) z!Xa`(6-7iNL!%mngEXu)K$~>P0FN)Zr!I6ZoalA(9ML*wjWa^Psu3XwM3E$r0C`?F zt|Br=W}+OTH0Ob8m3d(}D~ghcuqp!xs0B@oHL@x&izOi>KoHV4l&yd&!fla(f(V4f zDR3R7R4hyHU7Irk1VJ*E)Ou&Ug&9jq9F$mQs#8^;#B_4woi&CXfB{l5s^*aQ(RNX` zzzRS_OGd3Fa0ZPiL{5PliGeW))QMGHVNBQ9%(#Ywh#<0nApj9ZPyuLEYtcZO19k!X zfTEhIn80WdRpi0lHQGqeyRMeG;)L&(wzpwuog1@rapf zV{DcZ+_=4Ye|rdK$$C>a3S`h&L5duW3J3thw63pTy_2RzK0r_*tC^!Pt6kh*al0qn zPF7TBFFyRSPknG{Ww|=on%?0uT^Y_tF&7l&A(IaZEOvjx%f}%sp$z;sHY1Z%g6UUd29f`{;gVW1rSMp_B2d%2{ zcs82B((+Q?ErG;N7t?IwS$HzG#$}l=^G+d=o1nlX-lni%!;?qd^|j)AR}NIH^BJHM z>QoSKOv86JlMQfZoQ-q=Y)7aOnL3`VX6d-sB}zv#zwC>ib4n=8Q5Xc;T$B+shz_kM zWtE_;(nj3c3)ElrR{y_YabZ5nP>~cF6Sle!a{@`$7zAvZz#KB~^CBlSMoBzTmFa?xk*dt|ZfEheN zc380R-l)W14syI7pLt(j_|I1u+Lej~q$tYMX+@yUIs`wfcAIK_G+76#*G`>l>V?tB zstH6R6=T$=IICujh;W*TRP}8C@|&;UxqbJshd%h(PkeTNXa9TO`}QR5?C$Q|U*9;t zcF`E;C_j7lq1Bb+FJFD(?!CKJQ^$z6Zf<}5>)*Ki)+OuQ!eHUznR5@Fe)^dwKT$Wc zKmYo_d*}M~k39CVU;c$(efEiG_P4fQf9>TE>x<_fe)_SG9$7w~5=?iioXk&u=I5S# z;wj^D0l0kSg-e&d`4?aR<0HqHR#s13zkYjTXJ@dmd~EF)S%r){gXK!%o%OqQ48o8C zA3t*X7k~cmee~JSzH#~WAH4M9JGZayPIqtJxO3&wn^{3bbmi^KWw-Z%M<2Uz;UQWn9H^XAo;U-{NsS6}@f|Ih#Q<>y}= zEOh_ktAD<|z1uIAm-%mqXq=2Mz4G#(ed){7z1>r5 zk3Rm9Pd)eebH`Utgcye7gPXUn{@|4tuHCr$N5ApUr8)SufA~MFo;dgNcV7D9zxadg z`|D>`A9?QS&p!9mhl>s=q{(P}`}W<}ue`N*WchK}>7|E1^zqOC)EDyp zB4gQvVXSLuCb@~Z(NU`71eF~Jh89>bPZ|>fq5`rKptG1~Cd()|0ZOV7BpPKSfJy)s zzyo>!2jGnlm9UP(2+9*9MPKz9j4*CF98Dxr#_55)x&Wx|uUR%Wbc8&Kd+o zW6&Bzuoh4uvc!-=iZQYPCRJhuMrJimqB@(bXbezCMYGTafIN4(#fD?)e5Win?%jR! z#Xs4)^+r)-*4cI|&WF44_LKJGyIb^k>5^!`XIbGh>~chq*1v~91_=!SGV^>`+8#&b zy~k+}Dp+0Zn@-Rp0^{`GSgo>^T!f@qjiieij9+g|&aK^4IOF#?M+Coon4SP>Xdlp7XG z(W?p}V~Qy>DFkGOn37_H>N4w%Glq;JqSsyzGVhpM{GVEjh)RUfX3jdFIWU-5Lsh#8 zO(x^%Yz9#Y3BVIEC7=kv@MYrQNkbyikZ4)*uzszy_j&z#T6 z_y_l{AZw_NMc}()z&zY3)Lsk-q1CeHD;H{a=1Pi5NQ9&zWQGtRXULq8Rdk@F2^k2G zkO2$(cE+*IGRHY{WDYD5LKUlNU3lXVy(n5kBH)Nvtg4$^DnQzL&(?ilz+{FD zSx`%20TDqO;gFhH+MlISFd<B z{VwcltO8lgjIm^l7^K3ZRMPBpb6)Wsjnji@Hfq?NF)sO)r6Vi}r5o^I>tJ|qvVCD8 zTP#LC-aqChvu+rw?JV{ePaI3u8H0iR+DhlxsIw0V&}m&r<1)8E&>!=t2Do$o{{4G1 z#>}8|j=b%X_6#|Rbz$+u@nh#MoH=&-NY-B-#AVaXcenS{m@2x_bUK^PG#18|mbyX> z00Lx1Sq_Keo!y=3Y}C|XZ6B?P%wRDqy>%3;Syii106-O1P?6Zw(^&6kIO^lxBJLeq zJN|(WJ+pA?%+ckQUO5Pp$|YIut|r?VPSYNA)pQmxE!(ERDw8RsY8C{vC_4qJ5UYww zLI5r^S{4A3Fa?-pRR+y`p<$>6nMk@L>1;#@!_8Yv1_hrMIqKIQ!VAKmM7=9)0rM z>4#3NUKn&&zW>5^Uw`e=2Y&k5U-+e8d-URy81eYx+4H9#9*#GOOzt`wfCE?643nI{ zaCUI4V|*bB2cx^MydLkZ-#HlW=f%R_{(j)-$~+_{P-C;+!U7@PSigGb-i>p|&l6%j zOCczFA=Rf!9pWfQtymRmNr7N$$^!oR&-g$dG-7I}^_T=d&o_zAyiPaRVt8ZWa z!3!_n*;s%2!iWFf-}y(+KKq=aymjTu`uhEa#p6H!bARoZfBvuk`Ja91-~P#OefJyR zLBq`TXFu}Ek3934b88GM@R{`$AS{OGBNpZ(BBf903|_F``t*c@Fvo;h>% z`dilZ&!2sA?f4nzGvjo7cRM#ZO9d%he(jZSe)HSYz1@#~_{VnoS9 z?CtFyJ$mFbAOH1V`T1Y^-9P-|@Bi8F{@!o>Mz6o{+{ZrqN5A{KyITjJ`_Rw++OPbB zix-}}yMF81&C8%^d1d9Pr$6|GU-?y^6?LfY-MM}9?w!r;Ej83%Ty7eM5Mw>7C%a7? zf&f4#_bZW#(4^2L07hV(gN+e^=5RM|owhBzPyw)wlM{*|BqRVrr8!=VQ=2aqL;+AD z07O+}MFoS9BE&?JP}P9i!^rc4r&Iy}K%>Th0S-DFW<@_QdJ4)ZN(f*G6w1CQBo>Mx zjP|xW3*P5lKnP8fH09mCSV%D#1!KG~d{G)h0EVnLjtGFjh^oY>Q8n>8(lUj`t5x=>yv32LwojY$ZnC0V-96R~&!qQSvWJT$%Tgr3W z=`W&j(uBFY9zd9jqL|HQmtX!Cn(ui_Ww$iWGXF?5=9BaA#$9u$Q7yQ<4j49@Omv z0g0$>Bn2`ppa4l*eE|s%#RUKWCTe@AQGw<(10-MpQ358d88|`Wip;yLgD^FaNCU$x!i)j5 zE%0tnb(&Ker9B;5yZd1e!`$a5q9Tg#8XOeoB$gkp#`L}QkS%LoggJ&3>KFots4;15 zg;U0Xr!yzA^JjX4egR;Kh^zri3ay|3Z5;$FFlbUppb=CAR9aJnCIw_|^9*w{nW}=e zoSg*1Exiauu{Ct4FbIGWB8s9KLSqOGsiF|@VKYN}JQYv@R;{YQNn(_4FY}o*NXCE# z^3F(URUD|$L_tI(g_!EVnM;O1#R3b8F$zvJf|4rDn=SxQk%Rz^BV&P7ONK28YlZ-#7S$MGF)Ao6j|No1s#rl%5Cj4BAbl`3U_uBA#43m1^MTGONfZ%D z=bi>6Py$gPm`l2<42VdI$}Lw!0fb0N6oieRn#Fx+92YSx%B!OvTQ2T3)j?I+5KWRKf&zrj+9D(vj%O<}>En2TCb4vVpShkX z3rLQpv&unS9%Kt$I2ccpcG}7lAQ#w<0!`SArlb9>eYOQ<{j%EwL5P{ebpQUwz=eya z2gg?Wy{CA21uiw7DKc0xoilnTfppkjHu+X{q$oZJUjqBG(2d2!I zK|mPQ7(n&TIET^}YghmPW+4N0UB&6XWvGmuVt1(0%}(E+tzP}J8!Nq?H{P7B?=NJM zS=RwqPN~|93!y41ouR8;W(p6PgQ|)VfsIvRa?bjkQVl5@lR1-n>j?$Xx~vDiKIAsY zaA$jKG@caYk(3%+W{m#c`rgr%epR2mc58C$*5>3uMq39q!7S+d{`8ewV{dsl+KWL| zi~(8dm_^!`XOaQpV|6rfPdkusuQ6Jk&@ zRCw!DM-KK%I#|i7C8`%FEjiO8v~U<0MHLhTcjpSN%%R#^2RAD$7#h91{6s_@@gQ}T{)hx@5Z(VKdoFg`9 z(PV~ePC=b_lG0>*RF7x*YMC!}0f873tDq7Zhn7T@6_kKg0;3?hcM%is6@lJAFW%P| z{!7Y>q>2hw5y>!`0NX$$zu9cs;GSI=^a%p!s4b8mk2kr5Iy!;Aa%X=yn~g=uMvf^q zgc@Sn+}PN|}R0Z!a$&`I~>^SO4bE|MDPTw3>O_wU#p5dE(J$p8d#k{ceA6Z@(~|L8rTa zu=zWG@SAU5dE*N|{da%-6F-k&4AREd{eSV>|Mcd@+qv&XO}l#=M0D)>$rz&K%m*>Ut?$MU0pu@3qSkIf9r4lt$+0Q{)zMcH~#Q9zVfGE zx^m_1n{U7Q8Xc(OM-xLfUSN&`h_&H0n+a*hB11`V>0K66p`#4W{L<(q?~{?NemK_BBHgFqNpkufQY~evKT=$NeHGGhYt|II)9gKBaxSXlf^;=6XqSH6})tw5vAxA$(HIC}A;XCL{{@#8Dq?w~0AczNYsUewcxzQ?jBBHsCK zw-jdQy&xKzx~!|iYe5aH(qLH8w-O$QFQdsm!V0DqT63Ns(Cq?)fO<% zEO=A}4w70SDJb&0F?Ik2jhYgusx_p74Tn%85(?Ci=9NpTnm`-Tlr%$jRg<+=6bA^1 z#yJCRcQ+7P16f{l6k`Kb6|1@li9yjIdgp3ufkY^X)Sxv>0B~e;B6J{0f+7go>1@2W zwORH$-kE;CFuC<$dR^D=_lw?O5{4nFf`XnN~1hD`9jjS-;&>~ocYI#YCbI^kDZrzW*5s}4K#&Q5cn4E%AXPorD>O|cT4TY85Y)BaSRZYU z;@XK*51ky}JK&iqS!}8+jl8+Hg^PQic;m4_*Xw^*W&ESf@#2;zd*>;<96!1eHD8$U;+Zs_ZA$(o45v3R8yw z4L6R+IGags8>7OaCMHbIScAe&n*zjx!DDO7zA%y|0F02Ts!|k%{_fCy?OWGx-?_)! z=U5^;6OqZJa&T+RhB3tjMMQASyuLN-3as`wj&=?@X9fkDdUB9)KtyY8GR{Q3I2b;C zB1|Ur9!#xWNDL^7q8SkovNj|KJ+phfoE*2+GKD2ez070?n3AAj)P$@k0th1SUc|Jm z2KkX~qbQQj`M`e#W17FTz|j8&tqm=DQW+#NDdx_j0VG%{Z1>*;(wY9AAo4 zp6*Rpxx3KMGM_XO&AW2i)-mUN=3LT18Kopms`AW*adoi2&&2ss0VP13i{eQlVdlso zC@KShuqG8$a_tb!{v|W;`})HB`oe#?4HTk9Bt&9ShD2UvrjrRa zbN}Y{-qvz&RS^l?nYHt0&YpSeJFi~7_V%+Md1kQGyLWTv+u#1qk-@2-`pnOg&Fcv( z$79RK9{<2&ufF!;^RNBjBhP)}$3FHG*77^IE`9l{e{_BC+9yB!xhM^Y2`LOG2bbS| zePeR3{kfL<#fLuh_$NQ{@hs0bH@8)FX=x$1hB-xL5m-BQ@)Mu>=%4)IpZ@Wezqs04 z`o*9A+l$?!VHy#X>sU?2cx$t=Eb_(P@smf-T|D#f_h0+QAAI?@UcdJIbiBK;P;RWR zKXvxQ|M2hpZ+`q!e_aH=`~27b^ecaQ_1>jHr+59<`oH_KJoos=KKrrH{f(dbrS+ZL zm+wA58V|qnXMes@p8CMW4_k24G0djTv7;yIH2Ct@|7>e>>t}xauRZhBbD;A4i!Z(O z;txLX@Y6s0Q(pj8A>|lj(*WpfGr>+xw%C=y1NLb8s#Sk^lwKD45hJSO9|pG)GLfqd5j()Wi~!)J6_DXa<2= z^DK#IVr`g%0D}cI^G5IotiLN#bcMy#P6k9IL52j%4a|nV=v$Y~oo^}Clc9(d-38~f z(1g@f(I_GKeBf-+)V1hd->-IhT|#e=41l%PS~NzCAw#GP2{fe?LShyqw8qRCc*?Dh z5rGBK8IuCnv5xa`gwxb?2iB;$^v3Id^l$(9=H|_Ae_(wkDZcln-WInZlCk!|-q#UD zbbsU8X79z-V;61FJ$UPT2X|k|s9s!I5YX5(qn)?Mqs{$|tKoy6efqhNdGAG%g3^1Y z-|f>TgPl%S-wky9=s?!~Gjdx z!X(a}C{ zJmK1_kqQc^(z_Lk(pm>#9@aTDLCp915``nD5L4ioB(bE#AZi62(a~kPc(HT*WG~Az z1TqBZ3|OOt0>U67B!@WO1i&hyZL{pWh$gWLvvM1aX#Ewe3IZf5Z3dg#x1*@2z?==K z0E!Hz&37PLImC*#YXFfJkqRI*=PIgz3QMdxiX_#pLSAOZpi%1p&`=AVZH&>x03e#8 zP!K?2!vtc<8mAhCjR>()i+%t|DxL@cP3u`}-zx-Yfe6XkPHq;vJgZ}!fW<9hh8D*r zYGk8q+p0uBgX$3+wp~3$26EJtG%zXw3s5@rFFc@&-w!Jufj})FVjGm1iw!CY*v^w# zl|V#=g`TEdO-W|U1y({1O z-t~jo!qpowaKG0da7vcYkc6~vU3Ki(>cxlF*49qF^x~E=jUiW3xc0RhH+Qmp0n{2}8tAbxTbctmY2sm;<-V`n&%Afer4&RbFxt-x=lqGp zOCg%AL@`uO54<m?Z{6LTR(pUV5{&an z8ZuaR7Vd9t-CN%hfub`Yw598TF_A;y7@ApbZI=1OA!wuE8}Q2J_U_ir9Xx+Tmt5Bw zh;WUiNm5o8j7F-(l8+R!3~3o*sjxk7y?_A% zq=Yheb?V&IGe7IvE|^25x5e79g8ax7;r~DTd_63I`mg)J!k|bj$k{j#Slb|_X5=Ebf0?a z$@_P1fA{(C|JLvQ^Dvuz=A%D(>evON6jESO!?}ro5)7j8`tXHEj-6OuTps-EFPc~1 z{{HqhquS4Y^7Ehi*iU56-oCr>&98rBbL-A>zq@*5kvHSsaP#WhSDv`=!R3{eXFmAs z!{2-I`u(?l|4YB0+m+rIj-Ot8xDJ6q$=fe~^-q864}QC@o6&gq*0tB_x_aT2@4oT& zo1eY^(@#GB(PPI>F^8CD#z|hdgZty@JE4;={`JrQ(np^BXb%4Bt+&4W-EU2*>B`!% zg~4Fdj5l`fynXfZa)0^Mk#nDT=CfC>UA?_?sWVu4_OXwYX0e*ZCm;IAXFvE$H*Q^8 z-@n5E<5-Q?U;8(|RWYVhXHRrXf9Ll0Y_CaGn9UAQXGM2eba^;F==IhXS0DDhqtjZQ z?-p4J=m-oU&3*L949qBissutBASG1>l9nLRLesFlue9(v01!}CNQee4nR#t4k)kGH z78YViLadhAh?3%bA@`uJgNT?JuVfV>iio6`f*Plk0XJHWRJy+CTJJ$2hAPa)Lbe2|)h@`)dAEOX7iW*mywaMEC=5Ecf|z&5Ekq6wR4ZJo%{eK1Xd+vkf_Ot zRg2iFM+zv2s$>8SC<8~3Br1}O5ReM6a!4svDTc_T6fFS(Faras5Q-v;Z9+^c88}OZ zoN?ZW(ZiAm$}&r&vE%&I64~*%2_Z2jYm76_QBKsLiY4z|ZVf54hH*s6n4`uto9ypy z-X%-Y=wiir>FOq-YL@3&-nDgO$Q*iA9)!FAfYc)Y5P?t?Y2Ihpb}=9-At1qgKn{rW z=!78vAXFqHilj(N#Fzw87=s|GNo*X~PS~mn0I8xd3K6O?0wf{ftcE6nK&wz-Pz@q= zN=d{REHlH_2zX;1JClsHmH^R_DJ%tJgiK&C35X1WDhM;A$YhwvU~5sJc_dX1n;7P= zs7kxxZ+D9CW-8h?L=Zt?Rbf$PQD#cfFw>zw87<@<3dXW)&Ymq!pXznH1+`8l0JKJl zRDl&laqfYb?_1xcSg5EZR+d9NYx_S?X)On>fU6*Ih$2(@VafxPRU-KQE4pyhzj6yZwwjd&=}M9T@p$i5kWMG*rbdKPFgA> z8wAJfgkwu#2N4Ak6a*n^uXH#EbO0i#0kZ1Y^fDQgFsTJ9@nQ@)vcAE9sz$*fSOkaY z2rOs|bu$E%gH^y807C*5(Gc|k?xqd_o^yD}Ayh|!1rS9OCqW=;(-T6V7SYZxQwU%T zd1HFw+E>L#@O6v=(e?|0OrZ;=R6<4JBt#m4L@*>as6NYf$J71VGdU3u7H@23(VEIq zl@;3Y-uuX)5!9>GXi^if2qJY-184zV5{gMtfdEo$B+i)Yrk+g42O2AllT@?ok!H?P zhhVAbJnTyI;@iy&m)`dNhM0vqb%!IodwaaO6_aK3%Vn<{WTp^_SRn$`xli6TodVCE zJYKjFY9wQmMkKHKfm?GfBoIjYz+CT_ltr)Vq~G1BA^tm zljY?605Asyr>Ut;)3CRhU`EzzxlmQfYPebLW#jrp2TO+qq7?{&6v=_@dMbUES!9e2 zrQQ9lom;n{nt<5bw=d^@wzTS|<1yO;05e5|rm9DXby4I=_AFLNm69Qy4t&#J=`3`M zX0|)6DwAc-bejo}?r)99x3|W{nEQ|qJmv|TG^^DZ25qJ@3bc}EPhL2=mD2jPJ#-x+ z1SW}~4p5W?N|Tk84P3e8)4*d!N~}bN$OBW4lcq ztEvHzlZ602YA9vcoP3dWiO zFm%honYHsL`X|Su-P^bBF0C#<{lUjyefgEm?OW^jZ#{bENlQft_3hi&zVp35U*CLZ zx$NAy{o4Qgcdx0)xE>kA!sQVp5k!*6F)6q8xF?RE`shbL{qV&#OS9dbjg5`_S=K$e z+8=cNbP@^4I-kH)br|&fpZV-3QTeqWT>9c4{mbjOu6+3EPo7&lzqGX28>}Gt6dDq; zD4|I)P~OQu_pu+3vDyBo_wOIvcktW3okjY?x2B3KO>=RF1{9r#{fW*67o3Fg~(lqVH?RYTS ztE=6yDeiCFt!7h4*~OEOK78hp+dFRf&1t#LT-v&6)aLS=o1M2N&G#A=Ghx~#M=iy_9QmQZ7! zG+W6GXlSa@IP*4JEHiHq6U|NLBqA)JkgP>(2~|-^M8E(bfN_W!LlTV~>wpQ2b1rL| z&@`1%G(OK~ar5qt^&4+y&Soyh!*ObgK~%G%JaXd9+S!LzmQU5w@y+Y6ZQj3=V))O0 z{Zuu@NJPfkA6-L`v3@q%yY6gh*l`p-HGllL#Ri zAVCoX0-CqHgR*E$frSZxl{J{45)z97SX6A4FIG&Vff>+(b*70xD1Z+}+6`Mu&44cy}-7?ZoE&X@Q^E}PNi1cv!VIIig)+{zzMHEojmjqBiA@_`o zeUI?n-4<27_nvd+LCqr*8_AyO?7>XIBqSu| zoqLW+9)~HUlL8b$vD@~Gpk)TF2#C3GN+CmqlzDMr$5z9slf$J^Kd|@ch&Z7FvLZ?+ zUd&aDdF%o@xdGG+#7sfNOggthhwIQIu@<|8MknxgPk+AceGHQj#cY;MGeA;uV1!6! zY~AxWQx&le#9;GC#(eVMsx^%$Hb~evC<@Pxob$$PW~7$TGzti)nsks)HI$4>fXHgj z%p(}8nSp>&_g%?=I`=O>rundfLzkg)G%9UUnI(~&yU=h=E*l_N0P_G2fe{IS4cU|# zxrZK*RH23zuu+?3`}h}B#$ap&a|r6(k|81{QP2T905mlO^^6sJ?rc9oq|S0*l@(2~ zU=AIxqu@TMM=JpeF;x(;))5HCY-~L1KNdx4pl+x4Z3|_)vif zmDnT=_P4@2H|}h0-vy`v1^^2HOFg$y4NnmlK!uSeIWSesIjRwdUP*L=Y_>dv^)*^ua+5=yPQ{n# z0n?bbijtx?uQSUni}QpbV9rXKG=WPMvSJQ0W=+oOoEX`I0vHpJAtG3w#Zb^{=c@T{Qr070)8|c(K*|g5CtSD z6AecF)^RT|50l}f~ zxs;@BXWLtkhSNnufB+P^ZD#^G1P_U2mNTGtj7*r-)KEdevI?mb5Rm9Y+~a@b2m1Bx z*ZRW$f?YyKb3#HU3Sb^g&_PyhB(asDx9;4*WV#=UWyZ>I!ro$=RkYt9EDZaDs@mGz ze)sKn>uK{Ful(MV7e8SJ=gyt{um9110hY_6FsM??$Cpk!_9-d?ONJ9`r#|ug%is9n zSFT>U_R^rYw!XTsxR?(i#|#QhY@4>;-rc7gWz zNah{q4D%8$fbn!MX?^PKnT@rjo42k_>NlMCMXzKBy6i6V^L?^P+aS?u)LvwJ&} zhxZ@;#Si}7w}1GJS6}?pQ%^p5_Uy&Am9wM4#!`R9`w|3GlK^PAvhd1tpL+HA&wlHN zvzK3d?b5lYFslNQ*@+X!pT?I%00BukuZ&I}TR)~|DW%b9Vg1B96J*t9I!Up0#E|u1 zfA7Zi59;Z7b+Ei~=2V;G{{CKty*6Tm~#*csW=61caaq5}jpbB1NGj5w{QT0a4r&mwp$-(6Q!@XJF zj5$5pd=PUsBrvB&3Z&G9X$`=P1)cifeAkPB0FE+Q2I!h5ARlc?kcqrw@4aV_J{WsL z08%0Y6v|lufryxi*ocrAfw1#ne_WO}#2JM^KCn9)1Q2LuQUe4oh$zLHW`4fuLFyVM zOof?{*m-X%xvnAaX)pAuo=Ve<$8E3jp(s2dG0ruTZiFD6qVEgmoa-1r$c9Xc1gh4? zb|S4u?*btqkwr~5YievJjb#Ys5C~&zM1!dsm=ER3((18O=TBaEzCT=XQY+fUrO_LgX7 zbY_q>BVfN8ltne0&CGI9^_&axzeHU4P)D%Gd(58_KUB3StMgC1JX|<`co=813A;pE zF!hx{x&i^moS_jj6J`ct%VG)wIYBZ7jc8yhkVQ-k95S*~0@DnV6eWY^+-S7MBcQXA zT`+?fMFhNqvhtqsNbewIaEMrvDQhG!ZvY~alBAp!lEeal3^5Ru&S4jpw*=8z(WnY- zy|?$kFvYm&ePswaCTUx*;F0u~Oi}(~;Q|UT$rUR0kMMTV4fk6l&qa|ceRu##DD!}FlEeW(OwuuA?m=O?z1Yu;4z-rtk zi(--~5+z5@u`v^~85#mJ6S4_*utq^p1Ti2nM5B4e73Q$UBSk?vr-A~S;e7KyuQ0Lh z!+8(WyydYIMZKYC>J`oa`v!*w=;U}o8|(eWgl++9i=kO2%HRXBV#oWpB*zVQgBh)ZiW-|u$hSZsZfaKRcHl}2mhsZ#y1 z#v|;*HcEpInt^jJyCEsCATc0dmy*D_SKYczAOe}GroGhM4PG1vNZyG#FefFuLa~=p zC3J#m5g;)8YPf36@n&*&Yg%)aT4h780LWbSD$g_+jrJaey>Xm1grx(?z)q>msxd}o z2dz;_E`SlH6!*uiQb?_u2zhQ9$iZ+_c@{7Mvu4ulrGu=Pb;|BAwKrzt_W&LQHgcsZ z2QJ8lioH-S5BkGd+elI{Mr(>N_HL^z>ZK(!sD=u)<8c+s(~8*JD$9Lr778W*J#C;zBJP zb4H>JWh&PmO*faJKH&gZiI~9!hm{1d7Ayj=Dxym8Tui zR|qnjOEy_q=3cK4*sQEn>+381svHy{xKOyZa{GZ{WyzKPMBTP2Wv>ObKAn34bujRU zWl1^DM5NVOZ84%ZCSMMsF7E8{Pp;g*{jl(UC=wJ9k&V5fBXk-2J59McNf$;+j@S&% zm>5)}w9@t9D1#^gAcBG^iUKHVH!_hf8wF@{2dScU6oy}ECjkCJbHMyw{pq`YDqeYX ze!-tT?0@>9e`yn={o>uVedO;W5A9sM)uZR|GfzcL)s%t2NTaG45K=!3LXnHqOzM>6 zaCbt6MOpN#UgO%-$!->K#@qvAu_OM^y z{(nzjKrlm9Fe3vn*G&QpD4VE7CGyrXu>WNbZM<_SA)s^Q+SqLGZY>U1ymNI!s|#xv&OG_e?|*e~YfB{> zR4FN8i4ep9AZN_2QKufF0uFRv`^kN5t^|M4GB@;Hz>Q~(I#Korv!zEuWZtXlu?ReVORT&(xCR4*U%8i?M{^HADzIXrLpf@;i?sQu>`#U>7 zc<-C9zxTC%F}!r)rRSdh%*9jBomo4#wzO9Gph=ra9Q78SdFrJ%-h1oV@|mUnqBTuS zQW5{r@BE#E<~JY+pfS0^^;U)_4i5Il?OwzwJ62ND>;n;^#)MHgXVeG~Il#H|=gvNP z37mHXcdotvov(e9zz7x9P#i*qP#`z}@BxpVTnqg&3gkvs1}FaEAO4q7#};x%Lv+Kz z(#qo6_QB51_^{R)RRjRj=J4$+Z(ch4++uH4W0VfkZEgs|;bL`ibn>Zl&wt{DSHJq* zzx>m${pr@$qlXV~)Z>edWOg{S#<2_iAxv9#l*W^-%?IOyE$UQtBmie9h)nDNodEy} zp?CrYL&<0vP_t#|s7kMOiJZ9$!0tW;WSiB&w2Ln!L`?ySO4(jrPpSY zgPn(W6_setH&6pas;VAl-IdW734@~IUOf7?`Wf5v!cBEbm zjWd!X2D7Nq019>t2+Cxk@&;MV+En%G6zdjqj#L9NuxCV%XaL!)OsE!H00XQwHd_Xmj$E-uMu2R7|o1b-&=G;L#<`D+NIr7s$ z)Jy;s36P1%BO~|FMrc&Ya^(htvV)ac$FTsM7gN~ddWyN|*u6GtbAp1Ysdbt{_pDS5 z#O4*6oxGve9lTw5!XA4RRY43vo+t8BM`AU zK%o#|6jB?qMu5~YaUlZDXSMU3Cop!_V9bocQ{^dmOQ5Z4Hb@`ueux!wMnu;6yQ*e{ zWQ+nu=8{U+Rl_(WMk9+!>zs3kgG69$wS7BHzO+>B^`VfON(lYXHzKUUq4sv$4WrMJ zE&~R@zQ}^W@jV@0K4|IyhP{eotu-QW;f17j6npE3Tgwj)r_c2hvyd+p3(|?FsX&ot z?1D3Fu{To~9Y$?5BtbG%#wjL`t#j={pGLi^bXs~GhE-*qN=$O-+?|!-^`*hy%2F5( z$|w>lY}@6lH)bX+;Xnm*bZCpE-#xK>zrw4-6?x*~%Ek#?7-|`myh1RK205i1*|mn# zfN@A=B{ii9Pi=JL@{2on&R4|)h_?=Qn^N+kUwrE1`gy;&q>F)PyVI}#`S-T2Z!ZlLtcn+ed>n|ZV*~2#>UC7&2ares?VfZ&n2QZDtQWh=gqQl6w}y11sr@Z#L4W? zI08%#w;xUS?*UAlPSFy=;o^W_c&0qRu{;>27B?OHg=(o+j0(~+c<)N*%0V^KERx#3 z_cER3nd=oNDqI@1Qa)d5RfYZApt{Wr+_)DhygG-Q9w28x@WpVS~5rm5kb)M zuiD1YKGK;8A4R1;{@}5+i;p+L_EAzLcIK@)6=)tb!=rkjkJK>gFW(i@&j<~MkDuFz ze(w&&LvwwB&E}`Gqsb8n2of@5suPIwjtQ`y#PMW8goCBtXmKHpwH-&PV?7&l%f+Zy z^?K4YX?Dn-SlF3^1nP`Rgaxp%PUArsEczm31hH_t!+xP4^J~4~ z*ZzegDZQi25`fp)3ECZ~W@^hU^Kuiu|e$3VQaywvOUdc|PSD~d8rr_7^QNd%!PP?*y>(2E%w?1elyG-bPQ834ZZ~f>efBL8Y_TK$_ZHkj|ZK}^b_uT4h zpSXJEy<4|$Zf$Sxzxmzwu6{5G%TFAC`gcG7#m~O_Id=W=WWoinuWb}z5JI2H#d;#i z+Pb-R_3G`-+r=m_BLX=J8sE&SLc%57eRw%ZGC&tfB#bedsblK4*&?FMYa3_RPo1gC zpep>`??+Q+EWA_THcmmiTqFQnuV1p~SSM6&rs?Xt*C%<)Dn()>pF~w5_%ew$Y5Kv9 zHvr&ZcJQzM-9JCMe)hLM{kv!!Ta5^swGb=-38;YT{K-py>-Vai@&3R6=D&UGt-o46 zv2gOt+12%RLnFt-#l=Stwr^eeAl8$Ojn&+)UVdke4?;6UcCK(7(6DPoAT(5Sa~VK2 zM=(HU6_qT(GZO%2X6UvE4#9gOHbNyJFfk!Q7hI@9S^B_p;@kg5H$p0iqe=r*00Cy} zW>P?{u?G$&sh#ns3kKQ>FancFGDI_TZOXZc zXljl{6-3bt2+QDmmFEC4YBSB)Ktn|6(98uF0+mJZ-T`2YnzMN&B9Lr3DR^_pV33jm z5CQ@^Uy&hZ)qeD`4AZhGY~Z{H0PxIE~4QJZ!G zX;uKTtL$UDsy|*@VaKlPc1MqwR5rIMSeIa$?@F=DMIh1A$2CJdDe*l5j2Si%x%VIHYXgKsF`%ig3O%_s_?i95)42AyD#Xp096$u1qR~| z&xuG3KDY{iR7&s2G0fQ_hH5|`Hd25ZaJPrNq9|x$rUqunfF3NX&7}zKPPj(;4MGPoYm$-|3)4AhuF0+TrXl&$e@YPz~1=L`_>ssf`85ELjz@ z#|Cn1YTi2~oKD9n_XJlb5vRfpw@DlA`b~`5HfJA8UrdFg1abW~LpJMjjLgQA3DQD8 zEcT0B&orm1TCCam0trTkQywf9Pn|k?|6XkmFA5cDW>ZbsqJY)?!Vh{LAR1(1kEXjjo3ZV0oLF63BMdHtvgCf{ z1_cA-48f<2V9pq+z{-(QP%hRMiUDWZ6P_FZBMXg23%4H}-g~e$aVOs0Y2Sa4_ZyFc z$~)9Nfp$OGei=NtVg{uMD_7u_?j3A?!1dsGC#}J!XSY5!O#O=Q1NG;2Eok#F$cM`WL!=K^3;0-y_(*k({Zfy@f5=B+ANFiK zKCq7%nvX3ET?7ztE>Z&kK*}k#z*K|~s-QJWG*c|gAX0Ac?2aen;c(RR{jw@)SXdOB zre@MYXo4g5&P>>VfpRiqq0&)F#i(cwqMA65Pyr-xi$!mxFWNeyPDw3`B9p}?W2CC6 zOr)MpL9{GNRcOW&a~6uSha-KjZH?F<&?)x9KDZTp2YfnD)#P?r+ zrq)& zj@f|KL_ifqAtQlv1(9O{vsBNf_wS9beQ-0iz*u_M_pT?|GO9r^Z~&k}w{PD6i~8$} z<@#rT^K%Qs#nqMdrk>ny>bg!TK~eT5htv1od-u+*JHPe$-+twjul~z_{m-u5ynOoP z#%Esrdo6X?>*SLaeMFm+dJa&;?4^W>o|9Y|av^c@(r-HTw`2)&?tQs$PKp zVnjCT_LA9hB8g1eZLY;MseojVs8RQJcK`aFpIqI3x23xCHf7BK=GiNnh?3XdU|}{n zeEaqf|Ih!!|LNWLe)8HUzHsvNdDriOXG2QSET%d&(NaH@ufF)oyH|g5<@N{HE`PAG zamq0WB^AybX247isDm}mwJQJ= zK{by6W`sF7^Q4|NAQStJHE#lvjRib~G8CRY8KHKiY8|=kaiI8PQQU}}pjSpD$Ce>e z;%;lAh8$z`);eDixubRi^o0~vswXx(*i~tZYCt}?5C{pih18l*)v{NU{$)U$@s z(|;Q0NxNOq5lF9Vqa#FO{tpK@ky%7;-@c#WdgYe(_wVmb?x$wb)O!#QfZSmD}?a4HZ+d zd0=2J0+_%&I?=@nx<(uoRZ&zWQ0jheq>h+}o|%b6#2}lH3M+vsh#(mtq8g}J_lPDS zotB3Rk39>T4UVvmHpf8B4HY_HLSxslsWyMUcvQM+-P5P;I5$86R?7$(ER#6^R&Ze6 z)FCKfS51L{Xb5Ixs;Xp0+C2$sY9ll`Vo5qeMq(uKY>bwz>&#%sH2>y$6g(k7JxZ1k z9EC4B!A8x{h&oCE7@#q!V+#QWJ!qq7D>2VKI->L6Iql@v&PGCNjOGQs0}pe31q4<9 zH`)qyC8gbwV4!9hEE_P9fTo;?JOr@L0G}gji_oYg$4;?S31HrX8w9`DFN#ozFBRRP z=b1H@#;A>AVO*PQqorE4mh5Fr7=n``aOHwxRvex<{=#Nm@9w>QuStsq_Vlo?GtaEK zpK~;{Fc>_n-FM!&|D!wgtbM^%1(+9UQD*_B!$OWN^!tG&Hl#CoDCCk~IA{lxRohPNtq&r7-Ij8P4G1oPJ zku+2bpbS3WyGG=H-ox}6!jj^9q zSby;w`Rm)?WdFiE@`*qQMCh0TBMBG)gEE>U$0)M9z1_xow9rS>lv`u$4F`+E^|#*q z@mp_wP!yxzcr>(@TG^_O4$`Ukh(+1$Oiwsg{Y z7h~J&4=+9S%#W^p@4@~1qu~+)Du{uorp|9W@7Do9g6ZVo?YG|A+ntX0W^A6pL{vo0 zI$~PIQ~|*K+gqCt_H+8dqkCHb@R`qj=J>Job~fIA@Nj>+?VXuKP0HvDaA~;qw}1EV zK-T~3KmNbG|IX!er_cZP@BH4mvkR9lwihql-+c6FXYbzI@BQ_a%kO{pufB2a%rlo3 zo;sLL9&SHs<7|8H;m+RH^640V#4X9-aT{X%-Y&9Ny#j?G2XuaXguBr;HvCP zwl<3a5L2?$ z*N>kbt*o3ldFJ%mnUhP$2fmjrrdUU9SC^MpmX|Nztj9b1BVOy+4J|^h6$CvO49v!$rYSRE8GN_wWkz;{5D7CANX(jq zNeP%Tff^ZcSD@Oh+B!!qd|1EqvCX28$q6DNv4H?0K#)W*XQ*YPh@tdV=O#EB?4x7` zKuJw%37Nc^tNIAQAY|E6qp8f6EvEz|+J%O@pN7;_B!d|;X8}l3D3C+;P!t{kFz1|2 z8H&mkp<<0lGeww1shc{@lDVoJvctvtV0JLsw6+bnV0|Z;Av;JYQpY@Qo2g0$;7hNy}CK5o1K*E*vuS9Lb6-M;r6{3UMf~r zPMAv8&a!U`jagJ9utaEGWhx*H%o7rTdE!tZI0`v9?+y=Unlm#x0%GQXXy%w)@912ot54!Fe~|lEIBpJ z*fhm7VDt_Ykpavxm+oV{d=PakgKn!vhDW+I+7X!V$j4xvD-Iv0Tp5sYZfXC}CIs9q z+5k+1luwAMP=T-uYcY{` zP&E+}Mkx*28wG01>w7R^)>0%B(=m=`m`d~@7YQK~7JDjI-FhyFLzd4+_j ziW&hBfhx*eV=x6&MeGJ{S(6A!c19iE(8Q1#=OvS3NL@eXJVXthg+Y&u24XraW9Y!0rd<;$ny82ZASjuDssJ4UBj>aV>$K#@mYB}q(B)DTKom_8)S;TQ zehH~(xiu9q0%Fh%owbYRf))^%c(7pNRM?bF2?)^H0MS4$zsIOYcP++8t;=Rz+`ZF& z)Kparlpxy?&Qg^G1X0OUljK?;f@Cwy>NECSs62W@GZl91d?=9uVnkJGB{%5$?1a21 zNt@CvHif0ajrx!YTCz+;z!et9hAS^9@`H4*KhbJoL~+bHJHKQVWu*2H-rKPsUTfZe z(D)@ksJtPIC5?Mtw-MvjR*UaW_N!|R<17$k1g~{fLu>KB&L`pB{c@es2)MH<|x>T z?H@J|w`R%bYE^@PwW08CG+0?XwzRZfR#j7P9$eeY*l7It+bOSGvp#vNT4KHGZ-5M0auHLl==}M8mouozWirj`p!4LPPn2FlX6kO zVAL;42FMPaa~cRutxZv530%8kMS%goDOpSO;WrW>OalRzsE;t-2tEkWjLR<7M_C&kwOpm1jk@`juw6B zoKVf7DvB{Mfpq8?$qKparh(3ErGh4a0wBMVeS{wd8SEDxaEgy92L^!D$;R{eT1V*x zR0M^iCZkRgKMFQ*TP0jvnHf`F_`o>Y^Lsf=;fxQ9*#WEY1f=m@k z^o8ScAdP8MDhND40kuudXYMmN08wBhLCBWcBuTvw+$)k~Q!A@76do8LH!($U*ahe` zD@G**bTkjpBOr88Vc^HpCVXrtc`Vo*UDSULTJh_U#NTjz!5$wsh{QbC7aW-=#HgTg zFzA(`0>tgzotWxDKZv!VfY}tTPvY0U{;l`kyK(y1rKg{Id3$^B#;xn4a`>rNKK*;Y z^SSYCx1Np9ox5=6N)K@OwOf~(ssj?*hqqx_|fn?a6HX!S$S6u0NQ$T`MtM4`|NKntSzM^%d5-JKL6bJu6}nvZ7weLo`3%0!l-}!#1(La3q@zW>I96xh<{oD&rJpau3 zr*bclb0gl&mTS z29BKPLXiv%2?ZqQm{g+VB;s5kU{NK&`Giiy7(F3~njoMMWYcUC%{)NpxX7JY`tc!% z5y|-iL5$QZsBvQO0AdD~2~;t(=4LULo*C!zcutffAp)_PipD5NIXUkN1Tq2yv!-c7 z?HzdxStBB{VIP@Aw!QHL z>I2L!H_n%3Ip{$f8d7q?DHsV@t97;{KW7s(FkM8jGG-y-mYMKNDOn?}`%n|{6Dt*y; zx?D)a*`fdV7JbZ!Okmi} zpykM>@G}@K`&nw1{xtN;5P|GSn&^;`U=A#ki2^wiPnsPRl9MA*Co<}#V%Qsws%A3n zRS^|qf+#9zS*;a}irG3d0Cs77AnfQ5hFxC-K5oE(Zf$KCO`|~q6tEuLpI)f&&ESA+|Zkr`z>tq0D1d4)$mI+b8vLUI4u2xb71Upv%9NGA7 zK4yH}U_XbxcgV&$7C|3pvW^NgtrI!sJ(OagY6`%evS4ap0zjQ-5xQCbym&&;#JXZd zbYQ9L2Sp?>QtOI*3_G*N96%uoF-mKy4npvi_l&;VS_6Uc9A2;3MPM>nr_RvaIN2#7 zrkV{5z;g#(z%C~u&=sg**U|yNh=HM3VVfwcVgyw)0#OhElllA*9bkzPu-iWJ?!S zeBV*UR61tIF|~_j_1eo%f9LzJ-{09{FtLmXt@Pf%wt4AXcmFYzV8e=bR)_Yb=kQP5Mj&R~ooBgQ!#VN}|xYd^ifUtPFrEZDZ4MlV`{i zNsTZ7ftqG>YN#p27+p>#0=dy_Eo1;g0VHIRHpS>1Arqzq$y8XJPbOIq69nOuAkHSx zUw;_Oue|f$=u?(1z1wmA@X##sJF{r5kh^YYRuVz)G{lZwphgTvsLqtNJ zb5xHaPy`6T+AYfFhy=uWtp@%_1&yD&<7ZwN)SuEBI&s0~I8ALd*3E49V7fonCilv! zS5-b#oL!VQO_Q{_>=)9A8H9x*Px9WKEzRObmA8`7EiNxsi#chGZ6kG?OjE!?uUB#< zDXE!d6)?%B9=&7sogNEdz)Z)FAM5q1l@rH-0i0PT0Fabp6ef1;bKAC)Cb-HKzMUnJ zObVqdkjPXKz@lZ85L`2!<~H|61L}qOHJ;dzenvI;**DDamqjOjeft}yFC2+|UGsZK za3UnfWR6hL%rvHy+Jp#$L2r3wWqWsXI-7}Vuj1+S{#U>9t*`y%>wopb%O>S#KK;9= zHZI-1eW#u^U^w0z-@keP%lil>#uHp`h$}zr|Oi^^K;KX_v)=zzW#%M|Gn>gef!akwY8NS*KR+0xOeHo3!nbv zZ`^)x!6BQ0lAWze*Ni#J?b}8xh z?&0-ow-}2!OZOjaHEn_}V+vABGmA43)l5w*_wL>w46ZP_<9y0{kLJKIn@Nmd8iFc= z2#OGbCnyLL&e!c9XFnymVSg#5X@bTHs#r8sCN(hyrx_uon5OK4W5?LpDu@V)RI(Z5 zCYpBJ1A`J=sGwWls^z*J6ZM^VbY{*vdofd?j0%d7AfpJ9GbfAyNJe4+qDY=f4-T<& ze~>RBv-9L*KGf*h7(Emg9T--`VkHF$>WqSOJ%XmLcMe6w9vj>cJID0W^2(`m&-&i_ zqs?)Ogh)m2_;6uma0hriWp7vzC3W9jQue>l|k&!U)8n!~q&KDw11hW(?>; z-{DcJ|6{X(BY+VZ5hx-8LAO<%I|6LJit83!W(KHpZ>r7b)!JG4J2LDX%YaA03jiaa zu8GD#jntW$6AdcXr4-6xFDwsb)?jYX=a{grnLL<5&ZtU&K-7V$P{AY#pco@KP~t9J zWoQ5-h++^;qgph`M}-lhkW5VgyKX@>m3d4@qyrz$yCX#BhJtLG#gc&l5RxP8D46p! zfOanv3eJmgIt-(Vs8CnoNCc4Q-|2{TI;ThC{AD%xus0LuFv+fea=t+@)lRVP%npwy zOr~noEg!AJKAM^l9z~Yt?KPCZx)M-_$e;p%W^CZ0D|awZKmjr!Lj}lP)v#I9NL{A3 zh|ZHEMj~YtA`k@?KtnZ5imHh7Ktu*5nD=d}p@1?W6A~aI&0X7SsB@rYx5j0HB0zs& zS&gQcqN#!J04W{ck->T-C1wInV62Gf2?-$q+Q&IW%WAnB^mQgX>YO7;poq{#;f=bL zmIh)4nC3VY5>V{oX<*6G3!7R zdTGoWkUd9RW$|bj4hs&2ueKVQsbCSZwWt)eR!l_*h3}!dc9!nmzCV<*Sn8#SQWvEw zFJ3ryXXpMj?mJf|?^+q$ytDoG`}Z!M@vEb%89+2~=mH@TDsoH~5Y(WqrJiV>VcSk` zU4HnL-P1P@hG$Y*Eu=j>Tp9BId$WA4x&Pqd&W-!i-9l?|A$VtX)|mQxi7y|<16Ni) z1c*szYGccL&L%ytB|3+}JC9suBaxIOivgf-5;!y;tn@sd)wgav+`M~O(clmM;E!+I zcmKD4@*Rk+cV%ju$#^=Q6m6?1af}4YmOCu6AcAB8MKnxp(z=xlh9RMwO47_wW6=WS zz=Lu-mS1`E!I$2Vy7vl)1?PZLMA@xyf4Q9XV73x^D}%5ys=TxB-FP%^V=V)6>Toc& z(YpuxP~y^Pu;yp2Wiu5s0Z0l>)>c4(vSBt#HaBV|fUKB71yHp+ut4=!Z@O&1WPAG9 zvS8RrpoH^$*kdPu_i6Nz<)O@H@jv?@KV|L5pZ)#_M;ESN@GOq{kh(`pQ13O9-NSY~ z&UI6eAN7~3!GOv>2vBmEU2G<^>1@~^85uINa~f3ua?Z{D-JC7-27~1VKk~ltLl|kD zYt7~u9AXLH2T6j2j2P<}r;+;=S1wL-n#M5j*5(UmFStP=IqO72Re*pR7;*?~fa8Nn z8c(aDbQNcnHl`fg;JpiMVw%;+R1yMOFQi$#ck?!faPG+`{V+J9{L?RveMEr4pSkizj0-$xAwPx_mBVNkN;8S7D~5sYU9k!JJD_^;F>+*m1-~Tt~&Oh=0{Ad5- zU;pbrd$_ZIeC2$>l|?bkCb>DB23LOe)4#R3w{`peoh)|o^oA#IG3TtPQ2BCkxNz?g zUAuh!?z49ah7_C8$S<$-clQo%-@CE3dw+3sENbizM_>5N?@pWc#PQY7z4nEzt=ot= z9v{5>_D@2{Pd)qO#>V3KaP8Wa+xz=d%S*jL$E#H|*?jb9Z~O51r(gN6{}2D&;_}kh zzWt>)-gy7=2e*3t(idD$>&edEiRJUZ^ZDO9eP-jv?aSZ${?~5Yey=RCZuY_Ha zo_Oi`SBQPDH~hmt_Le+6zqGirwsc}|x_9IH?fds1?d%@@{@+>| z484d2&j=dZ43Gf9IaEc}pq2p=SO!%1C`#+&IQ*Db7FNc!AGZft8zXf9g+`Oyl0!qM z4MG6d697}gZfDErLLm`VG6pkkV{KjjmwgrTj527bqFRV`oMb8bj+rbbMF#JP&~XB> zoJ~77d1CZAQyVjw1~2Aw~+5z(jMT0%E6MAd#ww za40VgsCZEEW# zX3fZiN=jL?WTD*AIw1jg$&y5p0?#Of9Gqh(!*5Yp>T3 zyKL69%`7Wu0!wHT5Wr!SfMEa#O*;h<%gK2qbPAox;p6M4MC+ubZtH}`M+-W|$J^;H z)!S{F2)fuN6X0B2=+aH};i?1Sak_%$^v5|s98C;uPW^KobpZPsMwP`JV?NN-)Dofv z1~5ef*SR?7!k(pUVoId~k`VyTlMx0cfXN^mWV3A6*%q{u+yzZEcdZR-stT$iAky74 zZ?H7&_Qr5zVL(F)-7g!08KD^}bWFs~-C~G9jNRj8QOCx_WFTreOA-?Wn!~yg0Mr;Xu;YR?mPJfvv#<0U0D42?YWwor=DhIY;fFf+7H@8}o}V0iRUssbPgT{eUb zNDahDjkB>Cfl=o+Rs(>nowQ+~CauIKwv{g=cxH5D!boBQCOR+8RKcu_oty|=g{Nsp zL@-6OEXv%0Pp$K8bd0p_Go`a-fMe?g&=M&@E06>Xz+nd`GZ(-ONIbT!=2nz3AXFX^ zK~(i)6W$C!yQ~c$b}(2Vhsc0pWU7XM2u&6xL~x>@S;sl;gC$F*(&knz`eJE0JQJ{m zblB!PBPMb{&^A+oz7@x@SWQrArZy?$G2x-32BiTJ9|8cVj1Ld4PHvUGwTnx1+9M;h zfQ3-m`h^2`?4TXXflt&M40^)3Ra6=nmXadCUJU2ADgWR*DwIn_nEqln!#A6~LtyGT0|S_3Zn1_usj)&BZZDfY38uc0rBl&<^(c7aSb!PbVV&owp}ndi(VRS#s+8 zV%e`Jn^=rkw;`uucYFx#4h*S>n)fJ^(>=|P5O#*8^w~J)f?egyx``~rl|%H10_;=F zNugEnhL&`5>)_7a{o~6gQ*vz*gI4m4n!rBArkPH#Zm4a2<4Xn~V^US3uJq9}hX|0Q zHj4lbFqjyn+|Cl#=KVtUqZt(6c>lp){$%gL_yqKigDT0y;)4PoEceF?RUTGcmd<-} zm`@LRbCvfV9=6%Y1?GzU`l0aKkLu&vKDAVME+Nk(wuqL&TE*5V1822tkPVVi0?1$q zEeQ!|1{1&xAo$BW8h<5X5j;)i(U9inJ0K*7%rqwh>4*I^Kjl&Q zMNa-BQ^eza^W*=Y7y3T_y!xSe5g}n=AJK#;K(C@Nz!aUj<{kVFae)EBeAkgVDG{HbTS(* z401D@HRH6inQq2~_2n~9U&NAFKpIP+DN9P3(G^^Jbmq+!m9zm3h{>cgnTZ*InACAF zSODbrfAU_M=1VU<>z4xkT+X2bE`2E5d{l?|bu!}D`T`!&uk}MY>ch(=fXwGEpiR?E zXUPXxUS3UEX0yrd+gm^W@%3A`HlIHK{Ga^MfBD)gzjJQmso2VLfB6qS_r>Mm!uNml zo!fWsegDTlNIZS-gLn7$4xc&q;`2|v_QaWI9AR5ea@*v#EiioIxlaM`+wZ=8aB%q4 zxu?&bI3p=()Hs_h3`U=O^$Upc>W!cL1S3_+P{7MVH=_B)8cYD zolSQ3A55oX;^Neai~r#7{x|2(J@f7Fed~?)-q@Oq5x{Zr@>9R{$A9bZzWm}R$CJIk z`tf(Z^WCq+e0b{2iS4cSuP=Ykdl!22-*nx+<)z**M95sUtC>1-ZUw-=4f!?%=53k{K($;&aH>nA6(e)bQ(@cSn>HZo|NV^UdLJN?RwznP-lynDIP`s=TMxp44DU;GCrPhK>& zjn#Ai#ozsJUwi5I?%ugAnl?_IID2MeXJ_Zn{`^nhedi4XFllaGe{b^X&%ONoCrUrK z_{0m}`O(*}-uWQK)?@F~>GKyZT+EgqJ-Yd$H@|ax@7mhZB3Cd?vq{^ye$VxLSQMex z-+b`!^7~htu|50bYtKLV!WTaE`Gw(16PuK>s#U&t>im<_-}t?){f9U2+_?Mb?&{L9 zFMj@Szx?zkUVi=)h;%UCpG{|3^2+ksZ-3#7s~@aB*tvh_!JQk|Z|)r&R)Zz>l`(-u za51NpGz*Az%DW~oK{PU$BY8eHfq|W0Tv>-*j1t={3eiZTv089IuEPWo7|<~Qh44m2wla#@rUu59Wwn=jwls;4i0;&-)dXH+5 zlBmSkHkPUIWK3p0=hm!Ap$M4?Km$1+oKww}ISvB|jp(+dOYH^Rm1vMix&AHbfo_qS$V^4gt*5P!o zj=2?40!4y(Q(@Lws+-tM>tbc;+_~on0Pf$qoO2>%BAnM!Ac_cor1nx(yF2HNEg%aE z$Cp;ln^E0N3>7+%Bs$BQQP2<)7vjRg6j6)V6gixz5sN z$pl=G_mq0_>pdq4jKs^vSIEPFi<7w`~Z&C`Q&npo^vX)6=DTsCqe+8z<1kbL_;7) zPp&=tFMVuC5CVNwt=>4FJhXdqx}D2i%xuSNz- z2xLewucA0g`q~`%XCE%VvRcvU5N0M~IcpX|p0`)bg*+oLRAV!qH&8xayUjxtM*v4n z+M(OJJ02&DkNhL^&Nn0LYB9P~sU1lLAZXpoPS#~SOw_vfva_Zf!Pz_Hmv)wHM5$eF z%G@s$0wB>`3sez!92WsI12I5z3Z|A#^ZW&w6DyWQ5viY7K%F1@$U)6YM%NKE_cEcDOhMLoxvBehomoB$1kdct>I& zq7E^O9i}`rOcGU+XFz4Of?b&<8jV~JGGJp6yftLuTh@V4I)^W^LO< z4ZU7}SSX_I=6w5Lui4+f)~np0ESQGLEdoTVmZo+*iYuxW*K@AjR-4qK(Q0#6FhJgP zxbMTmh2H+!Fs&?A3rj2J`bkI!8kfYmfoV^j`! z{aAVTk*|}O3KA5>@L(Li@!gwM7_A?FZgG+OqXA-Un@Je-5d}1v<}4Z`?Cs4SOb(l= zIOsDiwZaJpSl}$h!*&9kiBk!w5peR^*itF|C=8)*LOx7*1>$h*4xY0TSc&W`K>F`IJAE+OkT3mISNyU>( z3IdqPw*XO+stIB?Oa{>?0SKuYX2T370QpyT5BQ74g~uCLL;w&217Ost9&GN%X(U8P zBsnKdt_-0nTyUXZ_+j{E;-G-h&-r2P!)Tv$DP#@T{{XsMah43Yx5Dq!W5 zz!ZE*1OyGV+lO@64!NWT<1FosC&^}9z`#rqh`V{Qie)t|tD-7AC5y8*H)tTD;+TC1 zXeK$KDwhlZxy{@w&OGtN-oyR(|LRSb@rh4A&qIbInC?%%A@~d5t)C(T{rdJd)4u?7 z*i|>Q=oTre9jXWvP}NeFRxRb+?(FP1=av?iQ_63=`N8+T_vXPt`-i{(+28)H-}Bgi z_~?E!t!M3IWqIMZKmU1O;lKIPKmEave{gT>#`{+|MX}7WYWwoU3#(T4F=1DK2%%V55E6b-}~10zf~}vIeW6ILKF9Px2M}% zw_kYv#TTACuQBdy9~!o0#pB6jXZQZr!GjMj-@0=3+KG*07tcR)`sCTaQ~z;Yk7FB0 zgT;$yo*4~CSFT_F>No%VyFdKuZvF7|sS_tptuHN&-g)=R_ul^I-em9PXFm1xrDslV zoLU|&KK0~_=g&O5x4YBi@s-QhzVZ4ufAr=XGuzx)eBukg{ku;;{d672hlhu=No;b> zo?d+E73ID4_It*EdE>tFOH9nJ3Rbw|BTxH``EeE0GjcOP7nc<=Vj&F7ze`Kf20dbD%@aJ&x&Cr_R|zI@`1cYpG=Z~VKT zT=|g?w7AkY%H!#H+Kii2W9!=-qol*}q^{%o+Q#qv*6+Xe$=_V+Ej-%ZnvDPoJ*_3yz#;t!p=%7;pwgoG&_offyO!@s8%>x`m=RbM^vhZkrlJ zV>Zm%9oa#x^1R&YP~^)Om!1$2Svqb;{c9`qN^p8w=vbh=H9mJwByn24NTI(Bh=`>DgtJ20<7 zMll7jvJ6$PQgul)vw)?XQ&AN~={N7+|KN>p-o5($!gr`MB(o0OMnr}8g>!Qv=10T@ zM9eArqPKD36UQ#RsGv zYSOd}!gZ6|EFfZ8#8klwABxg@PYjrh(1Zy*Acuftmg2NcDWM~C1$(ESP{cD4LULS` zWhhGq0w18G+p3C51~3;0cRWt^83CwJh)vUi0)sOJASENm>>1k}{ZUZjHC)U=!2cX&SO;7~+J2#!pHC&%oVndZA=Lp(x4ez;1RyJVw9uL9L0mV#QxTsZ2pFrC9Ax)v{VP&qj(A*(E@LLxf#NGhoTk0unkx42WdT zBRN3>b~%cP1(y+9#2J{>lN)Jv)8V9G8ms5py<#vfO)`vFP6o0scHs2?GO8|KcsTO46JRm87JH7`Ju!} zHgRlG_#pZjE%0Emo@LICT{Trb%rb5B(@&j`HhBBJ-Pu&ySR08zxid@O{n54aPk!); zPpoVnjK`BlB0{jpm?a;AjoG0q%7eq&?mogqMXU=QbI^{vD;%nYRU!dvNm6U76k^$r z$tkfBsAg}IAdSa;OyXfS2(fgA%{a%yqL5zUa!dw}DP#pePn2hE&Ss|MdKCmpP205c zaC>~ZhQq_z!QsRpA=Hd5Ltb889gT`{t>czLE*zK9f*Pi51u{~|=G06P!H_{93uh_S zs$MSvzJG7)%_~>G{`TzF{t&{dV>Q|H&|=&j_??wOy*#Al{;=1piowuQR!G6y>VPk; zyMyUgYIBa+uwz3PJK4Ye;9%0?*Q_)%_(ipck59??SS#)>l#M;QdH?3sTa<8ZVR=~eR3wA)$j_#;!^xp5+~V3|f7mZq zdf9&N3fvBpC-^w^ZwReGiiH8pFy2=E1Ce{axx+l#gv5|dn!_0 z!%ScZMOEb{M-yaCmS%NJ;=nY;%&zE_CA3j{+D zL}h=G(O0X-7f!Fl=8y~O9bX~?5WoULB+Xzag8Qm?EY zZa-?$q^$!JdGEJ3H^2YJx31m0AyMP3PHj>%1{TA{zz0|LJhNKP7)6t&tcI8{Q_v=k zr_zjuz40t|Nf8PeDC$Gy$5H`UF`Qp8K`cW{llH>*Dj}Y`0Ue9 zFRv`sO#|R_tGBQ2t}h)PJ9hkq=bwJ_&C9zxW$YG>8*F(f9vhHmsb`~ zo;tp~wAAmH$JURnF0VIj`_Vk$fAwvG_~MH%pEjD45{k(Hh1nvsZX6){KTo# z_wL<#y~0Qj$K##d-4Cu_tMla5mp}Jgpa0zM{-d|vzx>wK zcmMG}{U0X#d1rfa;lkO~^(A(AZ1qHMFt~Q>@?U)8&#zv4|N5Qx7ki5*PArxEK= zqA<|9sdG$|stT*?%Zn=uyN@2e{-dwly!&oyQk=Dt5}M_l1jKowK!WMs!+WjO_cm|+ zn=k(>%b4n%vw>>NG3FK#*ik5W5)U`G9}=Uhf-5WE?-xa{48$`Aj~1s&Xylkn$0cDv z^B=;`KDJv?`16-Ga=o{|vllg^$F`Y>3X!mi8n+ZWQ(hr$lU&2T=ZdAWN5raVU5 zaG@Z~U)DRAZA!5$!>J3;te$=m zeUB`c{ei?;N~%d?Q}_FW#q~3xKWe6jhz!(8ke=P3tg5C~GYWyhM3SnAfgSEVoEG3Ex-&+Mk^aDXFeHqnCmGjl%7B-iRJlKEu$$D5+Q>_ zfY{diU<=jB<7Zwv+}~~MnW_=ZU6YTQ5sw?`+h)dQ$4)-6@x%)&YZpj|2M0|HS-~I+ zkQ$L1nM2h1CDN1y(RH(m)Xv5eRAEPusEIK_B1KE0nhCiLWzpjzI7bCB1DHqfOvZ|+ zCSs~tQcCDF2!Rl=LQy!8tSXPY7LcH*7_jQ197GV90=sE{!7!^p%E`Oh)xK$JGevKZ zxp3qIifxF0pC4i)wOtV>5l&o1yMdhf@O`%H?m;%g$4uFc(6+W1O3C;lwV9~%7f++w- z1SCX+fB*&x3TWN@f6k^QAS8yPPPJ~irgOk8DR=L>BB~lFfEb!So&$6`f_>N@G50VW zp&-$WXkKWN$JU7zCG@M$u${~GBZnw^$i)x^XsvX?e9`{Nb z;@mp{gytE|0}2SD2_OOT+@{18I&cXM5L`j7Fd+K)>&rIC4a$CSchqADA3Av$AO|Pu_Ov zUgc&bT3Hqjc{+`f9QihnKPs%T8Y(4ZhHcss0U+y^VH^gfu8 zW%lHU2>qg3C_Qq{kO@mvkEG5QCaG>)1JrDN_UfFuA}MZd9mYrkzDW_FWtVzA>6h-r zvBA<>Mdi@^AakW$rB1&i15Cs|1Bsden|aojApvR1&Jt+Bu?qV#6+T#8U~}7T+*dP# zY0tF_y>{3y7JL20UcUe%foz}-RgpoKdvtCAEHzV|i35e4(oCan$6Otb7Xq*+GDDyU z5CM{5GMwXS)skU0$c7p4qc~ZmU&)={Pmjax=LPd4{w-uUc(ix-);&lzEc(=f2M$%g zmgJ$Lz>_$g9!y}8#>L)nePOt^7#0h3AF2p6AI#fh?nBo{0gwH4-IYk^HaqNA2MMq> zOi+TaI5aX#Z7O}`smuv-7AA8AC@2VwMm;Awess_W2rHE#rj&|aQFzC7PIa1$Cx??M z`>?XS+zZ|SiO~lHk5mN=j0oV+YTdkgdvJj1r!QT)w7dK8gR5`7^Zs8efPh0_g9t}Q83?$({18vsyLYp2d_T)KGS z(i3ML!+3I7RsD^!&MtPo22(!R?zjx31rNZ|};F4f4^;;e%(yZtWS5}v+ zDwwrRGi&OJcS|QvpZw%!Uit2~zxLg~`imou90L#nA(%pb9ENkfq8Rla9X$BgfA&uS z5WoWvfWSvlzhD69t8nR=XO`F3z&lr!q1PkAKns;+X^1S7D_khOuKD27=L za*8>*-f($o_1K;L9VA7>+{Ut^vg!eJfTd(6revZLTk%X#mtIo{#BA1)=I4p}xn=u^ z7TKMBx(`Kis7A}jE`R0xO|W81Xcs|F{A3oEg$Rps%? z(~dId-EPs$MvKc&UV7&F&wR03Jb(Yz_|}y><2-SW5h0_@W9noKG*>=4^9+#+B-4V` zRHu`=vty*3O+{35$_~ww6G=I9B#%@RyZP69=FpAk9RjH2B#>HYL5;LXA$ZP9B_IQ! zsv&oiSSTtQS!Je@6hy1i*NrwwC8yM+rj7M%)J&$cb|w&k#Su9l$_k2V@bRtr5JAmS z%%%#aB4RpkFPu-!J4%8<_j}k8`bfwUWEV9COBu?N3hx3lJ3N|A|CH)Iua7)Z8}P#= zrxLOP0TU@1WK?EUM(`*Z#dFNAO;V>kQ|+Z(8IV_U1Z)u00x6PqSdEUeX^;gZKjt+; z$MnxfC7h;@L%w8S0;bT>1HiPy1whww5Dfw-0YpOva_~_?7#^u!ibu?&k2rBVaY2t- zA-dxPI`&~#%0Qsqwtt@2cx>D?=*IZ=Q;Ts^1F_BkV$el7#5(GU8lZxrDWG&p3U=Zl z0H^|jcBPVvXh(~0S?3ArK$C`G z?#S}o-EWVjk}f=D^EyzNYi=DTzT-4@|4=4^fMlQq=m0|}c_BKc0#!i-iNF^~3?Hi` zJ$Ha20idA>Kt^k7{G}fBz*zwh~=cezy_lClb12sEjmj&(Jn|DuLyK&*d zb1!`I$-VL0_wHQlmBsRMI<-+OjsgMJ`?Vj(65Y9VSXqLWao<^FozB3L)cf_`!|mz8 zOcjwkZLSRped2&kMa_V)B(7Y)Ry;UVPhq_(Rzg6YwlZa3A`Fm9bm~B)Z3LBk0HACf z70DIE<#ZAe!eDXP909at57^g(g~f%H-oonA((%<|VVQaZ!vX}+9FS(H)c}zc0J&mR zjbo6hhpf>Z9z=ySIJx$`?^VZk?r%*GCe37~DJ8O5AYCl|LVqx*`u(yBCYlo>L%~Tv zObX6t*MdSmh_$-h=1EL(+A`~aSf}-@RPK34fJs%6%~6h7y0aEKg{-IwC}Ltd$L0L0 zLjF6&ROfhvpWmS(9vQzT+vA(>U!UwBo<4T^#Nv9rIkg7Leor{h#E5(DJ{+A`EGlnvO2f|;RXi3Nu*-|tTw1V?*v=w^%!_`2-F5|IEyCVA7m|u3 zNgTtV>@O8)=o~c>?tXCB-Fk5L)l0>(enx3DIzV4>&e`|F!pNDSImm2;kW)lsS5{Oo zuz_G6H(NLF?A*BPqI%(q%YIn|$GK_7H}7n1-S>T8E>*7WYgyI@leTI5gHgG>5EeL* z#!0M`cm~e}G9Vz6LqIg6qU?ChPyiH1S0N9h)s@l0V%!{W{rGxSRsP8#I6wqQ5D#NI ztaH<-sxOPM(Dw@g86UTKh}n^>+`YuVzWvS87v@#4h};n#MMQEk$)Y)HHpr$BVXi7y=i+P-7OjZ}9j1)p2xoSm{CiY>}TNw2RxvAL~ zAuJ9CYlFeUZ~o?!E9>j4uOGjC_x|?Ie%t0UgoTBL!LV9b7$8v-+bRTht|%&P_2%`v z?O;4Uer$E)_=XDXZatb!$2q08Zf@Ux-$FQk?DS}9 z`P}&@o__MF^|e)v&2(}&==YbF7Dl6G=gVhbeCpwYhqrItymROJqs@Dh$v%>nRk<)) z`0VF@`wPGGN0Sz(*1V8^^Kg7Xz$PX!Th5}5S!0$%;m@AAaOT`OMEcaLpFV!##FZO2 zCezGR8rZ?!?!CLWm~e4nFdUZ4%Y(sy>sFqB?xjz>`a3^)^Mg0veDChv2fizFHXAK3 zj}}(?3(LS@!iZLE#f zE}lMf?wL!^9_$`me*azOg|&_I!{rTgqr(X_NoOr$QxE#R7e4V))$_M+UWxTY0h(G; zn;?nAl$tiHKtNZx!9u_64MiL~`5KO^Pum&FYm+)%X3%iPhuhF0^U~^<+du z90WuO$$P?H!P*PKhk(R$&*{(8em{oWV4*m1cJ0{BWBZfCHnqVIRI;Y25Gpf@IMu>L zT~>k;tza+=LW3gYvT~xT*|`*&nZ-zeH9O8to!e+bGf<$`p(1g10V5Jj6^g8yBoPQu zWmu55#@PoSz^ehoM3_1Fq6k3HMk6u~Opd@D7zwmFYfco2GKkB@E(Eq3vm&#o=7d#w z?&4<_MoW{!o&I2P_0&`Sr6=2|dKb+CA!1c!%vl6X;w%QYbo%`Ni@iVlwQS4I`@qr6 zW;J{7(>KxGh}&o1(WFFDwk%7K3qsii6bj|X0_y*(r$QCVhGi5b*_0?InSJKHdE4kC zPQRPg%sIyx^|1DdOq#S`idP_zd2n$N5eS@fVxP6wn&TVa_xrxNynMa9z8HoT`*?cq z{@&41x9LjC0IBO03I)!oSEP2aceps%y}5ci^c}Nj$8QFxH#7g6VRHJds1zv&I|uXK z(+R?sl+6SY%A3DzQ&tqGK%tp2DhRQmh%(2;-pTUnb>H`RTO#$_`huDs9NqncfBY~0 z_`mpsRak`iqPC)#kD*Lz+f6Q~*;{g#w7qhyZ~Jn5-C(7SU296Hcr>6#)>) zmIvuPMD<2FN%jTvZ{}e&WOC6vMkWV90!0;2vRWxN`p$a{JG=8zP*iiFKtPUEf!Jb0 z)#$5P+yS2Lm6FRafE1OYn<3>f72SmUQc%X?P0d+R$!AaSvk(}zNJa$|dDD(* z6O#gT%FQ@~sd@)N!3g9{!dkagn~H3>?O&LLiAe>zMTr_1B9TW!aNcklwYM!i&@1Ew z1<`r*9>~73CO!mnWQdB)6KfKI(Ib+Ii5VjyBN!H-ERalADP8BWQz-ciI58BJk!)aB zpk(PcH7*#TNU_1tfY7T(#MWf#c`tHXai%mzNR4-qhzT5nNS_4AMMD6xKux~}8&!IQ zj$JCH>&DHVhh5*ycnKBfiZsT0w{CaIH^{E7!eT5q&`|G~Z`8k>Ff2-+|qerrkfFW}(r?U7t2-1g7~6*mM8_oBQ^`dxzin&b?=!uFhURLERjj zEb9GT1An>MyyXz0`g*f>sz-;_{(if^aBuA|_R9#@&%Jt2p<2{C@86%FG-q~m+4r8R z9bd__m!JQz`>Z?L2xNdlV3b?p9Up3d2(EGv0y_`Yh(1(1%#CGVgiHuQn1xx8jTtl; zurZNd-o2jyc2-+IeRJqgXKXU1{=AsdyLNPYn=EJ5=*zMlk1T0Ni zz$v}>4^~{zZAM{eP z*?g}Fi)t8Bze-*115>CNqO*#D1c_lap8x!#&wlaCCe-&&-=c)UV&!X-Jap^lPoHi! z>%G(c=JcRFy|3&qKK|t8&p+Fp?;XAScKzt6+O6B2cDY=Qsn0iAim8GlW+Ft3F~)ff z0RcgK%L-g0wcvMa7yNL3_T)eOBt-Y%;QMgIfUvn3Hm|OAGnhyg0k`%y-R`}^dcOjm z5KS<(bZ-TF;@?m8zjOYDsTdoP5P4c4+$LyErA*#L(X60oXl4#6my*VOba?#!2lXeP zf6>m|x4-r9{r4U%FK>SGqn|u``trephexNUpFR2fCqMnGK6N+irE}ps-~QeYzVk;6 zt{=vAw;K9EaxUZ8_odHeC^_pUr{%D@O#PLq?Cl=y?VkF24la}enz7&X1ll&CuA1no z7^|kKKKQUcI(>K34=-Pyy?TBIML2+B7D;LnJTB&S6`W~iPaNWE)h#!jkMmgV?(H4? z=|BDBKltMxELZCotJ*i4^=7?Vq85|!{PpFq$-BoV`=@uC*`jWnwrv?9X{q-25B3&S z6O7P6Ir_J&2lwwBkKg}hPOBozL2fofr^?^{&esm_>@A;M?i}3t^p>lD58CgHmj?^-qe8j-EVyJ?eG2oxM}PCP*pFVKmDKo&A+}md-34T!GpUegmQNF zGL><*`|zC)zOjMb=U2U-&HnI@{^-%$A8rQg#;j-~yPw?Fv)x4(y`oAu^qvtF-O!)lqkUa}aVkqHPe#=5TRrm5z;v%TQm&~L6+ zH~l!s1VhUTW(Ad-=;w=K(C0ErsX@S`hykImLi7;5cb);ahv;n*?kmo7#lVaG>fXb< zFJGLUy?#-723T}9LQ%(TkipbKUD#M)pn7!8oP!awcOjB6=2E*M1K?oGsnbzXk~|Dd zK%j9^@yKo{g-a2SP^?%PqYI8BI?P@Py#otK-di&C=3!KDgr185Gsed1reY)&1%ga4 znv8-fjv$+6DX89&Fsc9+gQ1K=@rMuI{*&3P3ROE8ZC07cVvM<1F+d89K~AKKrHELy zbMoEyza!5-`_ZPmIlA-i!w>#3*AG_9-bymWRDdiYSRN=FRqg4$cmFUA!}a-dP!K6F z71AL7Z#wo3fFLvt`!=PC^j;9mRMZM00lHf|BqD%ERKR5F5fG>^3O-b`L+2t`_qRX2 zXz^8i=Y#M4(VzUcyT^CCO`bRWjqluV=Jm(F2v46s?^1^jaOy>5%wj+V5X}-PDS0$d z%Oz=0t9=AxgHpg0Q8XEpY)~>eFamMp*aHBgITMjIT5pU@Rty;&F*yR(3FwFZhHtJf z+ug&eYPq(^>?SJZw4Y((dLBdNL^O#m#3Y-kjbo8qQYyQvyy=F`y5Fq3anpBw39oj1_i!yeijQv*(OJt6|?wDd*fDMx;yJO$IjI$Z>jypxM+h0;YI7I7~-Uow^+H7QtW&(^mqOZCeQfY`<3|07i5G z+fon90$s9^tuP^>b6+Wb0RbjL9NO)1iUzn z>|@1{^J)`k>A~^A3d5(@eO)aU`}1ZFRWm1AY|>~u;u~QcOB#&Ou&-v2cN({X#{~^hRMiIfEDLb2M3~K9>Hrx9z>WEGeGUE5Ld+Nqr;PUczDA7YFw`Rp@61w1~f;E zB5VavE3QoyB}W7U(aJ36J)F071v(wR#diB8m``b`#opAb}{8LnrtNDYPDa7 z=%Pm=p){tO%bUjL?a}_B!P({6)#FR-%bf>z-ChKLYfMnEtdfg}umYk(&%^|3-Nh=c zhdiX~^Q+6(7nE%lngB$GG5B^qpY0x0!4E^0Av^D@5FkRyC7q8KpT1tczQQDP-(X+P ze(|i`n=ih0usfe+E+ysAct%{EtyX=9L`=jXgcuRUat6-`cJalRkN^57ufBYIbmwmM z)&~_<{n>hen?7}CR~Lr({@Z^`jb~`tVgSo%coc@zA&QdVj1 z8g_1!Jfz%Tr={Icp|~F)0wDw<+L{-BKhgh=<|6!}I8LO}1C zJ!t_cR!UYBB^9+*H@<8;k)iL2XJwWhK~+1z0byVmNiJ2fzSA3>~NZqhK0CdIpYv52#Sda(xpSqo@RX&^10jEIN;Kutxb6Sdjj z8PWTD{2+u_ha!4<|M=wO zub%arwU{t7yZ^1*nt5{I4>Ijo7S)WF-?UIoOWdjdLAF)#vaK%!6i}6{fLUAiHPQ9o zfgUhGBP2>$*6YznY(4JpxAnYf+R*&C{`D81t@GNW5uqTm_X;8kP*6~e6~%zTN|v$_ z9RVCbF(5z(rU-0MEORD75Gld{3e2ErMaw8MZ7~xH+yV@7ipzUq8B?fSyBkAbof$%f ztz)+pe;Ik!R$@g#r-lJgkfe1+DJ~bB&86?^^}6j=<7VAmUk^>=zq;e186Z)pJP-;~ zNmFHk5xrT5slk-GGzBOEr6?5DBxBNnOsf%R-UkPa9l^@^Sl6?iW;Sm_U6FT;^rr7% zOBT>uC&AXpU;sGn@tsbGQB>y11puf<2#jhV9*VMwSXNPkZ5Uu`Spb8rnP7re(iDyW zycOEFv;eSe-5DDK5|c54AZAolU;#qgnr9iNc84hijlVJa{>J=q3w@j@EhuJL4X40G zDJFs@07yp8%!A=XVN_Jzrpv%|YGi<0F5_+B0JrrJpyf7?vE?)BZE9lr^C?cT6%A~n zF1!IzZv7}|4y_>3L>7as<}+Qp+j2|T=0ywu1agvYEbT~+83A#!E8NCk3;+}-Ip&tQ zU=zX;-+;++Y6_X`4gxBZ4Fh#DL)frWJXrN42(%D99!yZUuVJ$0wx56 z>=dY|6c`PNNPP&kBkxM|9DUSL9Ts9V$R>jdvNu3cEJmcNDfP-$0UU6NF23Snr`DZ? zZ+F6Mv6rP9S7knLnjM1N^*4PLuxT7SF%%cM0@ntp6it{M?4J1D6W8qXY{w%3szVE- zh7qV{>IedQ8dVJlXx6?}E&l6GzfNUDraN~Y?C#(3anTLK>7B*con0+&fU6IV@9%HY zdfCk_H0|8a_hFxCv93_rgv|m`MeM{xbE%voH0#A|T~(!4i(o{UvLmY7s?mZj2IpGB zxLNjB7we%!DC)+cQt^->k7OFi$(T`yBcZcFMo%7qo8X*zGbd>P9>h_}QHti0MGU7q zfe08G^R^LodYVki-Ys`+i%9tgNnc<<*}kQI%Uhp8v-O*9*z}GV1@n+1#|QThrX~y( zi*=jz<;D7%E8o2|3}H&?4} z)8~}Q%##bDYO5N7o_zGhC%^o7b+u%}d2CuAV!`sttlht<{9?(RNSO}^}hmsi}lbzb(v>d}W^o4@<;)#Jx>c~PTX zJ$^=)>pN~oQEl{_FW0~NgiwY}6aO!1L%TW8;jJorcrn0Yx@i`3t|x z`T_$Q009va5g`+>0jk0{<}{8uYc6K0gdPBW2qA=V?7-mu>FKb3^sj&QlVAPhSKs;O zx94?xe0cY0?u%%QsUCMnQfcIx@-NY(rsKTQ41$Q3Ydw6_! z_tk;S+N(aXfm1XoV3kwT5GY1c=}KBTj*F3p@aMHzYitDGAtEr00}KO*nsZ15poi~1I=*=K z{x5&^%hxZ@4a^v+uG%&@ZDbr}ERxIs1xr=|Lh_!yH&5U=#<~rSixH7imza5Vy##}% zYOC4q{NO0gXVG)%yEODNZWu-vP0SULVp0Hnacadtw&&!p?5;(GP3ui?e|LUz_s)w~ zXXlqs7`cfpAos&sRE)s{NZF#27l6vBsRH_{F^Zs!1kRJyG=g*1QcoRStCNsw70G?y zGf7q#lw*}miWwu>i00JS4O(S@;86g^wA~@b;9VpR795g`-V<0>0U%`D%Kiups1BVt z6ciJOWF8a?Wni5;xr+8f@lNJ0R8?if>r&K2v*l5YlpH(a$~zx9j~M`xu!7iur@z4L-Ain+WKYi!@ z_jqUSFfMk(dtbk|n6XsWEGpa!H6dw5PEMh{$0ikXhZhv+=<6hC#2 z*t{X2GYz0-gG(%+#e7C(6Ou7#GBwA{;1o#AGLaCef`Xt4GXPn^B2ugr)Uvzl_XDdW6KAT3 z;=GUpGfPky5+VV}B>kkKg=`jNZx-ggdpZndTn8jFW-w$mQiEJ%J<5{iZCi(sZ8ylb zPO30VZA`wY05c)(?KZr#2s2(?ypZ+PPTL&p?95`FLn@Tik2`grWKbQrD(yjtdwsoF z%x1d=9+8k-P#=J*!Wc?y-PlR)A-F)h`zH?%0PK@bK3iU0eeG-S-GBJ*nEl!1^=cJ| zHSZkk#?XAYcQXDjf0)HT)%t~Q$KTr zKowF)HKLna+4HzpMI#m|O08H0kjW!?1alSUIYY%3%{HndP+|{8q)39~(6NCeWC}jA zNUeqXwTIj;;_?0c*l<4#n$m31?i@DloU7p2ysB3Xh>?iR)GV3^VcwfN9ft1gv8-QI zEs5qBan>$81W-Q%F4N<|Q{gJCE03}CD{rNZJg#qs<&qr5*cgNY1y%^1Q?J5F(m<*v z3XBySI2)MzM5AE_P(muumkfaHLo%B}TrgR_$k0%yyOfzja{Ld@yFT3<$n-bxC55sn z!+I=ZmQ)acm`W~CP!;+zGIDg0DsXdmclYk~*%CVN$T!zFP~_;X)8=TteEj<6dcC_p zZ@Klsn8))kULxRI-+Y&kqYN@$_oXjRJppRTRxEepnu=$)-yS@?^XLp-$}lz|R?bz? z&*}&vI0G#cwg&mTYe)yE&#MDO0c8#dkbm(O`sM6}oI z**p&8b^h|#ky$K%`qLlf*Ee_SgNDOc5*OE!U!A3wkAHfBzWwKaVwJzVxIn?CZpo}$ zuTvQ@`VcD)SjDPTT-`|3 z6g8#cY`rwx^GEK;8^e}pZ1(%|h~GJVVY1+Ew`n%H7Z{Pj*pyTV%$b$jup^k-IHtN% zA}&&-q;X8g2d7{E;Cp|5{%=12?8U>k?%%ufmScbR@?|^cDHTLVxqFsb2 zV(U%cU0q-9%#V%^PAm2*ebUXv_1VSQ`s!jeblsw1LY6XK-JJjAXJ3Bu>x(6JAp0sz)z!3Bpotwhue z10jI-p>5jT=;nluFc6{h=3MqlhN@^Tgiy6Hw)1w@)D?T^hP>Hq($MELh-BxTInH1r zCPl}h19pRB#DTb&_hRTMB0ylz5UapNENO9$RR91&^oA->kZZ%7RT;GuQ12K*5fCsW z8bzg)3v5Bb5`c?V*GA67vPxh8DOSwbB{fy3ocVw*x>zwY zih`P$0H`8?AR{1oW&E>p|o*gkF`HIyb z7iSuga!FDkg8`{WBqDS;&5=Yv28L)NqEOTj1<*>eZdx5psUZ*r%?Kt&phi%NS^*qk zoi3hDN2qnTcW_u1d$FCz;GLm4M?Af(VxrsW6d9Ntr~(QwQtgY6Du_^UD=$pn0|Stv0h)r~*3h6x z0zjr{sA|(bni182w{18kVmW2a8H?Puc21Z~6MzIZ0%n^+!4sz&P?gkBL2ju9(}Q|a zVJ4rC$;2&CRTTkOw#5@NWg@l`%0wLjR*=boHUZC=kbvk-kp~MX$Tt0fTfW3p^NDIm z3S-uB)LdJ%Tgp1zMp0w}QBDq#DGXsqG#x^=z8;0CnG(e&Edl{xD$=y6wh~K`A|`@b zz_N*=0OCZn6azv56hlQ2v-M!32oRNQ|2qk-|Nq|=Y{q~Nkr5by0U6B`GN340DXPlG zg&@V%Liq;qxa?opeXLJ6?rz zZlZ;StJm;qeckc3P!BNHyFA;kW(V_~J#0Lc9E^-(WMveLHKV7Ltgfmu0D<|+wX@mz z>&t51&Sr7{pxNE6yX?o3iRQCP1K^xPbG=R%7dv3H`F!`@TPNT8_U6NTuUbIH2CF8Q zI>C}6K73ZBluyJnHkX>Vm4LMdd?AoM_+vHQD;>cD~t}JV&xowjwvBv02Oq#NpNkl9J=n(|W2vu+z^JuEA-C~NS4AehJ27?hGAff^cFmA?S zIixW{E*810z5g&abXsy{>%NKbX%#LqLZI`v6ck^?kel(I+4M+yCeP^tIL5_x{Bn zy1DZ?AQ2%A{Qy~_0S3<|KvYV3_4()Piz_0cKnDlMhdcY{Klw%ae7O^6o1xQooV9Uv z^I~}Y_|YHyBa8Iq|M%y#8s7f)L5#Fs-lTzckM6#G@M!q>#q}?~IR4}BwQt=MlCmnS z&QwBGMOU+DQIH3V>s&T~`-DI<_7A^_x+Q%)iU z%#xO&>)Pnweg7NJo;~~JFMhJKyFjMp>gN3FX{dB}Z!c6cTibHA+1X8ifT$vJetvUx zxf=S_ybfx4-EUsLdNmA&<|UWq)!Jd}*hSgJlamK` z5APnI9LHG{)b(aut@_n9c30Qy)rtTe1trf^Pc`I3lP!Zq3V_o>#mKwHb3+=40wH+^ zj*CG702i9YE;rSpZf1d_IU96jdI~k#04Ks4@e)z4I z&!7MJKmKsOxA#bKSamnumGdyK>se?v)OD-NoxL4~Y`I8UUtGKxt}byeC%$HOo8kKL z^T$J990wg?7*e!&@nZAx;^y^>=bF#w2ghYR|Kiiv&t6ooFCLuSy??lW=kVaLokdhi zgREA=dacXN)q1rw6c-SQkc|k@z&Uap$jHo!Dl#e<`{+Y(jt#PafGL0na^!%#HLdq` zCp$+tFNS=o0m; z4l)QEBw`K-#N38Z#}FB@WXqOZaFEeN)yxo>*;VXo=RG5VWmQoCns9JaOEVa-Lqw;l znuUdw0okccBmwi;1hGuT2jGeju@Q(1=qn$xCZn9xvStu-geaiqJh3NF92}>y8^%$! z5Lm!MQ=}S9LB-I4Cw3-fv%C>C0AP1GKe=m0ubzM24eO~%;eSOREIFk#idh{Zvmycx zB_&e?=iP55kQ@6UjoH-x&f^jhIi}6}>WiQLyDvWa>1RKG_sfre z@Xhc4>H8mk?atl%_uoD;0s{KXJba<=)FTz696V) zF>uBss*0GXsFH$#5N=6SCJ00TkWIkK)bC*c$pngs$oaXdl+E&Vd3P|jH-BN%!@CPT4NEM*zZx=t!io!4d(pTN!5}mzoMnF;OfAQz}miD4QW0VJcPt$un5#J5v-$ z`qdtyL{XFg7>o@V%^SEWUBYCFSQL>!G@A`MC6&NH25OlB4GL&xQY5I&d>KMgZ9p=W(JT=WqcRw%-fUI_g;_f{ z2Y|X8$cHe7098nuyPNZ2ozvB;ciw$;x;y*imp`}Tn|9G8TW!*FDobA>H-wQE$FqY| z*gK5#S+AXFa-qgp%?pUn-h~(f_q{+g4We3H+X%>VeRXuQdwRTE`t{4#U(WXK?H|mD zJMHuRX0|uT$AA7qeev?Ro$;($+&j4c2OmD(4-tk)u8iX>=Ob|4`ld?koRyln4ju>tz$`ct0og>zdk*#T zSt!?sJ9m2G$X+X#Mr|73&eZwjFry(;G(rW$=>m184pq>nQOC|TI;+~WzTrsK+@}#% z8B9i1seLqG^~F0A9fhqBvjZO;&#+ZyOUbKgmRhN;c_V!%c`yrvq!ANmDU zf@X$}9dlOAqNJR&q;;-Z?+-m>5!PYsQ%Y46rpzijP%{&Z&3te7@cjAm#mm==lf%RP z8Vm76@f`v4q>7`crZJfeb#$(Yi+Q^{Ygbp7{c<(tM2J<4tX^^^vZkth8`yT3gFDS$=$1J4$q0Q6di$97E~KG9 zfAzX;+R#*ocaFdH{ zL_}hM=|Jd1sJHG)rGiD#RLK#mN}qZ}8gm&{*VosTr$_I-_wv=3K-#6gzgazd@szzB z_IYQ1>MOju?n8Y+ENU5%Hr>dmmzQ!4o19B3baB36@>K<8%wy^u;bt>DdvWHOzW;-F zj`nv^ZM8`^>*bSYUtHg;UOsuYzrS~U=P0!Gx-08dpEkqh`l??q5nK!oTrC#NCL|Xi zfeYXOg0D>7I7%s~8B_?^1Uf_rfyiOW+|;wC-LGTqT@bZR*}zCBY%-=itk>7w>Ks*K z-PX*A4q3^ef@U2otM#G7I2LuT5h%TsvPG6lZ}8n%~w~i40GC99PAx7q3&0g%X2WIoHGZ9 zeU@SydDZpL89Ax0UY#RVu5#Kb04JpLi<_5Mmz9HuUpu^a@4zsgFNamPe(~bVi|b`m zzdSj)dvbhI$1rrmdbJtTX1O}Qyg3KR&bbi1Di8u$@!ok1P*7E!0~a`{6a!O{G$JXn zO}*s=03O|L1sZ`Ou>*9u4))X43B0i^Ki--oa*d(`N-jAF2vr$fc;Vi;tzKotZl zfLc74>~c3|P6)_SU@%25oGCCsVvx4-?0p*gLB}ou7ema3L@q$(*?I4XNCAKeRoJvl zL^03;6BDr*p^Jpd~GwH^(9`d-pUA`0AZ5hDCN-%&@ z%6fG%bXT+8V>3sT1Cy{5HMBQX%EIKB5K+b?h9F$2B9oI`mNz$j-=XOgq}+by+y4WA z4}Qn*mR!1S^Z1h=fAR5;{{5f*fBxj3{i}cZ-~4xv-hKbx{eAY{Jb&@=C!5tu&A=f7 zvlWHnz@ANq`8y=*|s!) zEr`sBX&lZkpQmwieRF-YKHb~jsp}AHS2v-GAp}+gX7UVRC5-^gp>lx%5LH!6VK(Q` zISBqMdtV?J5jvjulLV#)+hG;~nJJy@j|;w;Q}oB7^+zCWMs&Fgs^tH7SoGoWDsQl0ti+S_jFj1w9gR8XhWy8!}k zC-W&uVf1Ex2Aco^il7RHxSi_N3{e$Ofe-+3Ou6qz$pyU!yoFY7KaEY5jbdgtQ7{1! z9cqR*oxf8#=o>i>QKuE{vtV|(nM4Z!oXk1Mgay^6mGtVv}L{-s7&!*0pN*V0mjV4hEUWB0XgspE~y}>D(F`xF>G7@6wRitW)J8QnP7^# z5F?{Qc3C0iGKeTC5}KG=BF4yA)I^4eHbZ!OcX79>OLk;+j}FM8V?iidiu6QbP9ln7t*XVmhRfkioHm7FF=bv1(0u7UBZcR}ouRhZua+dOiXyhnpF6 zR&Kt2cmDPJ$KCbXjb%T&y{IqOpXKY1XLYXc?7I2P>WXLMd_U~<5#riOo0lK|4cL zFIF+vF<|r}LvPSI9|xjee*7_F{_yJ`o*eCc^oyVT^5Y+W_xp>}yNedJb9RvhN0HQdgD70X32FjKs z0Rg$9kO+X0f?*5h07jsObj_5_lo=WdL5IaF5gE1?Jl5-9+VqpL_ z0Vvz97D7Y?QepvP0|jLyBK`*|E)*zT8JFF#$tYA&^xzCMr(y~&_)#q9Y^uRm-f7>D zM!+-3mc~tK<}-H~5AGdZety1Mud7+>(RqiYG$hrbIHsFr_wwcW?7?AdD`I42NreiN zI1k9is;YvB&WvtWU4M2~*Wvj1V19gnftJ^oL!VIC#~PVP2XBq=KN9N-ianL+=QBiQez- z?5KASzV@|0_|^~Xv)ARz=c}vL(DL5N{l%`mxcIzV<$H(s_0wPc`hWVf?&^Bw7HOtcvND9Y_@^T^~Ra2s|p?DESSwPdGD*riWV^w1s)VP{eIKy1MT3r$7Jr^t})F4^Kg9v)T|kC}L6wfdv9{Dzd)1t`B2q{crV)|Ni55%D;eM zYFk(|Dv{j+mx!1-L~jVd%pv8hqN3oO2h*YJ$hllfKMX_Paa-NFd+)p7`@!n^a=q#M zVO(vJ!cf)a=x}$>^VQAy%hxX#JFS^`SC<5JTQj@Mi{)nBIln;QaZG1tXTy4RvcI3R z-rNjBCr79I5APqS^qTeLaPGWatsoEM>*e#$Kl?ao4zX%yd$F21AT%R1Gh!egVm4Q@ z6agS30w2%?&lEtMW5^?x!E#Q{7_sCrr{HSGJ~(!s*f}zTA&;f+k{KId8v3!j8q+f8 z4#1oSGi4-163tl#!;&=TO>u>skAWk~mVhpz<2V8`p%G0yF!jvL#LPYfCeSe}7bYT6 zVs9edW*uCm%4454n;x(^y!ZCE{vd6xulrOir<Ii)v zY1$eN<2v;TAVk-UNuNJ`mizwB!LE_6`clSpda{529`>6{7Z>}xI|}2f*EHmQbM@@$ zt8o~-=eC*6nwp&Dyg{d-iqpuz98^m#YM{vCn2C`cv2!}+GHzY#({a*eL>BhUOd1^# zItpemraX?Rq{8GRT34J0b=&1Pg_V^BgfmZhfdCQ|&@PUjc!c2l8a%1v3)E5TR&B!9t~N5`u_g0V}28 zkU3=M)N+j3<}QQ^4N6*Vx=kv?1eWps6c}2{dOxQ3q%-pbF+9QnJyODQ8A0nHNVc#>U5xQs1S~ z%HT@QLYW)_nx#@0kpZXS2(^qi=g)3l{i0i5A(A1g=(O0M1~W52;&Jt2efjBZ?_o+w zB;^9d2q1%&TL~PQY09-bata_?*aydcvs?|U7g`1+AkgUoAtF_!sf^(^5#~Zzcwb8C z`~LOI$A9+U|38@d|M-9Tzump};P|+K@4giofBmaZmlxLp87e3^jdCVX1Qifrg5{|i zBbYbCj0vV0)66?2)O5_aOjj>ARlICk z-z?g8Z?-sGw1+!Y+xWoDgj)pUWE0<-4eZv(KwEkO@Pz(DLjzGzP%%(bM)biU^LCSN zU?P;2kvxL{2%{PnnecpgTk;5K1w@LNm>C!&7|=AXBPgNq?I%<)m{<`C_U4-eGe9v# zMN$F+M9ii1eLs#VFe4(-?P?#4O~eq*CL4g6n%d+HU{r#MM=7XpoIO*oIe_Y9GMFH_ z@FuV`=?~MV+S(Gf!50N2m~_7>YJxih5g-oOe1Vms46;rxB$xKvAA|^%# z6P2QdN(cm#A>6*w3U-Ge0E9q@4#6Q15s|TM^C6SA9-M1UXGRItGa4wWiVg@E5sCq8 zX{)dk{9X*=B8hj#nOso=f`De89Fun%i!?+{@NMG`X01!(o%zn-==qml78?}M41*7j zA&)|ai#puho$c2A0l7V26)Y+BLCbCvOU3Jw<4$vM;MRp#-OcmQf8Jk?d(j^?RfB2w z04p~yt#x;17D6JIIoCcdf(C|a#@WZJ^=)t>JY;1uBKCob36O}v+1cf*XV2b#=h5;0 zeiPm9&Kyuv>QP~TR?h^-Uw-n@|M;)@<=NeOXU1WOq27sDVeKLG8KCU%&D-wg=}&)5 zuU;Ox5D~kQM=8JtlvDsQHQ*{$Mopk;v1ldgks9I(dB&BP38NpN0t-wTrgSlQ?|Ct+IhT$% zSIfd2o4{b9_U1zF#YzURv*6pAS~3u+7~=LYi>6q-PynBy&sLElnu|dcAg7F~0O+G4 zl%!UY7Hf!p3 zzE@SRpFO*JedTuC?BKwtS`Rm+WD2g^tj{mc1~;bls7cL$V?bsma_m;ajSTtf{PNdd z{^CbJ`N=<9|DV3`Pk+$X4ho3Cn3cVAfzg9$A*So)5`Fc~_x^Bxbnnyu*T1=b`UR}7 z-}>5v6-}^2?`BTnP8?KRms2-^Usd4G0~X3x+^eK$BTUD@55>T2;VEmU%SLq=H6N zq-3My9E?ee2(eaGY#Kl){jeT3tL|!$j6}XjAxeh_i*bhQ^#&)7lo*CZ<0di|wjst;B+o!3E1OSXCWB6Ds7X#r6V+;&f(zxlm?qbatlw;~g z&$x56FCyL0DYKAI<^oc{sSVz?f#|QS_eMm!ZspvYHOh}cu) zmU{BehpLHj=6wY&C^ilhoI^m!8PIvEz$^ohS`DC954Dk^O5eL11Ff^SKB-4cB4f#= zYr(m?f&n(R>AM>dYudfKZHbX@d8`Uh3>2Ao8$K41v6uCjq+sm`-1O8&bZk?Dy&5Wb z7Ysp4ks(c%=a>W-Rnj)94GQQTJ3uQ*KvW4?P0X?tuu;LO3lv<44fr^wpsAxQ41|`l zs+xCzj+$FFu`}e2-l{pK=v_sM+2vdDRSZfo919ReN5Y6sHI-6K6$>bkB5#}L zkZ#%6MC8$s&{3sE1vBJ0i4;V^KtYNY70nKG=+~kaH?@y_jImo*E(S+a)q%0Y(D+%y z-g)xD2XqK(fMAFqYN>p+R`A=M{1#4th)9OhglURMg)NB>slicN%ZEZ3_lsG6@6|Ar^rg0~2gZ(AD(T{J`6@u4RETl|C4X*o2!D71?gu zw>p|l1(9F`K-&}hZPmrL_yEMfnQr46TY-PlNs$1ONH+|_IEE@tm5VgN4<}clnd(&0 zX}9?c00RbaWFkfY1wnPvF@OLH;#7yRJ;*EE+9Awz!iQ`#2WH#KU)xF*Z+a=zwsZtS zFw(*>;UtIb@GL_6K85oO!2r2;aWXVvGTMvqu zf(cG63HZ(TytP{(FrXnBux$qu1oOxN$pI4@Kq^>dnq9UW%&+c@iwKQFVvJzHz=2K_ zE3ZtzqyXj&p@=Y!Z#g_bxGuO-=+u%9Watz;IRZq$n94rl0pchlqx0fMrUG2F6f3|M zoBo#;k&kEdpa1lu{(PuXO{2y2Rkh#T`OfYV*XP4P;j|Q}!7ZGdRkmYYR1|D` zaRG9KTwn|a5l3-S5c{Ip;?;8X{Ik#U)zwM(#!0C9%@{1a_vnM!Y$2QOlx%i>`S{=b z`^8634|;#6T9nbJdT00Tdwxch!f9;9Tx(cwy2Xav=1-i1p44lGXDp?cu@DjyvmsZ`ASkjVBLH>)&cG3(n3U9WAy=QGcUaC34i18EJXJBckUNGV zpk05pqGr^~0d0t6;3i)NF*}$*KsQ z>6j!78hApcqNvQ~Mg!1fCJqHqoB*jnR=?^<0A`HJpkMXV;%_Ii-;~=3*wpO0y{91} zpcNgj#(a|*yvLYRDmf!?U_bRnG4as#E;xs5MXeNOu7WpIN(urJRGkp9->XWr?s7TW z5Zl$t_xC@D-??7jeEt`oMcaAzKYIrckpt9C01W6rx^cO_PMZ2<2kiImKDgQBzxwOH zuos^{IB47~Wm^^Hqm#qalY73Vv+Hy4?*5~97khVZuE+JWO)V`(Me>{e^3zwJ?%sW$ z<{oEIOJ$n`kX_~5w#Hnfl$^2{I>+1+czE^ki(mclSNH0}ckjK8NFLmLF|T60S}vEb zUfVYl)!ve(erzZZL7zs9>>-q4#3(GcH%Iz?LFMnNzA#~4%*<2(C+v%=il_lFk|Q?N ziTosz#k3%z5-UvcS|~+I(x%-xI=XXpaYZCeGcP&MnmGe8QWL}F<+xdQCx>r?1xGz7 z2G=&t{)?BFfaT=ma2R_ZT*~?U>iWT3@3iyXTH<1t*ykcXc(+>jtJS9DC|P3&$EPPl z9szJ~XWmpE$%?80FtLF_8PN8i3 zw~-WVuDwW8~nR^W&fi%Fa$Znn$b^BXW(tTJ>iU?86TaMa6yMx;$QX{UKUt zU7XdkIXf7dcIHDhW>G;C%1K;^2m1#@-x-v4Ryhxohm~}apa_wrm=;h`AQRBwnBrvH zm1+HL3RC_XwUi+Z!x$Yv7CC5dy3~9YdeV>^C)T@#}c7R4sJ!l3|kL-vXfELVB#5(8( z84w__14AQXU}pm05Ii!V6)0$ElOX|2ix$WQloTT}g%GO7yth)cjKxF}S`h=tBA4fn z&%XHc*N=ZXY_4Nq3Nzc{=5O@{KrSpM4e=KRS8)2Zn?uQc5aHL<}s&2n&$_ z5F#T2SdPT(6?>6r=jsNjq{_@Kw&lHyP;K>{iS{BJ#2t7#_GgEes06K!V$;w4PS zCSx=-$cli-fyjFTk7VdU0RtFCRD;qhONIs@V@f)#hP27O&#~?}8Zx1v7DM!5Rxf7D z;F=&+-GsUgUVIf0X%bQhzp6OxZ$Z&$K*Y|WDH4DvsF)fW03iW- z=Em2WLhe!?lBzJGCm_X6O;Cu97_cy#6*D#JQxR9O}ry zvm-*9QV`RM{tpTba0jbU4mX<%YgLPAx$Vd(o|KA#~Vf)ersyI@6U zrl_=KE8g-*rp5RaHkkT6x4DO@WCOO|F@@=ZC&S4C1O@=*jkur$YA{7eZiNfFZKt4# zU+91eGJsB8See`nMiWwUsv|YERIJaIGJpaynW+}ZMT?plnqiq7L1rw5Q)!2p6&0DN zIsga+WCCEQ2yENdQ&E&creu>yG)YOS1||ebfNbat0J7j}qsze(B6_ks_3wODa})x2 z=aktYGEIC(U@!+jXo^ro4G|oY2^VRq7y}Ng6$>~t1j`_`bN3JKMAW+9R6tyW6^Tkf zo}7|yVh$mZ6h?~<8_(WM`(7F53%@_BE@AKE_05ado55Bbk(5d*9^=9-7NB(YdV%#$ zoD&o>tBD$qH4o;@!22p%u+?~T|MbM|(CW!euRUuXHk;_7-ivh~1P@DZwX17llgqpr zX0wLPz>~wNjl~$q89K(u9LV(v$D!=a=gay0U|zQj>we$@JIxLvvdRu%di?a_r$5^V zy1#!g^UY-`Zq_ayJ%Gl00Cuj3ctQkloAr)~I37T!$0wDc45?;+*zW9x5KIF)_JOvo zFol7m53J$=7z&uSE>;?Xk`W>M+PT0i%pp`ERGv9X(WzO?oRTN-0Y}2@D#!}vi3kup zqd8>4+c!D@D47q z2mnTaMBD%V($;S&-*hsX5jDPs2B`7l>*Xr1L*>Dw->h4j`zAscOf1Go3;Cg!fBbTJ z@%Fn9?>@Na_76@UJT&EQ+0W|vZdhocT%dA+koz zU{q5vMN}jhOX3lC=6l_`8^`s0R?lbqhX*z2&FdGhOBo{j>+{uXe?FV-td=*3dgtze zbAG*9g$Nw<>h;C-%`(KAVkSR|7nKdA(W-hgmjZ)VmKJxZtm^uYC*x zlEy&{nZ2T;QdAMaL{lkQH5m@nsfn_2$u^EwauHQRQYa~}#%uT$*0A^PM|)9=`S9A+oy9`Qq|b&be)B=h`ebmU4TD zvm&XKESZWr@0f`USU^M#i)0Zp0OEourm08~GqoZ`VDgM2Ga6zVN2jn@v^3VK?`CbB zHOKoqHN$Xzc8SB7GhQt(u|D_BVpv^msQ81O*45)?Gu!2=F3(?FT(4HKZe8@oVm3IJ z$j8dJ9DJY4lc#6bHwAf~bLOD;AKdqzm&>cV4k{vPG!y3oBb$keni-S~r2vX5i6V;@ z){;zmuo1zK90FoalKYOaVB@RU0#+saZ0Y7^b9KEMhN3Q;8X^N|-Gse^+0{*TypeQmGMrW?gUI21PAOQ-gPY$yP4AxmW(C3y&5ENgK_Kqf_}?V>_1Ddn6;8;f`=X&?*67?4OTlZj`;s3HI=P}mG7 z6LBd;GiLVeJvp8X(M-j}0}+E+k&+FWkr5mcftnQ&gpt&Pk`LfKvP0*SMntus%bW8j zpZ)mNMgA$U9vFk6MeDpuFZ}#rIXW-QeAWUolGc`0- zATp+cYDN^QIBb@$AOGy;?9-}Zv)d@dZ{T{{QOkwsLnI>R=?tTYT-EKt@%_`&Z*MNs zIbXN)YBXCc;9#$6fAIFat(*VY{_58sU9GQ~9l08$NJ&6EqJa%wJhR_kh=zb!Cx{(^ zBSK;zQUGFhVx~zM85LB?IYua;NXlF(vdTCKA;@UtB;}HO198O+ORBbn9^?W_EyJ2$prb zJSHMSXA~LPd2yTqrLll0shAhaC1o=MMr;|QVp1!nV2FevIL`nElFenIZnRaWfIJpx zA_h-^!EGN|cne5}X>C7|rqB>*YrL?nyFv9kO%<4+g{CS)R=?`1tb7Kyv;A6 z%GR5~01i|U4ILRE(iET|5c(~-$pDI3kx487P=jJ3rp2I41{^Ta>CtG0WPqTgrW11Z z7Lh=>MLJ9&jjg^gRY-`6fGVgUWB?-}EoOi^87q{ifGm5v?7$F>3B_RggkPC~VLM$S zOhI@CU?7J?L_JH#1|pSF;9ww0bW~vS6|$8ojq!trZylq`#brO*;EQq$ z%%ds*kPoSp>9PpS6+1G>qASs}O?R|g-{0B!-u}VGa{WcIPK87ct7=g%++dtL#}+j< zu?2EN8e}Y%QeIvAc23Q{QBZIf&xd>W-}W+c;M9_{Y!8d&szGAyr_wXb<+ zA=j7P|H?1QkDw#v?15jFh)@r zI0Ug^0&(Ne_Hs3JHC@Jy)akc3ec42=<^uSSI;*^mrXCUF^wkl48*6G_D;HV}g&bO6pQ z8=)HLw(0jP9RH^G9R3}41~dZzVq^d?Gy(#F)XC5#N&rG>$Rx#kA7h0|X-Fj%6VqfC z%(1(^zV>y9K30pQf@Bc&9}{b1P^^SOYYou7?2!@{@oIM1bYFIO*nd+_f45C8d}^239l|M`FT z(O>@X>iqKUZ`#hI2M2fVoS*+(Ho4mK48HHiz5pn?;Lu^}hanXz7RWW~&#t;BpFXjV zvYv0khI>hu=dWHq`;uzj`{v!xKYjM(qt74hKe}JJuYdQO4=Q^5VDY0L{pFKSp8Jyr zd~|qm_UenzpOl;K!}|}9+r`=AFJFB5@o@RFP|VDa`{j8PzV+YzHy{4D|CEmFbe+1= zBU;13(zID7KqTilxX>^}_~PdufAk-IxL>uE54nhWr$%V%o7RPpaxR^eocghA*dt<5 zseM(l^r@TATg!U&@?zd%-Od%@_XdXF*?a_ofhtZ7*eD0Ua z>($N0d=6u}9{P33T37S^gF}vf?3N))0qc@wajTnjew`^U7JCQI$KV+VbCFc?ka{B+ zQvySF&WAuWA;cu-lv1|bD|G!@o2K<-CA&0eDe4GKbu61Mt;e)Mf*5xQO|q=>nA325 z(V2#$!v!I4*2C0})^$BOr-sKzrw{IZaC&m5YT6k6tle>3i2^{#S%+~@QrUX7RWyT) zHiEDiM8{~RQ#>@Q_PHo$LNL>b-KA4mvBI=)C2}~G1V{pcCKAu1hzS->WA05w{+^@&gN@u)UzrJ2Avq7xd*}Q4muwJQ_Atxx_ zDf_GI&Fjl6!)AY{b$-UaVu!h;l*X8dO|%pMBcq~-SkM4OO^cOOG#jBh%03YLoOCQE z0$>ELfa)-8O6t9X5WQEYh5JnzhRyP7EkHZ_2Lxfg9Ey};CFQQ~y=mE<&yNm|c6Rof zdR9m5C0iN)cbs>BKl*||cav+z)Yd+Py7jwY zT{qq%MDNkLF%=lc2{xz33althY*NkNyrck#ZnnTpf=am>WmO*8^NSOia;rvS?$)NZHA^+ zr~rEcWk}$H0aHO$22h%Y#{z~(OlVV2BB276T*wUBGdbs~+K1VUyG{4yC!c-!i~k{S z&e+AKT{y>E-@+S%_W$YyS0yIzsJnUc^jCkTns-k=i1osiE~O#@27*XnNDOE~$VR+c zU%vYEuU|j@DS$Fnw*$`KjJlLO-`TzU@N0V~4{SP@0Rn(?u5RY!c5XJl`{kDp*6Hqp zQ?c43MWm(<-}?6bgS~dP6aM4BUhxLuA7|*0|;Zfa8iHM25d z3&7~s6#xL+{s}-Ln?e(&C`3H9QoaEs0sw+T9!p+tHeRx^y!dP4Net zs-A3mmXwL?XoiMlMg|}gY63|OZ{tX0KyX{-V3Xo^`Q)pK)9J?`stSOp2!s>X{uZ)e zrlz7+)I?M>YB3SGMKVm#2{L0NHioQu919Tn+X_tl3JPCyyK$I4V*ZI<0|;SkrehUTr9jd{orfi*gUTrz+%Qz?Y#J=aW; zsfa2;FXeK*36K{1d;j>sqt5$RpM7yLj!tyHS{%-*KHcos{{HU#xLH)>do-1-k}M^X zH5)j$=tQnBhKM_d2XFuKhd=t{<0t>+fBuiESOY01;p7?JH~=X-iFK^%o&A3E`qj(j z;-CU#5y2!?T^9`>fAq!K#j9BRX1;?y4mo9Ui`l%XXNWLwV`N%iUs-b`Gu*ts7@xjc z2v!IwC-rH5|6%>XBWS%5Fas+DWW4J8&z|XKKm`(GKmufhn%&HM%@R|oE3AQ847Y$! zjLsJwsR(lbWMEMh%Mh3%I6)u~nxLVCAp}o>Afc6DxZmvEdH6w7%`I_ePLZCdMOaKW8 zzyx)hNBB=@UU>8LMj8>-j6j%VG*Pi)*(Q~C?1!qVVhl0}GesXt zm$~I;)(m~0QwendLT1N-gY(l3soAL)yYrxq6UU}rkAqG(C5P3{9Aj8-`e7Vrv31UY zLY4tg9WjW2S`#Z*IaIv5xRx#*G<#+$>+Bs7HD#G!y?A}}&HL~D$@jUgKK+kBzIc5e z-6!mPbGUzadUEyU>lZIxRIYX|qGG@5#;!M2k)k<8a#d^)_^rDSk4_J+H?Qa-pZ)al zvfEr-zv3F-{o2<6++Y30UzOME9SVEx{GD%nGd=&}+3RInA61ptvs7$|M@Q20=6cxp z;mPvTU;Xf}o`3f1eL!^aTFTJIcmJzD{L}yY|8@4>J?)Z~kvwLDPR$utToFPMCGWT) zs3E=R9{=Uf#@Cl0KKdZUsu(Z_c2QChW(om_EJGP`KXl}yfp6!n81$;pBmPeV!Ls0yB)CdZDM zNhSAvKXe<(qe2dWQYVN*8Exz{05(l<0h9D1V@cV0@3;nwX{51Ft5w&ngfJ|?ETrZC0Ulp1 zMiM4U5U3}a=}l&O;J-mLJxC9Fff)@CG>VX!1T#{k2pR~0M0caRfv&NuDr?F)V~)7v z8QgvEwU!?CxslnJ2uPifnYyoqg+)f*>v7I;_w9SF^?kpO%ImM)xpm_P0b_sJul@Y= zJaUY!cq!}6=`d~$Z7Dr~KrU=%*}viAu-@I7OCKERr#&U9g zv43>!%U|xEK0ApqYR;t}VP))%xNNq=>B(i2y2 zT;N8ErdbP;64uaTB>sv&BT1BgrHMFaANHb8(i<-gMpiY&m$cfU3QfYGlkyFtU$QA6wfe94UGCYHX zIDo6;nE}<}S(U}xz!cC;!hF8?_`OHZKK;S=^6_#$Pwn*c_ycoefaPDXzEw&S+i?2i z$Ng~m(%A3c`ch0y+a^`06}qybXVWrl`}OlDAAalP)9;D*)7kv2g~Z{l7(FJBM7Gy}J+0xqb!>JC;p76^F~NbsgXY7hibC@?WOn@KKYForXm)aXYz3o)F?2yRZFQ4AfR zIylG9-2sESnVP#gOlwt3Mn$a*qvqna%a(wd>?nz-5e+p)wW=0yMKQqc{X5&0sevkV zVJGhQ-4Vd%&ZO>_tM%E%McXt?AhWvtXP_orM6yC2ohwhYf|CLe-DyX@byje(Y>EOh zXRD0@Vgu9eB-X@@U8F7QAIZE5HHdeKn?%*VL||qWVOOrf2e1GYG9qVEdtumsGZ5H? z+*GsH2sEqY6tCas4kxvplY>pEnCZ^NLyJ$Kzr5oI1cJD z@J3b579eu}=z|Xqu3y_{Hf9KkaAZgjsBKFHgeXJW7^5(g0%~Iq1$%gQxjspuw9VQ^ zwLzFJH|LsrDthnWV7BO*K-(cd*lsPa4-dO0csHfeY(_ujxEOQ{DO{XheD|C0e)_Wq z^S>~OoI;@CeA^G>CR{wUALVSpW!g528}pGaHy5ke&V-vm#|A^&p{PH2`1H4b_jm8S zeD`Z#`}uKw`O}}hzuNelufK8gU_UZ32X@)4v#7F%u%!R8bB@Oh|+P#L5{Z zL=qxbEQA}W zO(7HtU~^s^C(u}OfJ~<| zk!D;EPwzk6^xLDOLxFsH{}VWbSxa{IlSlpOcyZ(2%~!ti_R-?t$q#}}UODIv9{lXnO`rE=(speSsS!OfMwqv;X_`rp#7#?$Z`Q|8P9Bv#V8U;1CY_U1b{eeN{->3dJdPd|O-@Y^K?Tx$XE3duzmwt2aEAM!rvd*L-5eo7+6ed#A z45CKbDPsaSKKh;SpZwu_cdp&Mc5v)Y>tUQsrhCgh%_W1?J%$j76c&U=9g5|SyD?{$ zFq_QBzIfDbuZuB$UM&BoUw`8C3w44?j@>S)VxTK9uBhrx>u6TAWc6ZozFyPaSsX%$ zOjOEdP+c4x-#or^dh*f9=`+=vL1qX0%ZszKr%#{s{qwG|b&hG) zG)F-eUf6A;V@`puA0HkbO^5!O>dN!Tn8QjQE}Jm!EvRb;SQs|LqX&18oP*0{~$}b~QE44)c*cMAU#ZXP9~(GKx_RP$t{$rK)6?h|JxcDWwqDwX8?C z<-9#S+B-YD|McmDTel9c-8jB^egD0)_n$obWZOUL+U;aA-=D?x-g)`< z;@Sj~_KptskMAuXJjlapeX+WHe%=JoB3a?hYCCK_rAZT8%epD6=g-cbKYmjBVbZl? zgbW|lt(0sOOj48>+^h`4`h26KHKE})p};J!`}Jyb;bgPLY_YdUZOfq>hal2OT*kO4 z?mk`)>M_dl@L>P&aOfWuFY2SysJ7V-eF)uh(N4M;#o>9q+Kgp8Y10>dQ<&=I*-325 zay@UlDDyCxh55l`?`XML?w4Z3p-o*%(~wfvG;NoJG&&)~(FYVIHKS7Cut)^fLS|q9 zEZR8W$-2lb+Ux`>Wt~^C)Qk3#F~JM~7b5}%h_plm9fxg@zzh_pGCDP2?AUT_n#fH; zrp7T?$vNkS5}e^Sl&qz|+zUu3R{V!lcLkHXGQo@sQ4>6HR`p^r8W9x`f!x#y%7Hl2 z=UfhEC_vznkbovgOuS{^FvK9L#muhKD9zl!3?nAFg5SOP-Q6HDCe!Wt{rA56-yA;w zbpPgC-E5Ik$INgwFQwRKeR=-mqmxHJ>d!t7;_YOzQ!ZQ`XIJ%_ncIA^w>Y@B85d7K zI8{}6cDGVWQD>GQ6hk{&es*@AH~nh6x;@-Jym7QJxEj!2Kc4*AKmXS9VD@{zHGS`A z@AcaucJ7?T8w(@ATq0S70G6Hl>_JT2Y+$9r9z42ENm7ip;4C^;okF%kL`4G|LEXrT z6_n8(#j=*s@+h&rb??<*{4-y>^YS%^4cmNiwqCEcrO(@*#*Eao?QFh0SS z;G$zJ;}`ZszuF&G9{^YG;cin_(=}*^I;bJCFs3>=_ZRwnb1yK!nVboMIYbu`@?g2R zVSwc-Sx^*(8Wiru&@eSLiPS`-fWQ{Suk`v(WMp8gYJW3^35sM;Ac)o1irt>p2vv7b z<$A2Ox3KeG)k$Q{GEj$>QnG5%onyk0qy{iixw`JEr2xA~6oXT)_KPdJWNjbs2uHr7 zF7CLHL~1*8#k$`%5Zgc zS9Jop1R{p3p?*?3gUA=f>p5So%a}ztra*xB6$jrb5;Y>d`zq(Pl}R`0Vz;%Ck+b_2 z>iw!vXe30<6PA~jd!2;AN}P0_T98B`5M_5N#ttD8cQ+U2CUHnSjk3&|Lig_JlmGtV z`|poquel2d#+%ZwN^h#^+2-wz#_pg;^WdV->(d)Imu+%{EjPjVA~oaPR}TO12k-v) zfB5!;_kVEEQDctLsMzz5p7g_09L_e)*~R(k*~ycP&Fofs<7=;d>C3;ywmdrt>rD=w z!%L9n>)-gswY&FDE-sDIjicq^^6=@&IO{rAf})IeaW>>ai?$6SPE4LigBUkW*fNcq z0sUC9DW)EnLC{UfCzmvqBvKQIB9jt`O57k#E*aU!R5u}d^W#0J6l~`I4Nc^4IQb@r}O#Y;c)HDwi)K9_aC*fn;l%c z^QG4=PcF7+muF|sq-Y2nByfr%QAq}t?ATnKj=GLbj`K-cOf1p-V0!S@z3>0GAKicW_?Q0r|Kitw{V#m9|NgU+ zi+g)Vi!}M(Kl&%l(f(Keqkn(?t8Ysv-YZH;*0_PxTGLDx1WKxj(=4I`dLKW&Tz&F< zIp06nyFG2@XP4*Oiwi8~aXyLa6oV3`^Jx+qb00)Qh$%JwrjHz^lc|n*qZ=%2*-m1N z{-@RapX~lZ9p==ndDSqOo4FOWT#DwRs_JHHYF=uvm${od7(|f*$3!t0S+BaDOxx?% zj~_pI{LOEE`*8o}Y_`|7)0`i)ZMt>+=Fzp|`wt#iSzo_?aPOt#mtVTxO+;c?Og+Xp zZYB>O=1rf+VK5)zv5EW7Ru3;OhUKz>`DVSoJijR0ynZa;o-jle7H6ptw;f{3dwqL;axtz)7=}&WuJfW>Xpzk(cMRdM zS#QqIH=A`YjwU7{MsX|VW9@+(0182fC`w=s6r7w8-Pj5lh>6@w(ZMOU9WVE%T4Z%O zn1|RbX7g*)CdKU;Xn=30(}kp_m>bl{-Am4WG3rP_Mu0Gnn%A2Rvl5yw`lcwVr_U~8 zL#vBzJMCg8DaqbpcYL&bw0E@GjLe#vu4~(A6DDn%PNTDU0hKbCkLrW==7lZfQiw-5 zsflnAq8hj8Oh6OS1h7uWVC!}>VMoR|=qZ6Z%n$=&U{1swV$4CbSEtgn93VwK8Z%09 zE;W*5$d-+T0(AkrlPkNEXR}hw73N+{#}HZxiAkNbxWvraMZ4CiFSlRnjbGVAouW|f(#Ny$`;&GYDhES8h` zV$yVh1+IR1-fu5gdlUcSrc#y2RmbwR)UDMs?ZgY@*bxwF2m%pE$cfz8KbMBB*zx@t zAm+eAt>j4Z{oyHmFR|y$lGcCnRR#oF_xL}ZrgA~L@P6`I0Zr86Kr$!*J(UI&| zF&0 zU%Gv#O^c)b*?iuBF%EewW$)l%Z?Oz9&aYh?U%7ko;Nf|e+=S<3^Ml#p@nOwxVIg*4 zjq#I{&8N>6*;A0Msj#<_K%tbe=omO~a0sNbS&29VWiApqPI67X;%q$lNJd`DsD+ft zh?zno2_(rW!U8a9S`Ljjtm25`;_eF4s@ikQgk5e^O@SpasNQg>>6m6p41`D)-COtU zWy?ZD0(c&Cw#=MB=B|O9Vw9}#!AhTpEpc=;D}#1_<6GA+&o0)h^>jH4?4`~#9B~%2<;R~s zI5^syA00_c!@3`JjMO$wx^d(9LEyNhf%$ddtu@zvEOW;JbJ=Rw_m?Ao6R5m z?34SC?)Uxn>9fah>@DU^H;dCaT`Y+B?7`!3d_7F2shdpNZd>vvAABH>p3Rnf)27?I zb;GX1wtc_uFE{Jeu$GuY+vIVbhtf6e;%FXPFO)fk$=+i6^8T~O5B~H2%isL)y`TP# zfA4>DckkBv)06F)-MIbb1}T(N``ho|JD6R2^?1IVLk&gE2<}Y?!caE~p`FHNLB6(U?>@Z$ou4+L zefyoSm**?#bCdH%w;^)VwPjR}AvEFO_>iUzoN z(oO{wfA;=^i=*ai@4U8m82OWj7n|oC`u*!Pou|p{@b2B)*N*3q-U+E`6wgXt6;rnY z4_&)t(J0f4v+?<}iy&$LV1IvaUlpa#?w(Te0zST~j-hc4ENIE>2PuuPM zHeR|nKf2L}aGx=mO%}{gOFk!B<$RiRCUFTJNwZ!Jr>AS?b}>I#EcSA?elu>}iHVuq ztdyb(E18LeYh1b4ca&0WCQXPe)KvY21ny#EJSmRZqM0w7*|Hl3S`TU?7bS&s&Fmm0 zMz*r)+67!Bq!3#k`f;?)CU;#D#Ie_li%TGn`kafGJ?Li3QBW+{`g@^v^Y4Q zF4}G?L1;FM$Jb{^*Y-A>bs2{ky4iGku!xgcXqo^*X6s#jARWCF@f`Bl=dq78LIfco zv``ngcyNM?xEpd&31K!%F!e0Oc>pCHunEmXI04Ksu{`!8G+T5-h)Bj9Jd|8AxhXqS zcGFQICb0`qB$xvu012!LD#caD;wa?Xm?(tg5`tS%t>w6(SVkci1Oke=nu?nQ4it-- z!N`V6%PY!KOL~~8k9i!&vCnC;ckAoF_E!%N4xc>w#3{DZY1_0Z%|o{gP3L+1>Gyv7 zgP(qD=!Xy@*IH@EWvCSfQfioZ95;FMcy<10efsb$1Oik`9@hkGx^6mYLx?Q=B5m;V z$H7kCEvL_)_4dtsv^c)`w)@t_q);|3WaLm-(9%c~o32MbySRMt=%M#pvNvwNa@(=V zs>{R4VxE5P=k6?~?Q%K)?SK6H>+{EGw#-b0$eE-e5L+-RM(R)@WltU@HQg*OChe^0 zCN+>?$lJVCAE;zS9@MB1)ZGb@sNO#0UOX4gLBe7_Z`&9WLp-XaNyuuR!)!VYiOoDF z=HSGz><>OV`Tifg?|S){|LP5@L)|Z;yTD{uF#}hq#Ok(j+p!fZ^q^+tFqzTLB~cXu zkX=RX)#G1TAWZNSQ>V?=`q3->0|a4WcVvP?owB%2Dz=lz80tV3El3qE)Uah|IPuj7 zKF~&hBu5FtL#VMr`a(U=q~#?@Y$z z>SV?>N7f-wN7$u4zSwoUG1O}y%8L+qVn{&TZ2M0iKbg$B{kwst}7^-^#HwiMtu9 zx5;-M5r-MTRgwa=DyKkJD+VTlFp6ER3G~G|B$#N@q#3}Tp@Dge9(7d#mU5j$o+Xhqwt1^;8$UVrr7Z?4wewOH)$EcLmB&IjbtmAjst1t;qY*I=iYugZasyHPYsi{srn>h3K0%9 z9ABHi{L0Pm{K3PIKYs7$zw+jd;}|Cdha_1ZPR@PE+lzFT}p+0tp(j| ze*G?u+4Dd&*lH|imkRQlbOCl|4jMvqae_X4CUUT&s)_zB@E81FM)BGG zpMpGC$;!?s=0hP5DJ05cXhH~4v#mC(!SeocukDgd7Ua;i`*{B3$ulFncH^)_Y}eb_ z!Az&~ei-^bH&bC|s`<46X_9mtPtH!Jvfs|4_M>@$p%J-#{o4JHTMSm4Lq-8ipdo}v zX1O0H^U2=PKHPus2jBVN{SQVhi^Y8Z+QIS7YX^r1L>R{*=W(-LJ$~=g^G9ckZqn`T z#~7KQ=jTs8eRTfe!^8c<`Eog3ET(&l+1aPW#J#Ia^GY(}Bxk(aA_` zjA#8f|J&dCt^expbz}3|{>yWp&=?}m(sGfGZdlu0x>!zrwteZw(Vo2d(@*aIH~-ha zb3wlM_LpA%#h;6l!}jKJc=+tQ|M)xK{L%OR%zyajfAv53^L!97Lf~v5L!`#w#LSNV zqxJjW`^m}Ap3*uW-+T4?;kDt}d3knvP{#YG52n*5!27;$oA}ZzclYlcBWNt!z5U7j z?#+C@`rtc1#K_lf-`P7{u6e68h9*&z0+=KIsXO9NqJDv(^j_Y`fwy zWFj$!D9*b$Yb~m7!N^s|Qp`+3P=kvY2?5!tAShg2y?}*Sh{z>{*oNtHk-CY3%zZ3& zv087(XG8JXY!V`os6)@zm)qX5rQ%^QyVz_@FqyWg$AgFG>&xelpIkhDeqL1Dwk0Q3 zE~Z7X%@krV3IKAkei(|X1cP%icy`Y0BE$q136Y6aRZR&f!sKpR^Q?$S!B&)@wh5TD zfv8_^&+{-6sGCi%9p5^>aqrfxSKG-OxrB@J=KOU1!TXQ9u)TH^rqgWx?8%c)r_1Zd z(=cp?RX=VvTE=1p?xmSbLx`8_wJHt{j%Kr2iYWw0;$nTtgQ_v{IJ%co#*rCPIF?}K z(vVs1b6+fjf|IHdxe^fvZo3AI>7+@GfV^nw$IW`B+rihR%r~pHYXc%UZB~6xLmtPf zo*DXaeYq70S^f0%?DTXn3o*v&v{faoc(5M7rW1BzEyb;5vjSHhYB(B6U@;I# z;ASpFE>X>hR57Ts=jahg6ti1KcBmSx>|EiBAWEdJuGuMqgHTYIYUSk7Pr)h0`Fws;HD@2aE@d!y2?eQ} zrPw9*=5Vp@H)osmPkwyAC~n@lX?vtjX1Y{FaS!V0py>X z(^d1|=g8$mZdYyrgTfr9PW31?ZkGw-9?YZfkk_i3$1&#-=DSx)RjT2}qz?Bg6(Pm0 zQ9=e~DzyhvtpIqz>aB-$gB2qo4@|a$AJ(xeVvt<){CxHB(bKj~UDIfdmo%&SndD0D zZbnY^>0L1uRkcCYIRUSF#NySt;zV34AFg#3K^y`SccI;^ljyVL6;mbxgLX1-IiXoV{nlR^zJWm7jZbuzfp4iD+OECw@kICiYM zog8i#2D7^oeJ4u5?zFp;I;;BVUKAi_sSWU}Fp)2APD|h`h?Q1O43iVcoQj1I1~V-> zX}aP#+4d*ncBPg<#KLeh&tA+~fwkL{%T-JQ;*twRYeQPQ?(8%5L#vkoQ3`RACRFTv zv*n4TMko*54|}lE%Dbvix29Jgb;T--WZPA8Ei!i14pCNZb&CB~3i ze&w|z-4t>1Qq*iY+ixvgLYd<7aM8@ynRBFxdeq(mX9-!-jHuhOZymXKv2y3m@#_5L zcfa#bo;>)`%dZ^)9YEcrxpn(^U_3eRKfHgxyL@3t)k{sS`;|@USK?cW=&azfv?_JbM->cOlXki!ex- zIUq&mz{Fevb8$6OLKHI_H`zw#B@Xv6otSOSJ+P4#A_p-_0rkXW6oA$}yDLG2Uv%1P z0*w;|GiC~sy1ZSLF>{Kko3p!}oN^&aq*;AKWW}|>O_;10h(;Kb6D$v-W~icuKB*Q| zDHF2=HY z94v3VbZc>aZ!uYPDfQ#9S+7RR!+JBWdMZ8)tM$~o`D8?HC*93^ugt;##6Ua0?CJZT zTs(TZetzmPV%E0D%Y);iy~RQ71R>AnD0|r<9>FoL`|awJvpBjA+n;^!-P7UxFdkgr zJ8n`l4z9wdn^oHDrf9i4plrzh~^J9qCL?EmzW_l}qC*Z$0}9DnsKjDEcJ z#lel2?tk*b_rCwb|KU5s(7*KauiSj??&N4e1oR+4vJb2Ecs73e{g3be@WUI+Yj?i# z@?xEK|=w3?U*SBXS`yX^7T#2;$qljTur*mTeq;K0mm3 z@0F%aH*Orh{_-179y~1lHc8&!4@bvSNqM!|PUhDR_K&ld&9K!hdMlZ79>%umx^A)= z@=)?@K4%e$jk+)Qr+4pM*JA8oVkUA`%_9iR%*;)j+BTV%F^^@e57$@`-dw$}lu4}Z zVmF(Tr0q~{Uf*nbb%YSR)V7l@rLYGt)dYQQe{uK5wLES_tnETOZM$|tNV%{>Qrk{v zlS$W3C#g#*2!C<8&8mKO-Y?EKmlxaB*>*DDq{*b~+WBH~7VF7?(Boc*5NJU7UY^XzBV@7eyB$k2{YqX4}mLn$}2gHHUF-n0! zO*N}UvqByNEx08!rva)~RClN(cc6d*A&OIA$_hBx1CgU~WHlo%uB;4@hzOwo#SK;f zI0~E*DG-sHXUiU0Neom6GKx~nt*C?5V_*ub)^A5G05+1OowP*P&HA#olFc!QF+@mw zy0|^tyUzTBD@FD{mst5CrjDiSqM50C1;E#OK~+udpRqvy^T%L6D*N$Nt^wNVbcsXAY*PR~!DeE8D`w((o9-2k_gh{$JMx^s8&SEgS- zUM_$4clLhr?z=gUNC+YUaDgH*ifhSA9txR|voLWC6heiy298Z=w^1ZeafS<68dA6w z5V;bNt*~Q%d35v6?QY(JTuTM%(R7m9Hky0xOWrErOroQ0*V|zzi-XCRzw!EPX28iV zuj7wY1a$1omRFQSKN)roodA^QkM-UcL||sLX%3r zRlkaL5F%$MLKDz3Qgs;H)uRaRW};RD9A3=hsyS-VkOo6RbF9&-dD?kAV%Ah2Y0!IOp)ih4i7v2lF z8kC?rG>7}uC-qs|0Or+LvYXF4frNrMe~vw0<4&&#rsP&<2$q53JQT|6j@lr(V!wQ$ zDsV^9tfsIkSGekG)Lc*IK(xuZhpxuqLQ7@>u`1XR>K#)*ZswJiA3uD6<@_L}0Hh|S zn4Ga5b5VC9tt%T70ZoY0wkiFXi8iJlld!A`ZA$e!`|$P;Nd49 zzeC42>1gJWASs2Y>}1xT>rkw?AVSE&{dOBfmivbm%0%^Wvh0qxVYa2vahRAThQWu} z9Dt^-qN<27Kp%ec$*gT&x_k8DkL8mGAHKbQr`x-01Q>~nZT0z+r|Zqe{0I!}PqCOD zy?$+ntw61dt!6IB&Ar24|9QFpz`lLv>mou;5JuSMYO8aD26Bd*W)XnHMH}N+-)z3| zjq&MIJ(+RI`O{DI;(l>6f~4RhB1y*~ff$rRiZO{Zn~9Iiicsj<5|hUB7A71zNB~EG z-SYPGsS!;Nt}}^xjaLFt2)nMiX))8lfv7230yQBjT91LLN$}hZP1y`eqlAXYy{MIJ zC6_#URx-rMHfAqHOYZy3lwy#vSjidgt2 z9d&(5DddGz$+`Ae_9`se1;Ten_6+M7Ro^6|Tm zK0JH;bQY)0M1J&xZ~w#p`tM#lxbf0!w_?I}bBVU3`IKe>4E~&T@lU`01oao{;3dYG zB2n96{{Q7gP&Xs;FYs5v4{zQ4^3VVBzcL2(O2!4f`Xxa7$12nE7iQOg6J;0uYy9QE z{GT*`{oc*j@7?^jbKTrLeEsLY^7=nNkH;?i{KY36{&n8@zv<`oum5FN2?YO|AEjUY zNM#e%9}(d%Xw&Gh)%N1qv*!mV2aCOn$y_EgX;O+&_O4H^U*uuHdb??2U>1W_4Rg^_ zw7{H-tD56#qFUz|96}Hw3|@+mX0JSVrl35@AvaD09b`-p8-p^FIO{O>8}@*v6n4N} zdpMEoxgi?}1?Dg^(=w=MMi|veO9%qth{B+1AuSp?NOFkv>P1J+5h5m$DHACXOtnA* zm?&uG%BTX98=I>EA+m@QQE;XlRf}4tLV`eIim`0nm3!N+V^LDe1Q%EmqPFD_h|}{2 zKRtQ;scK<~|C4K!s-m9s>g4)Yo^dm)y$NQi?I(9{+Q!zGPw#&_EslG4?lc3bHP}GBZ84EXqX*6rxVllH~1or}SaPsIdCM7mw66avr zXU%TqXmR+JFMZ{!zxd@FFYh-gT5*mPB84bs7`J6JjCm}Rc?u$@&(`BOEcUuN?cf&mSM3ZCk=LP~7a)`C?n&hp zUmV>V_h1e)7#vJQrG^1j!2(?!^y*Dq{Zpztq)~+v@a{oC*zNHF2c)`+%v3=xwfiEp z3z?8W!D-WPK7RN#hIp{IU~^SB)Tl{!16;J$3Tm8P+;(w@@L*o5cffZ9NjErqwSfdj zsH$^3F#}%J^uU z9Uq9V%SL4~Ns`9xg-9pO5rmz@m;#{*xHx|pv1}y5hTHe<%@#`l3W8yM(trBi{YOup zUw`TL!L{oi0?}t10+%ax3aiweTf_4D^}TPree#nZ;1pyg1`0Bg5Row#AOVRaf{}}1 zx{N}M7xaai?8?<{tPp`jlmsbG0tzI-hfEmY#bC}# zR=jF=nAGx^```k1VNxrWwSs8t1JG1=Ev>9t%v9m^*$g6LquQ>l-&)F8jMd29Xy@H> zxHEwqs%~okOsD>jf2;R-sp$>_fs7=?5Mo2Z4STViOB0*v z;Y5pN)zrj(+h0Cg18a&r4E=VqJ~}>{&1dRV3K^+o4Gj-{pMr%+hgM`7BbROIXVGI9 zT@4WcQKB%7(r~@@0wcSI7%BSM^RplQ_}zz39>4z9>uF6@gSiKO<51C(^E4|+&Iy8Gd$NPVR@&yd#!o$czE=5wwxVJmk-WAeEQy}AAR!V zWIk#8)=$3sd*A=oQ>?r3`R{)82e-@H*I&Oq z-A0TpvVj=aoAmX&_x{RVTwwF*qkP)8E5ms{Jy~y_yf+THAw2x(|n|p6uYrZu7nfAZ+U;aN&Klq?uU7Vjj-=3dS z$zZzB?YDpY2j|aD{Ny&KRl$A`&LqnRBgf%?fM;%$3X>PDD(spbXL~1a)jdkxZ)5AGt|X@?9fvnb0fPd;0r!jCJ;PTWDZE->Q%>T zHACy_d04BTUHll+RVX|&1M1`GRb~SCX7v&`ADj$v5DeT${ zpFOd@7)Cz%DzDS&^Yf?s7yFahqMa?rrYl`XUDxa%O*iWjP7#Uu#kxsk=6NhW8XO+T zz@%<&iX6Z}Vvvr-lG%vta4WmFEFrO~Wmrg2+6e2zO1%K2dFb6i5?NwLj^KSU01=WX z3Av>b;L;Zxt!y%kV3aLmByx|$ppYmLJ2N=Af^)REEi}3sW8@G>J%9?)2oyMJNg)&% ziUqJxVx}T+Lm;b@b_k*&vj-zp?>!T8l2F-qZk|26c~NC1V$NV!kCe6aAN=^6j~={7 z_%}<&`k(A1)#ie*)aeZ%TmgRI)K14?_3VS+;V_*ay%L#=dqEL+WD-G>!erLX_fp$P zSyMmSnEmA8qYvMI1Y)s9j+R6AnbVTcr1aL8j_3QodHwpe@BQApkDoq;nS|I94}=_@ z366+hW+^#a zN;-lAkzgEjSeMI-ejF`z(zFSRQn1~ErD!3F-n3&1U&x)|@Zzpl7=bHMy4%iwkDZpD z$hoe~PCI+2yH}^V?M94_|T8428(WtNQe)4yx1sz zc6mBr<^|9lUvd}RS-UYtr0j6;t}8(Xs5!e<9G0;O!$HiHL<-xplQSle+hQ>npm-fO zx+yBd(BWndSKd9=h~R*+8LT!AcI?J#l3;?=vp|0JI46JMH+x~_1{BWh03^(k)h=^B%lXX8 z21xz**_eW=-N&O4GilKgP>wlBiQ*vua8-5E>fs@Bawj%`qhx4bhOTKiaVfgmtWK?e zyjhJvh8G_bk(-Y>BQiLsv#b61llvb66W~d&PcAkuXQCVdmNf1Ai&BPey2rB_WP+8C z7pLT zN8kI_U-Y8@aO%9J`v44b^ln_2^2jXgvUWey1fN=9SBSjvZx1g4^GapT^=5@Ke~MM(RliFx_=`y9VD@&9e=|;FmVhlfU+|K z7>1z?Lm)1jjfe_|K!##aS2Ib0Jg6#QO*5rp+s!32Q)JVTs-dsye$;FJ?T(06w3J<& zzzn4nH82Gt&RWda!8JWah%y1L=ALsNbJk*Ca6TpdiytK9YMM(fC9_N77?L214qUvH ztn14SgA+G!Qq@R?CP5IRM3H8aF!;9bdmAkVGuv!?g{3AT22%&A8kos)0U1xC2Ogo* zC@h3P4yFJj-&oFM-Vz$1z}YB*#8+n*pWOcl@L&41Zyen_qF$eWdUA1jVYx6k5QPvE zMFx*r*8M2c*u*sLW_=mlNl3bO;^M=3-|fv_`|?}&Ib1$?I_;K+v$Tr3XWe)G$( z%5d7BZida-$?55n#}|*D?JwpWfC=4yeE+xp;ot8z>!ZWveA(Q-_v+qqar@345PkEX ze*667;kSPOA5Ukq^JkAyhF4#H>F(`Y_uqeiZ{FQ}AKm%bmio6UONuP(>UdK`yg+gr)C?gx?it_6YGfUryskU%0u zp+FKF3KN!wLkNk%T#;W@6-~7shN@+!3?AJ!Iu0cl9c!XE5lhYaqFV4*#VR5=5l5z4 z2LrBd#WY{Vb_p|s#5s{f3W1nwy1JGc2_vC{C67l7Pqwyh~uOtQ;Y5(b1tVz5eoaZ}0T!2cP`-hmnyIi9pMk%K**8 z(2spza&~j5FgGE!DMj`XR0v!QYIS2&H;Y^!v?+BICmuTCAVGv$awOS#UxkSUmH)j94Rck6DFG}D;hJeiEFzI55~_iB zM+ArMgu|{@bK0ug84QWSL292zBoT=#Ta93&9g5twc2$@_EW$BJ6GI9qO+quJ)W&AQ zp$RFOmM>0s#d$wlPE*4{Xu030&ZPBmW8xBojLe*hSAe`ASOUX% z$OE84A%!S0NI)QHY-k*b%2>*vMOYi*D6|C?OKsDH;7KuTF4fEd&ts2MFmc*r4xrIZ zeax24ghL2CnwV2A*;U~>z``hjO=ZA9BvZtC#styGau|x0Vi1F~0hzLsY2C~jP|uJ9 z;v~WxB#?lL?s#uCG@_zI45glPtut()Kv%M4A_PZKQ+naRFDH+G^61kajQ!4~h=%E~7?V zjBPUvZO$#Zo9duya6IYyaCz3BUku%xV)_F0uC_~L z*o}_0TGXz_$S=yKI=Fh#M8p+bfCO-&AobCp&>Ck@N9#LXISZOJn=6~e01@NCOQli? zs{TAMv+VTmFI4b^9cS{7Xy-ofOW5_5clLt1-jMAyob~+)T!9RXaNS7@YEOhRz)lPb z>OznzRO9ALh1M<&& zFHTT6!^mo@cgH;-Vxr2&s}Gy{^gyVr`cf0745fnPT#KtZD#>`a&I3-aJMYELz2aB4 zoBEP>&jef%LThsca5BIcJBbF9Np()Hq*PXBSq% zmVITqb&LSu5zInFP_@Cp%)(rE7z8nvk#7B=$zI@v6wQ~)`G8M^rSfd!2 z(IndrxeSwOm%52lbVFxxkLEx6?hn(fy?gj3aUM3$rn5qbVQGZl7V62-f$Pr>BFJtT{=DEMpl$ zc9E2W7F8{-<^Ze|j$z|{$*X2x_0-v0F6Z+468_g?=>w|5f=6@mS)B_BkWF=`c`Cy=41>b_i_^J%elkG+g1@Rb*rrJ+ zq`Bnc9Aq+|Ys|xX)I3`D(Z)RFVLMuOuDg5@77ol^GilnkjV;6g8jG&`&1!ww%x3Mp zr5MRAgy?V|J;oTO?Qr%y4`bO5L0FlXF^u`?#TiYS_Hc>@7(fkT3@}_?o;HbIdi%}k zVsZN6lhyMJQr-ka}FBVBAS3(9obF{6wHW{cy! z_5JzB&)@B4K8bPCwN7Hi%cz45gWzaBx%s7gv5DAb#6~Iq>R2Twy zX>FCyKRs(TP3O&><5wtB(Q&@ zY}JVT=5PFZH<<_0C!c;)5RdNMU3}?QyO=--b@~0%=E9#;{Q`C}wBno<tuDva z<#w~~SF19NVYiv!-R9DE8U~cXRKY|k#OWk<6Etv%nV3ViOvC{uu0*I2$L7fHWAQD^ zC~*W;u&rMNW>`wX0D0^FejFlr6B^7lPj4P%{Gqi1w1P+ndNXP*ejzJ`_NX>3`H#IFK*Qmk}gM`2oz#<_bHjtJm67$vkIKvchuKvSP zOidL|&LL1rkN^=7I|qQYu-3U@l@EK>(Q+kGi!jG1jo752c7PT(ttVP)#NZcoSBO&D zdO6?p`|DwSFIi(n)N)G!aQ| zp5d94DH4RKXUoH&IdB(+QWWF>HEANviG8qDAvJ@Vn&r}u1kI$*D4TI}zHaBjsWq?Q zI~t0c4MEAB$H;_Mm}9NK1QK{BqajlmMmW(JjKM+RU}lOiDj;ScM36`bZ7WQqrSAVs zRaJ>81mtR?c92_y7nb7AML8ren`PBq`n(nO;Ow}(JpcG7zrVeF7?bRh0AT=^tg53s zSOT*IkpM3JuZ-4sHPd4inh+_;y z6or$Wz&4IO(*g@FGFZ7>Unr60lDG5N235U0-(Id(qm3+letv%bql=T%vv+>(jaOg4 z%X*4ajTsLwCr{^qH&m=pi`)4~={1Ib>SE>CKX$`y5 z*4$mIBVTD(E+EwWVUX2K&7A|ljOq-Z$anr++9gcd&a<=oN13Qb8SEGo^$KQqfU^^^ zIbYTCyS_Lnyh0FaV}vWAqjngG!LS%soBsZzXWM?faqaM6f00sDg=t;=oQWfmF{wJ- zg#jjGt|c1-;>2Eq^iVtHHDQUIVD8n)vXkW1z5)UDk^#m<_0{aeBW#2M1IS5sFccRB}0 zO++=VshTM8jpmG?z_#SeJS2}9p*V`$fTCtmDN@*?q=u8osCg{Ck|N1PzkYOiwsOw| z78x-u zC&x$W#*#YT^+X9W>*ULC^zS`g+fRukXCjK-q$73Fk<4}I!MUNl-%;yhMmf53t7|84 z7{eTb2(IE0bt6GbX+kmHymMn1zR7IR;Ola9Hl8Aw&x&D_mt?0eQq4mAgl@nK+1O7$tm><=;PRFQzLC7Ak=yNDvaQ=`u@QAFQk#yZP3R&beB&(f)=T&Hj`rawo+UEO*U!(}`Q+gGaYO0+!PApZ9uM1b*3H_c zBME^*nlx@Gt8%(MZD!rk-nDVMy?F4fUvHN;j=Dxp&!4+_(>6@b4PioHe|GY`Ke@bn zbZZy}=FrWi?|=BQxBT{B{KZ$l@iu3Adip$a(tg-#-_FC`>v!+IdH1z1z47n-*+2ic z{^sBMyTA3{{qt)Wb69lUfB#?qzy9O@{eS!){D*&|dwbg5o#NCdZMXV#~z^lD^zdTsgYwJ%R@?_XS;-+t>AWVBJf^yRl-zkd9s|Jk40d;1>kb%5g2Pd@y~ zPu~5>yH9`isDD1}9Ugq;8^3h@_Vw@l(|>yU^yIDAzcjzL|K#bZq%@zjA3l7tq4G<= z{5mhDwOw74o<;t&sQ(k$UvP3~gTSJ2lGvrJZM4xmyEamFkxUGxnovzw(BmSi1wzs_ z&3w^L_9V>|ldR&R93d=FwqgVoSNPz%H5-LWXsnqSv+KxhOg-BuK}T2-AcT-Y3Pj`t zXC{u!i8<2Fwm?)sMHOr+#Ke&)h{Wg|Tts4E31F!j#kwbACnm6)X&y%@nc$g;Lr4-D z=9bVhcOW4^y^u%PV5Y1UJDzud^Q-;qRl+t{m;zBCX5kQk=%8Z7Do`E{Hz99?Qeq;5 zkbpf%pj4#wmNi=`YR*I!gH=u>0B`^k%<@30MMRpe?WW5(T}Zo7Zp{-T)vk-cqp?-X zgR7!gFd`?Rm^g%JWujXTK_lrn4(0{K9)u+cNpKP{v2X}1Q6vDQs^(d>6nKU?JO++2 zGDniYvEk5xTarW+9B!J;6r@7VFt@C^&*R8i=>v^~2AnuV;$2F#1W|{oyA{Wk-qv=) z6%vv_oC1eHA#e;5BMUS87oVzBM#p-zaZnrbX0^FIzwG9mnpxn`v}w7=sR@0rWz-&2 zvJQb$6AYGhFmob_F$n|`3`T0|UNmPf%v=w1kf(TjnT6PK(qM6^syA~A3fAJuF`7$f_Tsi;{j zP-00zC>je&&#p==Av94!jInElW!UuYMF^Ims#1yeu8v%lCV`m11u%0q1G9S#TBfV` zyCycUFV9X3L3ZW|suj(P-vKa_*^9rd z-9K%+_Qu_JX2UjORr*KRM%VEw35Yvz;Y zD?fibb>Ta|Kl%Q*esr-qHQOCd+F7i%l+xad$(_1o6RO1WHi$qG1JI^V(v~!m>FVJYAoh1 zzM|epM9x3}GZBMoKf@Gc#udLnS6U6<$l-0hYi)V6Mg8h&V9RL4@Ky zxYyfaaLw7cVPf8D9Fo6K;j?pPhCp|N6;CW( z3KTfSxY}&B^ox`hOkVo+cHBN+c^e49Cxgc(#iI~nUU^xa;bgOU@YJ_N$0HKmC+0AnpqYm|ulV(!oxJzxGM7I4Bv8}Fm_y!Z$tw$XI8Xag z>0;x$W*I1DxQ{kgIVN_&w?qhrCi@KSjT^7u+g_HuW%sU>>T`03shMfXd0^7O1#r#g zHpWP!V(5z?#-{PXO0SkRkE0M}we5PHj8TfJjzxV`9ZKJi;4qFkmr~SAu6qiMs#&eL z7q{Y8!6r&n45h+stM$yu;KkGpOo0h83JaCK$G-*o9(}&Q@R@#^oXnifnS>Z#U}LHK zcJV+02#_LXJ8#}_*$fEt#AM0um1Aa-ue2Cn=dcFe!Y2lQ7+5)d~^2bX(>Z9 zOKB2EAMWC~kkHh*>q9DqZznke# z>5hM5`wPl2BV%MS6v{5E)m`tdhnsn-oF+1;Q zOfWMpu&twa-B{U}kCKFwNXjA^RJ?FZTt>L<2tSe_i2*hucz^_BaWZBSW>`&hBNG_v zCXNEb>jXo{cYo%Ze{Q?IW#uwdenNJLsj;vJF%lzTM5DkI2{5W5Uw~!x;%06IRnQ5> zPEK1lqEPaxv@qC}N)3InY^v%2*8&UfAq3%2!@iw8hQO8#F33b~3TG#ACsHDFFhN*A zY$6Vq7-Kt4-7>UG#Hk{hM<6kXT+Iro&PxWCkF?U z2t@b9)&v$O1=I!RP%q|J0fXjVbH1>@ip!2B6ejqnAHqzE2~1d^=`MeE37 zb#XDfOq1DE8fK<$N}LF>MqQ)$%M&AE1TR)F%AqbHfqt4!6Xw( zB1LW6m$6K`7~9r$G}Gc{(-3UW`*HM3&07o`36Vvp^WF*NBAA#YGrM9NpQa^<^^-TN2w_ zTt9r}cyaXF{?WVV&p(3eV(&(G@N=gdD(ekNWT8?<^FqY}rBcT2uqF=XM0w1*9ZElL zH$}5B7uZLSADo@7&n_?D`TCb{-@8^oYRX8i zc(xu{EOlIb)WL+p`D(Qt%A{!|qM3xnvMXj|KYnqV*J4(7L4vyq`30ND{spj%otxhb z!NKmqy$<=cZasiq|EUV#^>Y~p42nX9kcpkTmSdzc?z{(ec?R>Yq47cz@VV%aTDQU- zRwv^QBd!L9iWa(hHt-HxfSS!p4uW%q*6ctDyO}!gAP*Jf=ZdRr1cEsgfNJnWWlYr6 zM%0c6UBL|hsCW?7Y_juisJnm(Mo!2s#Tyb2u@pPMSZ&t*FyuS8uPqm|6r(Yl_)rR4 zK`{`yF~Tm-k*c_$?&-;@yDdg;WLM#iT83?3dTk`kn&|Q(KXh09*OrQc0vv9N9X^ws zs)|I2!c|}glQTKfiwGMq+|0bF71L6)I-Ou_S1uOk7q$r4l>|iLO5`3Yo$cS5(J83IzHBzA~c#sX}`N?8I7=L)C;lNXZ36#LU>0 zpIpgNmFfv$F?UiY1@f3lL5a5|JIIKP-4V%!s%OR21zD*d1_gN;L$D@_BaDR|!AZ@O z5mN}QP>KM-JR7tTp2sGUS!RW3KVrRB_yrOz_qdC}JI^Ke7x~F)|MX%KrpQCzuc(R4 zNdv{n;>NYtKYIGp$KOBMyMC=XUTBQ&oQKhMO)gGZ$FLpk;O?C-?;U;o-uwOe$=RyE ze01WmIXXBRHp3^MJ_wHM`}0KBueZ+T63E#(5R1c#8qAErUPP=6eZN|vltHsG4>XQ8 zP{lk;Du95@eG`Fu$MlPD(JMEMFNUEnCL&TylXcTOciVffKK{u=X38axc{AyzA=)@z zGFBb@Aliibb=g{8Z?`9kwR;-#K#*FmS0EG^>Y_f4lUXlWuLRonz_1U>#JfAEMw`nL(bV@qvu?P3`15M$6SgTMs+JiwYXa_ z6nB(ThMcoey=lxSn-@1Dabj~G%6I%1Z?C*Yy0VcMm^wQN z3ldNVksHgK!79p?+{r0$5D86eQcF(AuqxRKM1t&PD5I(t%TS;gT-r%;RVxfH7z=Hw z?b@67?rfi4Jbd?loOZKrO3nw913Dx)FeqniE;eP%i~U1U==r4=Zzj{(B6$il9gTQ1tgY~644V%;uUW-kO~k4!~JG~uSUYw?Z^YwS${_=y< zNBy{2ZC2Z%-}b|H=r`;2`LmO!A3pl%dq4cc-~Pv+e&@UIzW(K(`{iG|_w!#lx^rWG zxR@PuY1y2wF5F9;B$hNGgf4EWJpAaRAOF4Y|IR=92jBd?-+uP!@zLSYy_a5kfBR(e z-QSYHi{)Z}HgAjdA3vVV_HX~(t=Dee+pag?`X}H0(T{$(*DUVddTBbDb@TaB%g~pc zH8m+MmtI|zHRy+!_)i-QfAabZRFk13fXvKlRvQZoQ;l*IraC{rLMXbsx~i!ubkxj& zC`!|W)U+HLrQk3~tyIO`U|TD_msKe%&ucGRm&{4Pl^Z_->datbW@BM-KuMGcP6DuV zV2Q*G0&xH_K?zLNd`U_KmOvbdBXIyHa0Cb902W7m{Z17I0SJ;^q*C6}C4U3bpUx&dRMq&3&=asRS@JiQ!CA z;2;RAgc3*%aAJl;78WrEAVk3_8PZkEJ(xvc>c;MXvjma=iQq^aLE%j}XV0PSz+K*~$dwYr(%@^gm3RV?S#cu5R*HvasZ9OmqKw-R+M*~l z79En23e2r&U^w|`76l%JnOImdJf%WRWFXf!0wJ3l09GyPg((nX!!%axhAW##5m!~ON$}ne7wgNXZbl^IIBF@(a(w&V+du!C zU;f%(Otae{ertNYC|{gBTdg*f#1u@fR!osnvz#7MNZa*#*j}oZ9mt>H&UwhsPacQ; zK28$gLtmaey?A~q*Oo^wz4e=dUj#IJc<|ImT~UA|8(6cs_U^fGET!LUU`%X*p-Mx} z*+(Y^IR&4Tw0X99^atNLUu{pnHhlfoo!ey|U}Y?rbn&HE_PgmXbhGxi|H1El{PFvm z8frog%%f60Zx!apoFr6fx4VwHEGGxQ`DcFh-~V6#=6o+b_~=4Soy-wJh&87ia1omC zHG7A*-LbkHFFssNy2-`q=4U^6u(&q6_w|G6Qo1%6>E*?Cb8&fn-|+=Z4cwuI;$AZq zYU%+Q_@6hg)S>RK%6BywoXyQV0Ks=@X-cS}iL~RbJJ}9n$Lt^BUB|$ku(Lc|ML*W$#!9fP z;`_RVs{R6ovw?R_iyfZ!>ceo5zwnJzg@^4r7gZLqqdB-+(dsBugE>1Q@jNAQtoq@j zhYwf%=Ek+7{r$aW)`m$4Q8b$|tO~va1aYZ}82o~#VsJOLZ2efuST?JEb=jYtuH5a` zwf!zE>S>V|>H=KJQ4HpFBzyH{Md->iNnS%Fxb`w?OTTtsP)!nAoAYc|DH~p!Ej66? zbKncx@fM7&<|R~mF`V3;j4Hm#f#4vAI(wy2>_C?8q}hsjR#zpez!%>|4-wH9X9IS) zdcD@1u0n1U$dz40OwR0pUUi*z*%>>rcrj(jBsAHqc6D-2hK zD!~vqqzt;;Y}m#&8K+4xT4x)9K-LO1B!r-3xtQt*8pRP4XUciZ9U#r50GsWG-Nx7u zIcxM_lV!(B=ci}nCQTgGbu*T6ML?hcfTqjq-B;E)d-{{p18av?OE^b(PRMPXlwll| zj8beC-K3i>W(Dh2f4<(VM@UxH?e>EY-@SSFmFq`spv}-^^`@IP9^AVT8uaVajSNsRXJiL#j-lZ}I~!y>7oKzl z)EC`|p6$umvZb37=`c_k-B7$3Wg9Q8=bSSjVz8pBCL$(LNr)($4p1qG4p`s2FQLL35>vC$f>M~=yfoAhNzUF6#nj*mE&p%!{_I(oEIseT-eIkk z`Hg!z^Qlww&@+HWccak&A(4VbQnt*Xq^Lz4; zy|^hL5izP3M^{y=#GV?^Qt9Om4$PdGkVH_CIG}@;Vn}K(YVL@{)rP|%FsisXjJN7D z(?|c6RtcARuy8O+HMol;DR*#VeYz!apJq;@fx zHZ3^J9}kps-y<;CfFx86x9ljUr_x7?jwbmyztt%Eda z`>taQ6u=wg3B@)R?UCrlt(&**zECc9*RS7r`zLSz`JaDduL;w;`;gp+4Z5gGpcrFB zgUAg|d9z#fXM+xBcHXx)=l5Q?_rCu1pZwvs-un8F z?!Ef*bFaSi$}6uwfBU7y;^<(xn55QB1`#d8`J;zFef<76fAG!!@*n=+-hc4Zd0>U~HFGa-N4cIX-ApnnZMF0mH92{W^mR!to*1XeUW5c-*YxGR1NCa$xQ-}y4Xo~KH zn5t(K**O?-Fpm{&5I7<;03n1rq(%(rg`H7_5V$tI7)F8>RM!BblRKd42vIOcCxpN_ z1!5#}P_P;tq2N8$;6|^qT5&I689loVHADO|Ubq^?+!4K|P$3ycFh)Q}H!W_3nV2I0 zOV(jGOu~db2CL9YM>mG(5CucccSppUXjG974qmiKuCh{Z!Z`C~o)EXj4cchW05rFv zwv}=s!?_KeYFfl$S(S2^aSMg)x9a6tELR@+QRHh^qkXtB~U%(T|70AMxJ$+hw$ z0RYrM02xUU9mt%$lyAmxF?~_ zmP;NGF@&Jvr8rIm#dI)_L@`AM1TU-*6DmnYYK+4G5XGnJA;o~fL@S9cL~5dCM+hlSWzhfIC0|;RR=W@&F+pN00OZmg{+p*2`PNM4h2zX zg2gPHftFH;0#kVY#n(RjmA`xE<*#I#tXg`N9Gq^|H5mZ{_^tL z?UP3zeD_a&=gFfF42g&koEY70yV=U1Y07nI4rY1CkB{|y9h)XHHA9x&ZWq{NTp*%~ zkT`RzPU>1@@S+$&i-93D2mr`P5k0#bA|kh8D7zoN^_}C>lVASDUw!?J7qhlqp=#wi zx;Fid-~9Yy(fsc3;QQ}?FsyeWM4(EpaRAFw5STa#gAAF(mT~&p>!1GOmp^^u_H4Hu zfLwaj-a`W(9LQqy+TW>hrT?0c>exd zE70!NSF7gZU;pII9L*}e;F9SG4=E zB|Q2kfJF5Verfp#J~9l|-5h8HGG6B9`e@}LfC?x^7(?aF$2KyIKfQ)_f&mbagCh`M zHNb9I(;;fcgd;gPV5rQ?7y*2phleL;C!6lzRfKRUnQ$AQ(seF_?lw9#MmngCG6gjU zbyN_6K|vU5m_!jP1|pz3N}GKAAaJy)JUbm|4Lz!XTma6fh=okuq&SMUKnRS6)eSPH zh9H`&12Q5Bu(^Rp1R~1dD5W4pus{~vT*$H+xHhhAW~|BuZD;B(LlMr@s~HA#Nx)M8 zLR8mXkpaAAYKTpB(4qmFKxDQW`ki=z5YPh&U@w+8yKFSwo}E8_`eDwh zC+GY7hY+Iy8&0(ktFvQ&dv#jQrguYo)DF7Yg@eFT0s=~9Q1Z#aqJ7d2r@OUJj|PbM zpWJW3Zr)zT*mau+*eK{0ya8+gMq081023mxvId70LTRy6={qO2B?99hA( zApIop^&_2x)q2-aX5>ESEd6}mv>ai5I^-vl)Fts|n$Nb!+tscG`P7~*8*Y3E3a$zm zLfcY`GW2B)L+PD35L(W8w@E2cGcVK{va1q8&94CB#!;ptQbD$XFbUNY0xgS;+o387dNt({4DJ5>m8bA;jGP)zM8wL*3 zwuQki?mvF?MMO zzTGb8H}+@Y_Wp;fv*Tga4H>cofaPp5L<=zS?Am9H4a7(xA%vDvf81@(wsC*Ldrg`( zWhQ+<*7H?82?RN8S13)p}4f({;)3 zKmKR~FlgECy3OhNZs>`^bN61Hwu_6i_3ZS*a#Y4`yYO=eKYQT<<LK?9{I7Z-HW>nW&!d<20q2xTM8zp8Am_sb8<^*F%ea(#`bTf6y znmZeIvfEhRG8Az2PCXD>iyT2oGg<~MA_WmJ2Ewu7*Gns|69oqZ2neB8A%p;2OD{lX z=cO_3aLg&P=#%|qAQp=h>c;BOu(k*U=V9og1S4pIaH2S&5smBF)~vFCjj;; zn?(gM8>`w>)4fL47#gAy=w(0}NReIN&0CgX;3mWr0bE3DrDzoG%FOtVCeO6hQJ6&<|?LLDVs8^Y}l3|n+gYJYM7KTTM8(_R4ng`>{J;% z5K&brSk<61PzXef5F7(II+z;*F@{*>41f$AkOERL42Uss!VrOoY7{#tR2Pc7Sq%V> zXliEe&HzmAF6wp}bm@PQV_yHRB4Fi2p)0wvIjXTKj_XIg3LJe#3O-9rAv7@tVkzRF z%_8Lu?k;q<%p7720RfrZ19%NRKmc@Nhz&D|fxdo@xB9ZA3ibe|xB_PI>zzC3#8lom3 z@whAmX8?r2#E}(4AY$+evDYF1;ACP2b_D|EQ59@;vQWR^ z>Unn+Dp3*ZRd4S$I{nS5zHme*KphPg4y;vd?lt|P-dJNGFkMn4KOy4)^r{J{7z0ND ztsA_Lw|R9WgJUOeS5+DE7_Q?1u?Z{?t;n_?wtaqbelZEnB&JE*#*`=oN}-tq1So?J zS%;!BXz5Bn40({D7s)m**U_zZ!eAHM4F)(|Eaq)%BT%EB_M`h_6g3+VkO7Skx;h-H zP7H7WLaxvR1TZwOrVXj@QVku^8oUg6wRx*bjv7*Y^=7eEPNG)T$@m=s>pI&|46L9l zs9IJxL;_F;aV!F&RsghSU0mi8=`&u{)Hkd~XjZTVAUT-<)@vTC?6HpGnSeoR@+1Kh zs0z4&Q;p$>lL@Cr&77}>B<5!51PBVARVGC0R7{0Xvh0TKtPRaX(H%TcNQk9#0g6UJ z1(c_W_l8ZkU2k!@*7mg5zDHtWsfhsP(A!=c@~0YKB1?%dj=5E=TR z+q&)CCJxyxxPpiP0>wx~jYb{3G+4Urw%Y_5rjlbwz=(>Dq>hM)4qeF|>g4*t;@*vI zu$rVTy#Z3^MzygAcxfBPZki=!^`x0Ud zp|_m3d01_tBjr*DcsUPjb=#&19o_&7Y}$;a^cM;K%VWz(A4REoTWFBd2NGVgc#3TkUYm2pBOWPR*k6g;_D# zi4~>DAqHf^2BwQv1~n577>GrrX!fkkMy6r_oI>QtO`IlKcPH;Z4@%ds24#$t5JbiqBzBssk^TuL1?=Oan)mqm&pG;=^ zlVw=sKCjNs8?v@Z9O~@I0lk!LipgW3kT|YOQOi4XD1LN!<1@eXxo>>`Te2Mh0=H9x zU385c%Akns?xmFJbdh4%oS*6-?R*Mb>V~e&3zFjCZ6OR%9x+YZ zoZp&WztQX=d!IXba*_+|!sNa4?t4G@L7%s`?p|y6Ca)e`|MKf^93C84Dc}6oHzq=_ z{NiW7_CNVMGUNMaj~|{see&SJ>HSAfe)8`0VmO)|o}8R+&d$8!;0zAr`>ib(g!f zbt@8K05H=*uqM+E$PraZ2FQcvuDEK`P6H(bH17=uqR2d@D!GK#!!o7cQq?&l2wZt zB1YmEQVNr?@mAL&YDR=vI4HLiAtqo(@|x`(LBUnsU0nu|zIW>Zi$f7*9L%AZVMwvU ztV`}o&L$~@X%iAgR##Cc=77jpwN?cI92r~<-H6nQJ@eTL_^Ik zfuN~5Ab?j*-?JDmKuckkrfs|A&`S2)+kBt6iQO)5&e!dfILxr_FmY^YO7`4I7I(zx zNbcD{#T^+C+@#y}!}hER5t>{gr_@kP#7zhWxXT%ben2}7ZEFd#y7WCtpDlM~mvlgY z9az%Xv}|c8LokXHN}-8f3{1$4&}CQ~^azuXY3EK&YD#LF0B)k1)jc3Zjux3}#g7Vt z65N160M(0_6tm)^sz^*d=UmhrLEObPFgIb!maGq2vLW!exU4bUZf-*$m&$!c_7P!0k|Mq06@b+fy_;<$KnjZg2ic23r{zXzy6(Xo}8b3`WIe*;oeO* z&uX)!%_r>_zWCa5G26R-_{V?nFHcS%g~WjxcSmR=1Ts|h>(}pmm;??$3DC#{BFC@@h_E`{tOYWmXMLgEOF#cP^4iyM%KoL3wKmZpVbp!|; zgV%IZFtKV{7?X;}$%O+$r5KK52}E-8E6ef769BX;pMrVSpN$iUnodyd4%PVpN>(X_ z1jq*H2x?wOBwodAFlIE=AQT-l*UUezsz=>~kEVgT*RTG7t6WCMt7%02+Xe=7NreCa zXFxLq00wMB0AwQVReP1~V9;-a*KufI4jhPx+)>n|s0fr|Ds{k%U`PZMff$G=02Q#fD%rZ!I}xx4ratR-=vf!dBu%IAc(ZdiKn{+LVRB$5juMZJg#1@nQodTEsbYbsJ78ziZ$_JC_gpGnWG3;rV`kcYhq5uvK zs4D7(2v7(Ri-jn*w1sw$%5dDvCb4Hw2#hI;d&#+m5nWgxj`r@ndV6Ruo(|hy26iw) z1S{S8>7&O!pEsDw@^L?V$enfaL2S13o~V4(3hQAYz%cSCdr&1f#gq*Lz^6j5AqKVU|dK|G6M9?Zlt zCTB}SE-r?_%@NQ{Ds3CZ)J+}LSQT(EQuRzC!5uJ*7owsjUKB`O>-b+?jSPr@&9Q1m z)omn`KD*}y{pHs0D({EDBT{5?QWaF-$cyI#rrOliJB-g48lX z*kMTF-t*7hxOL~z!(-VE*N*mY99~l@kvX~7mSC~B_tmfd`j>zGSMR*`1-Ntgg$Zm{ zPc{!9>yz`RKY8!;rypz|op#$@G20FqC=^v-jC)C<4lai`4~_NR2XAMjTdzO2Kj-N@ zj=D4Zn7L80N@F4M3DZQaAjXh;xI${dWom7u|Bb?L1+N6q`at}6Gx_mMzW&{xdoup5 z&KF?(giKsr4NOf{i%1a_6*aXg=|*(@5mf~$#1&Qb;wF(suC zkU4}H83HqziJSI$a0kK=VjEI&H1p!_R3B^t0P3Yku~H=G3@%9OW8AQL&)MW7?PfB-?$H1)(tF={)_Ig6Nz=Unn&2sCLK2~3O2;7s6(Afu7` zStgnj;4)69?XsCIL(`gKzccNznTE|~cfRS{%`_&B6zXeG*P$={O1e(FENaEvLEY8V zDr;KZMdaeq;~%V!KQQzVn33j(H(z+|i#M*n90Mcn9(?rU#}9s_mMKy(0MCc}&#A$q zhd&7_2+*0_yYtEm_ufF678LB&VW75!Hu*LXb%E^R{Wnh@-*;nl2-EiVi=RoK`f@v+ zfT_4h7BNL84uQZ7tANQ>izAzxi+~BBszHshuUZ0iA2rH#X2t<9MrH*xXR^$o4p_ic zwf1k~hUhMY96|tB6Q3R&eqrz08-2fBcXqz&hhdjeDy8=l&?g*13bE23ukQMGGQ0Ki z7Y}aSNR3VjX47V#Ui`wB{|65~dhgLk?_RA%v~2rsh3&c;zP$q12!bOx7&!nYo+OU| zs$LvC#wh`K7UD4FNo$L)+x0oB?f?vd5TP3M9SUMVi~xNArr27ti{0wYAHH?5I$wSI z^;h0_^+5ZQTVMEemR@@O_I&?0Zr!@^$A9oAZ~gQqWynW+M~4STv)K|=1M};jef8J> z_Afm5^7YNCfB3=Kt}DxBJ6$wxP)uAs_eHYJmNBKUUFCkKQovl=IXBa`WO?x3gWbhI zG=K7VyEne|{yr6E=$q`1WfSXrF09Rnl{(3Q5dlI7G30=Q*jBsEdO)#AlmZ1rBti~M zh;<(hNHnG?BaVs#2d(Z75mR!hzC1$0N>Vf!8>X?=s|FVUMdR_;Lj(du$2wH>%g`SL zs^Kh-W|x5Fk&IVkIWKh)6>#J@4u0y8r_LJ`3~DZD^_>7XRvDs;ySUWsWf&tH&>a*^ z!Lpf}6PRLEP{EbW)1F-)<)H39#%LOPKrleUK;(?T01c4=lq%@bQAJ6JqTo!9ShPsB zlR0#|O>a1#w<#n56tzLMfH@nu2R8!ja}Pw56wo0CPBHY|=5%|p-JB4rAoQxOgGPc29Bl@b=+6%l7Qa&z=mub6V_OpDu0z zEwiv$%rQFzKy=8CN@HG&_fCz`hPT7TgU#-#%dYXz7d4~MHUeItG^Pl+0b{nc?fUiO zbHGxDIA+D7>VUfKx_%Smmd?-0W9^(;jfTDKE;?s1B2q;Y--)gfeUf@C+s)HWzX}Bs zHRQou1d9_eM)KsqUL#j8B~;@bGae6yVD1W_RBvH3w_bGzK14E8)$D2r1zF5c9lf9$ zD46$VRtl*xAqKBHJ|!ru=Av%mqOQeV(3DKc+-Wcu^MYREz7^QozKyMZG@azIB$Y8lyq$z4{*XYYOe$B%yY?xLaTw7vG?9bY!z{r zX)&8lms4+~;l3Rrt_(`5Zr+%&1N1bOIaQq`JMuMBh9tz`zB&i zj3ZDR!An;}2px;)cIbNVW-%=n`>L?ISP4qAj66!97>r~qt0!mMi`}f9PbY0?((-73 zGZWveRh9&IGs+Pe)sM4=ydOm z=V*Y<}AorWRHdV`sZE6jL}kIeYchmkw|3pY1OA;Bfi!3#T8v{lVk+B&9cA zx%JDx`o-m)Yk&sTtXMfo`0-QI|4QcBI0kn0sxq%sw!ffSsBTO(Lj*$lEA$HWasBKs z>z~gT{(oE4j*og(5h=NpA|j${re=obMutQoM#e;et6~`miFwk_Qfl123_St@ML;wy z?&c;g1Gpdn8k$&Dc_EP%HbfuDIxuq;E7?^8MKEi>aH5*p@+=3+OhoK=e|4x7`IwjEvrx z;jEotDv~>pVwz>#nUE=0R`9Io%&yn8FA<DC`rYv8!w28qt)3DgIL?=clQs@R z_w>Pcv4;9_$aijdax4fe0HQgW%y61KMGs8YY5#P0`jecqY6)>No3{P)U&z@iU(Qse zFK9+cLJS~W*O4afT6cYJYK}zUCfSU9Tmdp6B2&#}1+t1fX`&M9R?HLt)Xhx!a&uTq zdIk@Ok=e{Qog&2T7I%H`E+Md)?z(kEG@i7LmSg_E4i0FZZMnz!5>mW);9=N}BE65AUzL-NmMS?sIqi-gSiJplus(++O~z zzx}1_*Ovd{_Yaxc8hTZ_G!0OV&Q7DOFe z-%$Nb{-N`M-$A9F+^T39wO$Q7bgB*yY3= zCV^c=%TRc?aVp-pCc+p!004#pzH*u%RGGomhpP_i z=m=6XF)De<1C620P$3pbIF^$medDs0M7U%$*`=ePzJSWfaCJj4AK#MEwMpOzs0KFr zPU@;35FAV$46sh7cnrCOEZ&I?T<5cnBh?e1v4R1V>gt2oohrjZ9MNM4(LFd2VFVPZ zttKcK)w9-WUWmCvFlYddh;GKXL`g21J3sr$LFWV z$4@tAfrEjXsQ?N)5DA)s0D~1V(E!jiOesK$1z}ruRtf=m3K?`ebVjt656uCy50Qdl9*q+0O z?_YoY+SX&=?-CIr8yGPV@^;&;s1)(8FJaJ0(+n4@RqkO)6JV^Dmtk?VNm?Eq40%`| zABzk@p|efo1ZdfN17~azB0vD(I{&JrwBje+2B-vDZ(no=Ky-D_Zk^kJE?Tk)f(KMg zg>s)s9TYSR6fHSRKQLfK0;%jnQBjd%Y9^9PR#6?zPVRukz#LRf4FIW5_UejYw1wdq zk@GPr3jo~z?Q}T~NW=}7zJM76AtN|I#CE@JX054P_L5V$#$_0=K=NpkhMY0lEX@(A zir+#TF=5uC=o~P_7>JNDHObVvvx_Gm+<*GveUx(J-t)I#dVYHQ*0;a=%|H2r-+l43 zFVF7Ygwt-90h ze15%YQpA{IOY8GZmxtxva(Xxwl%fNhCu#zR+R`=qbDE{h>Mc=XAh67ZVQ^K|5F*AV z8rar`ZI`zjd;lXFnVVJO`&4Ee_O!@Yy~>GtA<=k7F<^uzbw`p(bZjEhCMb$Iy3b9gab z%&r5q0N{2hHAcL|>0CbH-0GP1QsPoqzvKV}b)sDZ(66d~XCiYWplV9~%U2Zw_|HcO ze@*lYbx3SxYNleUMMcci&1zHx1BghInuv@XA(^)pIAEZrZ32?3ITj%DF{1zw3`{{Y zx-x<>S)rW042teRKol%Qq2!>Zt_pzUUK`NCfH6kEh}3{ZK$1FNa7QpA0(K$_feqZu z01Ja7GchwqL^9Pu6u>Lv2D}EIBYHp}FsjQBLI75yBHl&FaS791JUK+lYvn9E_Qprmg!Vj!i&x$v^?n-NgYBYB{e6nXxpHAT=VIvt|J?K{P_w zI*Tz^brl9@#9(G3`7%`?08m{-+GXyhBVyIdx<`x!+|`kR0F0c-sRA^uR|N-Rq7>1L z+*C~gk+C}IodDbl0J@n-Pe=}(kxi&RoxeNvX7>m1=Y;IuGPL6Ip_j-5!cHUkf2N6l_RHZlo#zq)Z!`F@u%HA{} zxY^;YSFhiG?d;_J!=uB<36Pq}V*lVS&phQNC55?aB6~}#%_paV5%700+_(Z=z++LNak)TV)>8)GM zVmY~fcRx)V?bqf{=@~p@9YGPaI^mJVpn*%WVzus%7688rA83zieqP- z(M_HFioZdK{tPL0fQBRhY{r#xRxfmObYNyyBk-E&b4h}nV~WsQ?ssL5Fb#GzpHZGXolMucKPjTMEJrE|1w^9} zBbgyOs7J=>Bsju)=+JR1(huDvwu8!UJJ4oQV<~#+*kYV1mOeBQ!lYz(CX77|J5CJ+ z0yOoUwU@F3DY@ScnjIp*3?U(!=wSWXWEhTDXD6!_MLxWCXaHyDXS-E7I4m(u#elF; zV*muQ3Jg~DM?w^9^6Fd~Yp>(;f8(YF_TcCyK_FGE9th}Fft zh!2?i)J&|15N&iYl>u}BA57g$2X!L^-l?VOyg52tZ8jI`W|ADiL`|K*$(?{9Ff{HF zAcFB_E#iMsB{NRrYLQ*9Q@8Bin+_&}^B>5h{zz0>P1DQkW&WqTr?Lg zq9UpaR>i4e(S?0cYf)$=l|U=Pp?hR&sM|fFrO?A?#`}V-&?OYTiI@p zw{9>^%l+%u`?4#n(;3a$Y3}++EPZhiw!nLV_tN6#z9%eRnrVUv`NX#52lEMWAO#|V z%uxg8L5t1jv*q=rqxDaE*>2i-yI9O2xRVv>T+CVh$l|@};`F+`iK_>zL)zn6;()kL z)@7$SUo7T_^U40~;P4=Z=J@1%*Y#ntXqyxgVW1GFn(_Q%!y3&g;=Jq2`G>1(w-28` zdU-cJ>$kh8Nqf>>=Nwwl)030EYlqV|cKvp~nBLf%pT70OVc2XbfAF&(zWLyTfBxM+ z{mhp?|Anu9=~G|$#oN!_LrNo9?FzW_F;&4v5|M-3xI-Jirc!%Gd^94|KRY4BiiG}n zRx#pkuJ%&&^AW;dpZUTSA#3EZjldUl08=Td0}>%Nv8h#0;>g4t86$(6TLC9GQqAU0 zL`+C#4vOR+1BGTlRUNucRfR)JO=4~ULrvEv2BN^sDq`6JB*H*|jNoX7wHy;iU~oWJ zF$&bCR78fH&4ii>0hx+h&lC;nQXPmZh0awAnUW&_nPSaA1Seob6qC*&qi$p<Ju@>E@)~0? zGQ31hb&Th(cq~&dxePp{m;n*o)D($QYM6;b1a#K{j9iN&k1Qxc1ZPx=$l7RZk*#Ri z?6in*@EFiB00l;*TD(Fe45li1K<5w{DsZe;%;q%=6dh{>QViV2h7kI`(*hV0K?E18 zaorUaVQj{MI3kL>Nnv7i1FQRc7ga!KX49cJLC9#k(hW}^9k17U{$hKu*Kn9^E(RtJ z0lKqw$sM49ry7hZMJONxJ6@T%pB0;yh|+wSri(ZUAp~&l2G3;}WPNxz320!u&3ZeV zg-Hwz(=6xkez0-z%|$n2=1 zVj0{b7!n0%Fd!0ej`iq{0Skbdk-53L6F`U*9U;3TVq^}?MA0f-vtHaxKmh=d8U$A@ z21ba6SO;L}pkjn-91PsuN|qvOZbV@2s>*?pa421o97B^a&KCQ-i-%Hj3~+Sg&hpx; ztMd|RHD3nDK7~L;W_s`CFZ}A?`uoK2=>FTwy`$SN{i;r{ulwN>C?Kz@iWX&wAJdNE(UDu4rT_$(b143AtyjGFN99icK!P6-~ax0 z$e;hr>$mP4lxt;iw7`bYaCtCElOu$fCXoRt&}^Avq@h!0Y!mVUH4{?R^V4p9F<7>P zYtyDp{YFGezZ<60>3qNKcHP@=K3bpkh%jADViO$w*1h>;*31@>$yclL&W|4JaPpO} zEk~mHziz3k0tg_W$1BzAxW0CGtc!ZnYN98^t704J5^R8gjAUL1v6t(9H*`mY>gWfr z=tmr*Cef-m;>w7D;OI047b0k-3c6Phw1WXKT{0P}{)R3W=Wr>yKnHeEa2~M{T6Ku|GjG|Du*LMG4+#?;19>_4(C4QlwXk5P;Umn(euq=tA@ zTVK&2-D)u8n9%`s!b8Z+fuoy(%>f-b_E}WKx!y z8D~%8HU<}8ez*#D`AWus4Z*4bQM8H(s@KWrxluPTFe7jv0uE$`#jBPatCeP)anZBn z8Iu8t1696hmA+hRXB_=9niSCMPzM-bhHx{5Thn$w1y|YXu-oiYUl z6g4q5Q$oiA=zT;Y9kwpfSTbJQUwmfThSRg3oE)2&fSY*+@yZA-$`$89fQSmP&iT9_ zU3s&>aB0J!7+hnEfs_Z|Z7D>K5f~hb+E7YA>;_6U zXb%vW2f`M?hTPk5;Z&p_O7B7K{A5irqVeg;S?=R}u~c=!WR8Hr$qB&?Rh&YA5L~@D zhpwkKUJN@FENoeexItghuxN;D5NI2pq_ea0ZHEG|Gc-{kr2vk~uBSUGXPccm=F$zC z1B>IuFf_&>Bk=G-wGDJ5reW7#biIovAh6sG+g^ueIteKe5JLb<;0*xRqVDQo`2=IY z5ba9b?dIqOA)98^EV(dR42+6ClwsR3QRD!{E$7^4%OyfUb1Ox%n2L(j%SA**?J~o& z%4sW17mHyrS5R>?H!&A8RWmnrQ!_DDGp!ArsXa^M(Er!T12Uy1lwGf;gA6i=XG0(+ zayJ!q_qd5oY}mQ)hq4>cNltXT-H3{sx6^hynL$&A z9zXxW8#ixUN2YK5$shcq|LVWE|IUw|d;Z?`!AIZz?SJ~-`}cRJ=UtQTAD^VN^4tr* zbT|oV|1eBvAHMV9pS|;=jJr?&r+@qUwVUe?&imcYj>}@QoE^4PY$W?`)k!bLWigu+ z8dQc9s5zW?R#xmb+x}dpG7s09{cHO}-#Zlu2{M4&t-E(_+`Yvy_}0*@Y(v)^*ROY*)e44QDQ1qKD5vL}>p`BK~^K7e+}YUU8sDGBnnZEvToFtBFXC37H59oQNo3&0RBBF+uz&w4BK3~q#32Gj*mB| z$NT$tgWIq@MaE`g(w%NDPFI_!2m=whWdt;HGr}0y13H-G+RV6>%5@mIC8oJ#GzE5M zq5#Dmi`A$N077yX6LlZ5+E&cl)JA3^v|4rpG6Ir26c;zEmG7@e3%xuU%Qy#l%2RL#r+wM}Y>sNWSSLgXP- z@1QXxZW=;j09RKnW)7xkZd#qP#>j5!W`Q9#q3?6w@7gG?!)m)ZKY4`Iq?mJm!nBJV z5qY~>tq?8Qi6euu2&Bf3`HJb^_ zP-zz-wjs6mUcB@2E6<5Yj7d$k$Gi=_W=jyv(QKECNCy^DnuZvg7!gs&0F-QIif91j zfJ|;?t~pBm_vQ4A*PMck!k%^Fk0qD6K9Xd1blHBB1=t7a7is7M7d14=Pk zF=s1ANFkz`001cz!%}i}D**sQ&}s{XD_M1w6`NVff=#>k;%i@&?)>EV!S$QBU;gx$ zpt*gz>XfM9d;y@X5s`z35MTYwSN0BXpFa6Oq@1qe!?QsZ2*V|OPyram${+R8ay|?h zyo}3Zb_$K4waE1(3^7n4mq6}JQWBVoYhCPK0);{V3{|<0-Xeod`t9cYhd=ny#mV_A zuibn7^%rmGt;O|a8$uCVZ-%nFAjH{hxp!^Rq|mk`MO^{er)@CvCl5EPv%$@;-<>v7 zUavY=pG!EgY}~iANRe4l#UK3 z^vqf*yIMYs+V`so0s2VL1qDF&OUfkLrKzc|Di|n?tv>3d=U%}xI2nZ6Mmzkaojp`W zfmK_7oiWrfVXJ~lw6V|gk71>&G@CvB4$5%lj z9P0|YLxAgCRsQ24wvdruOvr6cLIlx?Ix8rVzYhs%;#FW9Zl=38!ZH5Vq!ug9rp>B11P^7?|9Yft6%<# z=rpo4#@tD@E3RdoQt0^W#{jXRW}ez6;gE&g#jF%iU;$UC;Zc{fKll1Xt81&P{7}8p zZR6zz7_TUhRTqQyiT~{g;A-P!3#t%9z{SQdL#p~3e3rB?2dHPPIU=|dnv*yXxT6>K zVj_rj=3Fz|s(}$;+#c8A!VRV+d6X=hYO&WWd0@sc6sR2`m>Gkbo8{evIFgz6Y}Qae z_epR%Aig)9w<-_2u2(Z~6-4(K##?Hd!i0Fpwq`x)`hI0Q-R7KQC~6K&o1GYGmo4## zQb9B;y+gs)IIy6LD=>$YhylEqNtTY-I9T@HkppXh9trv(+pvW&<$hoMo4kPFr80e+MZpk zwp({1P&ZRX0P^Az-3Np2>G@fgS*!uzc9L`6Zim)GaOiR%sX6kAThzP2X)y>dGe}noZPqKg&H#4u%EozplNY-4`Rb36#Kx>+%RUq@f zDfPk?0_W=g6NDym3Pr^cxsA;hjoWu_ z#2C6ww_a~zjI;T)nMMV{Qo8etAAaK-58ir*HtQMBle?FkyUjaq{V=aCe&JKEeeUz0 zY4#Q$z5BD^_}c3)m5Z}CfA}qXvU+ZQxNirbNF6Oy&sP^u-u%(aProw%^oz{oJ^8Vg z^=`ZB5yO14*q<-0H8&Z$Z3o++%o9tK1u|iQro_JM`{RpQI-I4c4}+cWpuldk8&=)( zcW%#a%wYxSwVDEtaWY+!a<^Iyeb;bmug{r7XgNhFC6`iSNXEgKd@$Hq+HYR`+^Y}X z`KhedA>q+{QBJ!vIO)@*IEGn!`0{fwYaV^@jt;}M`JoIUn`X-j#M9>R&aIob?m$SU zr6l5ILk-fDVNS2yp5A=n*6yRHPu_a_gYTXmKR!_zZr-|nbg;iZJ>}(Oe*IuQMPDqR zZddcYz5n%p_Mh2o{(FD)`@j2p|Lu=|^43p(_Wn1%@$LWcfAk;z=5PGX&wTn*&EXLs zj>;-j9Tf|e?CkW(oYYGy- zWH*pfavu7wBcd2Wh%to3%qARC@W2XSl931r-MyHJ3nK;&0fUK@JZyK}db8bbJHRkm zPN&PG>0TQfa|2g4bMR86vx@HmLa6*`L4%5lB6l?fATukaXHKr{HfY`mLaXdxh)jTz zH+k4Grr5NBxJY)*h;AxgGyo$u1mr-K=#|=;3|+rHi;Ph44&g+|DB&wL(?VC z=1p)n(Amt%(y$w}3<#_afJDxM6?|nxW5Elirsi${sHV9{0w<±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 z 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

?2Ni7m#Q+TZ(R#JgUp* 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 z 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 QcK`qY07*qoM6N<$f`2B{JOBUy literal 0 HcmV?d00001 diff --git a/pype/premiere/extensions/pype_avalon/payloads/estk.png b/pype/premiere/extensions/pype_avalon/payloads/estk.png new file mode 100644 index 0000000000000000000000000000000000000000..e68834a5cf7969941a45425ae71f56722d982bab GIT binary patch literal 69207 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 + + + + false + + false + + + + false + -1 + + false + false + + 10 + + false + -101606400000000000 + false + false + false + false + 0 + 0,0,0,0 + false + 0 + + + false + true + true + 125affd7-e3d0-4a1b-a6db-e3f4a9df64dc + + + 1211250228 + 1313424203 + + + Custom + awfulLooking + + 1 + + + + + + 0 + 0 + + + + + 0 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 10 + 0 + + + 1 + + + + + + + + + + + ADBEAudioTabGroup + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 8 + 0 + + + 1 + + + + + + + + + + + + + + + + + + + + ADBEMPEGAudioFormatGroup + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 8 + 0 + + + 1 + + + + + + + + ADBEMPEGAudioFormat + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 1094796064 + + + + + ADBEAudioCodecGroup + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 8 + 0 + + + + + + ADBEBasicAudioGroup + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 8 + 0 + + + 1 + + + + + + + + + + + + + + + AAC + ADBEAudioCodec + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 1094796064 + + + + AAC + ADBEAudioRatePerSecond + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 2 + 48000 + + + + AAC + ADBEAudioNumChannels + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 2 + 2 + + + + AAC + ADBEAACParametricStereo + false + false + false + false + false + false + false + false + true + false + false + false + 3 + 1 + false + + + + AAC + ADBEAudioSampleType + false + false + false + false + false + false + false + true + true + false + false + false + 4 + 2 + 1 + + + + AAC + ADBEAACAudioQuality + false + false + false + false + false + false + false + false + false + false + false + false + 5 + 2 + 2 + + + + + ADBEAudioCodecPrefsButton + false + false + false + false + false + false + false + true + false + false + false + false + 6 + 7 + false + + + + + ADBEMPEGAudioLayer + false + false + false + false + false + false + false + true + false + false + false + false + 7 + 2 + 0 + + + + + ADBEMPEGAudioMode + false + false + false + false + false + false + false + true + false + false + false + false + 8 + 2 + 0 + + + + + + ADBEAudioBitrateGroup + false + false + false + false + false + false + false + false + false + false + false + false + 3 + 8 + 0 + + + 1 + + + + + + + + ADBEAudioBitrate + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 128 + + + + + + ADBEAudioAdvancedSettingsGroup + false + false + false + false + false + false + false + false + false + false + false + false + 4 + 8 + 0 + + + 1 + + + + + + + + + + + + + + AAC + ADBEAACAudioPrecedence + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 0 + + + + AAC + ADBEAACAudioOversampled + false + false + false + false + false + false + false + true + false + false + false + false + 1 + 1 + false + + + + + ADBEMPEGAudioPsychModel + false + false + false + false + false + false + false + true + false + false + false + false + 2 + 2 + 0 + + + + + ADBEMPEGAudioDeemphasis + false + false + false + false + false + false + false + true + false + false + false + false + 3 + 2 + 0 + + + + + ADBEMPEGAudioEnableCRC + false + false + false + false + false + false + false + true + false + false + false + false + 4 + 1 + false + + + + + ADBEMPEGAudioEnablePrivateBit + false + false + false + false + false + false + false + true + false + false + false + false + 5 + 1 + false + + + + + ADBEMPEGAudioEnableCopyrightBit + false + false + false + false + false + false + false + true + false + false + false + false + 6 + 1 + false + + + + + ADBEMPEGAudioEnableOriginalBit + false + false + false + false + false + false + false + true + false + false + false + false + 7 + 1 + false + + + + + + ADBEAudioChannelConfigurationGroup + false + false + false + false + false + false + false + false + false + false + false + false + 5 + 8 + 0 + + + 1 + + + + + + + + eyJtQWxsb3dlZENoYW5uZWxMYXlvdXRWZWN0b3IiOltdLCJtQ2hhbm5lbExheW91dFZlY3RvciI6W1t7ImNoYW5uZWxsYWJlbCI6MTAwfSx7ImNoYW5uZWxsYWJlbCI6MTAxfV1dLCJtTWF4TnVtQXVkaW9DaGFubmVscyI6MzIsIm1NYXhOdW1BdWRpb0NoYW5uZWxzUGVyU3RyZWFtIjozMiwibU1heE51bUF1ZGlvU3RyZWFtcyI6MzIsIm1WZXJzaW9uIjoxfQ== + ADBEAudioChannelConfiguration + false + false + false + false + false + false + false + true + false + false + false + false + 0 + 9 + + + + + + ADBEDolby_Group_0 + false + false + false + false + false + false + false + true + false + false + false + false + 6 + 8 + 0 + + + 1 + + + + + + + + + + ADBEDolby_1 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 7 + + + + + ADBEDolby_2 + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 2 + 1 + + + + + ADBEDolby_4 + false + false + false + false + false + false + false + false + false + false + true + false + 2 + 2 + -31 + + + + + + ADBEDolby_Group_3 + false + false + false + false + false + false + false + true + false + false + false + false + 7 + 8 + 0 + + + 1 + + + + + + + + + + + + ADBEDolby_5 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 0 + + + + + ADBEDolby_6 + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 1 + true + + + + + ADBEDolby_7 + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 1 + true + + + + + ADBEDolby_8 + false + false + false + false + false + false + false + false + false + false + false + false + 3 + 2 + 0 + + + + + ADBEDolby_9 + false + false + false + false + false + false + false + false + false + false + false + false + 4 + 2 + 1 + + + + + + ADBEDolby_Group_2 + false + false + false + false + false + false + false + true + false + false + false + false + 8 + 8 + 0 + + + 1 + + + + + + + + + + + + ADBEDolby_10 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 0 + + + + + ADBEDolby_11 + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 2 + 4 + + + + + ADBEDolby_12 + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 2 + 4 + + + + + ADBEDolby_13 + false + false + false + false + false + false + false + false + false + false + false + false + 3 + 2 + 4 + + + + + ADBEDolby_14 + false + false + false + false + false + false + false + false + false + false + false + false + 4 + 2 + 4 + + + + + + ADBEDolby_Group_1 + false + false + false + false + false + false + false + true + false + false + false + false + 9 + 8 + 0 + + + 1 + + + + + + + + + + + ADBEDolby_15 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 1 + true + + + + + ADBEDolby_16 + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 1 + true + + + + + ADBEDolby_17 + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 1 + true + + + + + ADBEDolby_18 + false + false + false + false + false + false + false + false + false + false + false + false + 3 + 1 + false + + + + + + ADBEDolby_Group_4 + false + false + false + false + false + false + false + true + false + false + false + false + 10 + 8 + 0 + + + 1 + + + + + + + + + ADBEDolby_19 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 1 + + + + + ADBEDolby_20 + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 2 + 1 + + + + + + ADBEDolby_Group_5 + false + false + false + false + false + false + false + true + false + false + false + false + 11 + 8 + 0 + + + 1 + + + + + + + + + + ADBEDolby_21 + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 0 + + + + + ADBEDolby_22 + false + false + false + false + false + false + false + false + false + false + true + false + 1 + 2 + 105 + + + + + ADBEDolby_23 + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 2 + 2 + + + + + + ADBEVideoTabGroup + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 8 + 0 + + + 1 + + + + + + + + + + + + + ADBEVideoCodecGroup + false + false + false + false + false + false + false + true + false + false + false + false + 0 + 8 + 0 + + + 1 + + + + + + + + ADBEVideoCodec + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 0 + + + + + + ADBEBasicVideoGroup + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 8 + 0 + + + 1 + + + + + + + + + + + + + + + + + + BgAAAA== + ADBEVideoMatchSource + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 7 + false + + + + + ADBEVideoQuality + false + false + false + false + false + false + false + true + false + false + true + false + 1 + 2 + 100 + + + + + ADBEVideoWidth + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 2 + 176 + + + + + ADBEVideoHeight + false + false + false + false + false + false + false + false + false + false + false + false + 3 + 2 + 120 + + + + + ADBEVideoFPS + false + false + false + false + false + false + false + false + true + false + false + false + 4 + 4 + 25401600000 + + + + + ADBEVideoFieldType + false + false + false + false + false + false + false + false + true + false + false + false + 5 + 2 + 0 + + + + + ADBEVideoAspect + true + false + false + false + false + false + false + false + false + false + false + false + 6 + 11 + 1,1 + + + + + ADBEMPEGTVStandard + false + false + false + false + false + false + false + false + true + false + false + false + 7 + 2 + 0 + + + + + ADBEVideoMPEGProfile + false + false + false + false + false + false + false + false + false + false + false + false + 8 + 2 + 3 + + + + + ADBEVideoMPEGProfileLevel + false + false + false + false + false + false + false + false + false + false + false + false + 9 + 2 + 10 + + + + + ADBERenderDeepColor + false + false + false + false + false + false + false + false + false + false + false + false + 10 + 1 + false + + + + + + ADBEVideoBitrateGroup + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 8 + 0 + + + 1 + + + + + + + + + + + + ADBEVideoBitrateEncoding + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 2 + + + + + ADBEVideoBitrateLevel + false + false + false + false + false + false + false + true + false + false + false + false + 1 + 2 + 0 + + + + + ADBEVideoMinBitrate + false + false + false + false + false + false + false + true + false + false + true + false + 2 + 3 + 2. + + + + + ADBEVideoTargetBitrate + false + false + false + false + false + false + false + false + false + false + true + false + 3 + 3 + 0.080000000000000001665335 + + + + + ADBEVideoMaxBitrate + false + false + false + false + false + false + false + false + false + false + true + false + 4 + 3 + 0.080000000000000001665335 + + + + + + ADBEVideoAdvancedSettingsGroup + false + false + false + false + false + false + false + false + false + false + false + false + 3 + 8 + 0 + + + 1 + + + + + + + + ADBEMPEGKeyframeRate + false + false + false + true + false + false + false + false + false + false + false + false + 0 + 2 + 90 + + + + + + ADBEVideoVRGroup + false + false + false + false + false + false + false + false + false + false + false + false + 4 + 8 + 0 + + + 1 + + + + + + + + + ADBEVideoVRDoExport + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 1 + false + + + + + ADBEVideoVRStereoscopic + false + false + false + false + false + false + false + true + false + false + false + false + 1 + 2 + 0 + + + + + + ADBEMPEGMuxTabGroup + false + false + false + false + false + false + false + false + false + false + false + false + 2 + 8 + 0 + + + 1 + + + + + + + + + ADBEMPEGMuxBasicSettingsGroup + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 8 + 0 + + + 1 + + + + + + + + + ADBEMPEGMultiplexer + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 2 + 1297101856 + + + + + ADBEMPEGMuxStreamCompatibility + false + false + false + false + false + false + false + false + false + false + false + false + 1 + 2 + 1398031392 + + + 9 + + + + + + + + + + + + + 0 + 1 + false + + + + + + 0 + 1. + 0 + 0 + 228cda18-3625-4d2d-951e-348879e4ed93 + 1 + + AE.ADBE Lumetri + InternalSerialize + + + 2 + AE.ADBE Lumetri + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lumetri Color + false + 0 + + + + + + 1 + + 0 + /v4= + -91445760000000000 + 10 + false + false + false + File Path + + + + + 62 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 2 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Basic Correction + + + + + 3 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 4 + + 0 + /v4= + -91445760000000000 + 10 + false + false + false + + + + + + 95 + + 0 + /v4= + -91445760000000000 + 10 + false + false + false + + + + + + 5 + false + + 998 + 0 + 0 + -91445760000000000,0,0,0,0,0,0,0 + 7 + true + false + false + + Input LUT + + + + + 63 + false + + 1000. + 100. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + HDR White + + + + + 6 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + White Balance + + + + + 94 + false + + 18446744073709551615 + 0 + 0 + -91445760000000000,18374897589125431296,0,0,0,0,0,0 + 5 + false + false + false + + Show Mask + + + + + 7 + false + + 100. + -100. + 300. + -300. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Temperature + + + + + 8 + false + + 100. + -100. + 300. + -300. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Tint + + + + + 9 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 10 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Tone + + + + + 11 + false + + 5. + -5. + 7. + -7. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Exposure + + + + + 12 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Contrast + + + + + 13 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Highlights + + + + + 14 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Shadows + + + + + 15 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Whites + + + + + 16 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Blacks + + + + + 64 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + HDR Specular + + + + + 17 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 16 + false + false + false + + + + + + + 18 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 16 + false + false + false + + + + + + + 19 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 20 + false + + 200. + 300. + 0. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + Saturation + + + + + 21 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 22 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Creative + + + + + 23 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 24 + + 0 + /v4= + -91445760000000000 + 10 + false + false + false + + + + + + 96 + + 0 + /v4= + -91445760000000000 + 10 + false + false + false + + + + + + 25 + false + + 998 + 0 + 0 + -91445760000000000,0,0,0,0,0,0,0 + 7 + true + false + false + + Look + + + + + 26 + false + + 200. + 0. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + Intensity + + + + + 27 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Adjustments + + + + + 28 + false + + 100. + 150. + 0. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Faded Film + + + + + 29 + false + + 100. + -100. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Sharpen + + + + + 30 + false + + 100. + -100. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Vibrance + + + + + 31 + false + + 200. + 300. + 0. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + Saturation + + + + + 32 + + 0 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + -91445760000000000 + 9 + false + false + false + + + + + + 33 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Tint Balance + + + + + 34 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 35 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 36 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Curves + + + + + 37 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 38 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + RGB Curves + + + + + 65 + false + + 10000. + 100. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + HDR Range + + + + + 39 + + 0 + AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + -91445760000000000 + 9 + false + false + false + + + + + + 40 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 41 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Hue Saturation Curve + + + + + 42 + + 0 + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + -91445760000000000 + 9 + false + false + false + + + + + + 43 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 44 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 45 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Color Wheels + + + + + 46 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 66 + false + + 1000. + 100. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + HDR White + + + + + 47 + + 0 + AAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAA + -91445760000000000 + 9 + false + false + false + + + + + + 48 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 67 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + HSL Secondary + + + + + 68 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 69 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Key + + + + + 70 + false + + 18446744073709551615 + 0 + 0 + -91445760000000000,18374686479671623680,0,0,0,0,0,0 + 5 + false + false + false + + Set color + + + + + 71 + false + + 18446744073709551615 + 0 + 0 + -91445760000000000,18374686479671623680,0,0,0,0,0,0 + 5 + false + false + false + + Add color + + + + + 72 + false + + 18446744073709551615 + 0 + 0 + -91445760000000000,18374686479671623680,0,0,0,0,0,0 + 5 + false + false + false + + Remove color + + + + + 73 + + 0 + AAAAAD8AAAAAAAAAAAEAAAA/AAAAAAAAAAABAAAAPwAAAAAAAAAAAQ== + -91445760000000000 + 9 + false + false + false + + + + + + 74 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 75 + false + + 2 + 0 + 0 + -91445760000000000,0,0,0,0,0,0,0 + 7 + true + false + false + + + + + + + 76 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 77 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 16 + false + false + false + + + + + + + 78 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 16 + false + false + false + + + + + + + 79 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 80 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Refine + + + + + 81 + false + + 100. + 0. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Denoise + + + + + 82 + false + + 30. + 1000. + 0. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Blur + + + + + 83 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + Blur + + + + + 84 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Correction + + + + + 85 + + 0 + AAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADgPwAAAAAAAAAA + -91445760000000000 + 9 + false + false + false + + + + + + 93 + + 0 + AAAAAA== + -91445760000000000 + 10 + false + false + false + + + + + + 86 + false + + 100. + -100. + 300. + -300. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Color Wheels + + + + + 87 + false + + 100. + -100. + 300. + -300. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Temperature + + + + + 88 + false + + 100. + -100. + 150. + -150. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Tint + + + + + 89 + false + + 100. + -100. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Contrast + + + + + 90 + false + + 200. + 300. + 0. + 0. + -91445760000000000,100.,0,0,0,0,0,0 + 8 + false + false + false + + Sharpen + + + + + 91 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + Sharpen + + + + + 92 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 49 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + Vignette + + + + + 50 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + + + + + + 51 + false + + 3. + -3. + 5. + -5. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Amount + + + + + 52 + false + + 100. + 0. + 0. + -91445760000000000,50.,0,0,0,0,0,0 + 8 + false + false + false + + Midpoint + + + + + 53 + false + + 100. + -100. + 0. + -91445760000000000,0.,0,0,0,0,0,0 + 8 + false + false + false + + Roundness + + + + + 54 + false + + 100. + 0. + 0. + -91445760000000000,50.,0,0,0,0,0,0 + 8 + false + false + false + + Feather + + + + + 55 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 56 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 11 + false + false + false + + SpeedGrade Custom + + + + + 57 + false + + true + false + false + -91445760000000000,true,0,0,0,0,0,0 + 4 + false + false + false + + Custom Layer + + + + + 58 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 16 + false + false + false + + unused + + + + + 59 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 16 + false + false + false + + unused + + + + + 60 + + 0 + /v4= + -91445760000000000 + 10 + false + false + false + + + + + + 61 + false + + false + false + false + -91445760000000000,false,0,0,0,0,0,0 + 12 + false + false + false + + + + + + + 97 + false + + true + false + false + -91445760000000000,false,0,0,0,0,0,0 + 4 + false + false + false + + + + + 0. + 100. + 10. + 0 + 1 + false + + + false + 100. + 0. + 0. + 4 + + 100 + 0 + 1. + 0 + 0 + 1 + 1 + false + + + 0 + false + false + false + 100. + 1 + true + + + false + 15. + 0. + 0. + 1 + 40 + + 1 + + 0 + 1. + 0 + 0 + 1 + 1 + false + + + 0 + 0 + 2 + 0 + 40 + false + 15. + 0. + 0. + 7 + 0 + 1. + 0 + 0 + 1 + 1 + false + + + 1 + 8484142867200 + 1. + 0 + 1 + false + + + 10. + 64. + 4 + 130. + -30. + 100. + 0. + 130. + -30. + 3 + 0 + 10. + 192. + 1 + false + + + 200. + 12. + -2. + -24. + 0 + 0 + eyJjdXN0b21EYXRhIjp7InVzZVNjZW5hcmlvIjoyfSwibUFsbG93ZWRDaGFubmVsTGF5b3V0VmVjdG9yIjpbW3siY2hhbm5lbGxhYmVsIjowfV0sW3siY2hhbm5lbGxhYmVsIjoxMDB9LHsiY2hhbm5lbGxhYmVsIjoxMDF9XSxbeyJjaGFubmVsbGFiZWwiOjEwMH0seyJjaGFubmVsbGFiZWwiOjEwMX0seyJjaGFubmVsbGFiZWwiOjEwMn0seyJjaGFubmVsbGFiZWwiOjEwM30seyJjaGFubmVsbGFiZWwiOjEwNH0seyJjaGFubmVsbGFiZWwiOjEwNX1dXSwibUNoYW5uZWxMYXlvdXRWZWN0b3IiOltdLCJtTWF4TnVtQXVkaW9DaGFubmVscyI6MiwibU1heE51bUF1ZGlvQ2hhbm5lbHNQZXJTdHJlYW0iOjIsIm1NYXhOdW1BdWRpb1N0cmVhbXMiOjMyLCJtVmVyc2lvbiI6MX0= + + false + false + false + 2. + 1 + false + + + 1 + + + + + + 0 + 0 + + + + Captions + ADBECaptionTabGroup + false + false + false + false + false + false + false + false + false + false + false + false + 0 + 10 + 0 + + + 1 + + + + + + + + + + + ADBECaptionExportOption + false + false + false + false + false + false + false + false + true + false + false + false + 0 + 2 + 0 + + + + + ADBECaptionFormat + false + false + false + false + false + false + false + false + true + false + false + false + 1 + 2 + 0 + + + + + ADBECaptionFrameRate + false + false + false + false + false + false + false + false + true + false + false + false + 2 + 2 + 102 + + + + + ADBECaptionStreamFormat + false + false + false + false + false + false + false + true + true + false + false + false + 3 + 2 + 0 + + diff --git a/pype/premiere/extensions/pype_avalon/payloads/localhost.png b/pype/premiere/extensions/pype_avalon/payloads/localhost.png new file mode 100644 index 0000000000000000000000000000000000000000..12e8ef9d87b353f3b7203ca8feee60932b7c7486 GIT binary patch literal 9910 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 literal 0 HcmV?d00001 diff --git a/pype/premiere/extensions/pype_avalon/payloads/onbeforeunload.html b/pype/premiere/extensions/pype_avalon/payloads/onbeforeunload.html new file mode 100644 index 0000000000..f4a609b77e --- /dev/null +++ b/pype/premiere/extensions/pype_avalon/payloads/onbeforeunload.html @@ -0,0 +1,343 @@ + + + + + + +PProPanel opened this page... + + + + + + + + + +

PProPanel opened this page...

+ +

...upon receiving onbeforeunload from PPro.

+ +

[This page will auto-close in 10 seconds.]

+ +

This would be a great time for your panel to close any open sockets, sign out of databases, and perform any other pre-shutdown cleanup you may want to do.

+ +

There are some restrictions: not all of CSInterface is available, and you can't pop any alerts.

+ + + + + + + + + + diff --git a/pype/premiere/extensions/pype_avalon/payloads/sequence_output_options.png b/pype/premiere/extensions/pype_avalon/payloads/sequence_output_options.png new file mode 100644 index 0000000000000000000000000000000000000000..5a83ace12bac4742bb9919e4ffbb70f63174c2b3 GIT binary patch literal 51905 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 literal 0 HcmV?d00001 diff --git a/pype/premiere/extensions/pype_avalon/payloads/test.jpg b/pype/premiere/extensions/pype_avalon/payloads/test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..611a4bf6736b8643bcc3522377fa689f72aab974 GIT binary patch literal 345752 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ℑEZH`ALOKn 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 _?d09(JqvOh$Bv{o>PJ45%PgxB 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

_~q&POYa1<5dX1n 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 oAwPmtSkQq zfsOyE+iogaZL0KZngwJnECYQo?2neg_QTOHx8MhE?7si6_2EC7w%~PjR(9Kximqq> zND1D?-5~i8R^opk1C;-S+4KQ0`3Hg_a*$_dh5|ntg2&VF(n>C%l>feT0JacPGO-8E z97mvFkmJ%hU3d_HDX28=pk3ET1fVT-ZhAkl*?AbxyjY+2y=e9Yt1zy3Vk`a`S< z>e34hw7QyhI6P3P>nEC(gnZ~}+-BED)X>AYo1k=mz0Pr9k?j4@+O%K)gY;hQ|M;@; zN{#z-Y-&@d{Be}h5-?`re@3$|x_=6Q=tJ~F68M$uG$Oit6|L3h2meuE zRzlu#H)u4tkMx<#Dkt}w?|b!X8@F^=-9_XW6w8J#?b2hTfYdN?RXV3Gv#n9>r#5mmGs)usK#f**-zK{qiL@% zYie-c9q4Av!si~u=S z@s#tNt&-{)H`OBB1O2{Ay|4;ceP|=HHzPo%0?3=dp{Fph2lTLlfS9z2RhdP^=m9)& zq$_VLDhTr1CP9;udN*L4k4uY$;@AYx+4p90FV7Z4kx#K&l0o+Fv;Z|6l050H6J)8g_pIV*I2s_9hWpGZ-B`~;VaRdH|?0NTqTPEsaP z(gwveC#SlT&-Qu4#yOK6DwtUg)iA*BLoF|!vdQm`14hZ$7^`fQQih!B!y<`mV(&694Kw&Pk)#xhYtw!BYDmo z6GS~1SDAxu9xzP`Haq&TenUn8XcDSAL9q4OY`FUHiAXP2am3&HLgy;WEb*RZ-sA;& z<{Aq$(?;lxdC&_lJzu<M#OSraZF^fb%EXi$QoTpIn=rg} zHK=a6CV+n3f~n>ASTX%xBRt|gH*tW|9$1nrN=`Ksb4!n$Hdws=x%r9L?vVk{x{#B! zb2G=^k)H0tjas61978zk^i!j(@rRGNF6oaQ>v7>Tb0w`tf0y|%LjQ7k$Bx=+TxRGP zRD6=!Td{c5m>fLup>sfyMxU{9djNgb`c&aEF)=Dg!O?Gn?#TM9Q`A#~aaOwG_8AQl z5woM&4miuWGGLf11=umET^f3ll*1>oWtK)vbP(*u<;$qhlQxxIsy^bHb|X+%)M--q z3+X;d)W_Rcm!tuJVcO^#k(7bSTx#4?OS?Sc!hb5@g(E*kz#xw!vj|Pvma1rA`IRC| zWPvR!u5d7}RR4&rtP$w-s0T1MJosD(SmTgVCmf%nz{7i6(o%)fTsY_j2?vE8bQOJ0 zIp2~~o}qJ~Wrq~1;KM@dm%^~{J^%ylB?Kl*oZGh$_ zd{Z%Y3ixV7Ue>;AHO7^-|5aIaPW};*annZYkYPQIa6F4P|#g( zSYAob8&t6={>qD;F&+%@zNL(?`MBl>M(N{#1{$+0++X0?BT6h(+u zim(68R06EQ`YOCCFwaN*-_hm;?DF-6s$7A-|8EB{ouD5=8v#g$U) zyh(gLOTlMt702gB5{*>twI&E4IVs(z>(c@pN5iI+e!BMPl&FktQJUegg9}d&nv0=F z0xW5>4sz$sKkJ-__H|EHRqjDUJmRB$Hj&eAY{56vN1s=*Bl_WA&5mGIk**vseK0IT zN=x~9

  • sU8Rs&DsbdryLvKKtxRt%5I*o4bhycWJHu#; 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 MjQ|vg(| + + + Pico Example + + + + + + +

    + + + diff --git a/pype/premiere/html/pico.js b/pype/premiere/html/pico.js new file mode 100644 index 0000000000..d00b77f2e8 --- /dev/null +++ b/pype/premiere/html/pico.js @@ -0,0 +1,1150 @@ +(function(module,exports,require){var + uuid=Date.now(), + modules={}, + updates={}, + paths={}, + env={}, + preprocessors={}, + EXT_JS='.js',EXT_JSON='.json', + MOD_PREFIX='"use strict";\n', + MOD_POSTFIX='//# sourceURL=', + PLACE_HOLDER='return arguments.callee.__proto__.apply(this,arguments)', // prevent closure + getEnv = function(k){ + return env[k] + }, + dummyCB=function(){}, + dummyLoader=function(){ + arguments[arguments.length-1]() + }, + // run the module and register the module output + define=function(url, func, mute){ + if (modules[url] && !isPlaceHolder(modules[url])) return modules[url] + var + ext=getExt(url)||EXT_JS, + pp=preprocessors[ext] + + if (pp) func=pp(url, func) + + switch(ext){ + case EXT_JS: + var + module={exports:{}}, + evt={}, + base, + getBase=function(k){ + base=getMod(k); return base + }, + m=func.call(mute?{}:evt,module.exports,getMod,module,define,getBase,pico)||module.exports + + if (base) m=inherit(m,base) + if ('function' === typeof m) m.extend=extend + if (evt.load) evt.load(m) + if (evt.update) updates[url]=[evt.update,m] + + if (!url) return m + + return modules[url]=wrap(modules[url],m) + case EXT_JSON: + try{ + return modules[url]=JSON.parse(func) + } catch(e){ + return console.error(url, e.message) + } + default: return modules[url]=func + } + }, + dummyPico={run:dummyCB,inherit:dummyCB,reload:dummyCB,parse:dummyCB,define:define,import:dummyCB,export:dummyCB,env:getEnv,ajax:dummyCB},//TODO: proxy + // call when pico.run done + ran,importRule, + schedule= (function(){ + return ('undefined'===typeof requestAnimationFrame) ? function(cb){ + return setTimeout(cb, 100) + }: requestAnimationFrame + })(), + funcBody=function(func){ + return func.substring(func.indexOf('{')+1,func.lastIndexOf('}')) + }, + getExt=function(url){ + if (!url)return null + var idx=url.lastIndexOf('.') + return -1!==idx && -1===url.indexOf('/',idx) ? url.substr(idx) : null + }, + // link to all deps + linker=function(deps, cb){ + if (!deps.length) return cb() + loader(deps.shift(),function(err){ + if (err) return cb(err) + linker(deps, cb) + }) + }, + // load files, and execute them based on ext + loader=function(url,cb){ + modules[url] = modules[url] || pico.import(url) // load node module? + if (modules[url]) return cb(null, modules[url]) + + var + idx=url.indexOf('/'), + path=~idx?paths[url.slice(0,idx)]:0, + fname= path ? url.slice(idx+1) : url + + path=path || paths['~'] || '' + + if (path instanceof Function){ + path(fname, function(err, txt){ + if (err) return cb(err) + js(url,txt,cb) + }) + }else{ + pico.ajax('get',path+fname+(getExt(url)?'':EXT_JS),null,null,function(err,state,txt){ + if (4!==state) return + if (err) return cb(err) + js(url,txt,cb) + }) + } + }, + placeHolder=function(url){ + return Object.defineProperties(Function(PLACE_HOLDER), { + name:{ value: url }, + i:{ value: uuid } + }) + }, + isPlaceHolder=function(obj){ + return 'function' === typeof obj && uuid===obj.i + }, + wrap=function(mod, obj){ + if (!mod || mod===obj) return obj + if (isPlaceHolder(mod)) mod.prototype=obj.prototype + mod.__proto__=obj + return mod + }, + unwrap=function(obj){ + return isPlaceHolder(obj) ? obj.__proto__ : obj + }, + extend=function(classMod,staticMod) { + if (!classMod) return this + return inherit(classMod, this, staticMod) + }, + inherit=function(mod1,mod2,mod3){ + var + child=unwrap(mod1), + ancestor=unwrap(mod2), + cType=typeof child, + aType=typeof ancestor, + fn, props + + switch(cType){ + case 'function': + fn=child + props=child.prototype + break + case 'object': + if (cType===aType){ + child.__proto__=ancestor // dun use wrap, inherit not wrap + return child + } + fn= function(){ + return ancestor.apply(this,arguments) + } + props=child + break + default: return child + } + Object.assign(fn,ancestor,unwrap(mod3)) + switch(aType){ + case 'function': + fn.prototype=Object.assign(Object.create(ancestor.prototype),props,{constructor: ancestor}) + return fn + case 'object': + fn.prototype=Object.assign(Object.create(ancestor),props) + return fn + default: return child + } + }, + getMod=function(url,cb){ + var mod=modules[url] + if(void 0===mod){ + if (cb) return loader(url,cb) + return modules[url]=placeHolder(url) + } + cb && setTimeout(cb, 0, null, mod) // make sure consistent async behaviour + return mod + }, + // do not run the module but getting the deps and inherit + compile=function(url,txt,deps,me){ + me=me||dummyPico + var + script=url ? MOD_PREFIX+txt+(env.live ? '' : MOD_POSTFIX+url) : txt, + frequire=function(k){ + if(!modules[k])deps.push(k);return modules[k] + } + + try{ + var func=Function('exports','require','module','define','inherit','pico',script) + } catch(e){ + return console.error(url, e.message) + } + + func.call({}, {},frequire,{},define,frequire,me) + return func + }, + // js file executer + js=function(url,txt,cb){ + cb=cb||dummyCB + if(modules[url]) return cb(null, modules[url]) + if(EXT_JS !== (getExt(url)||EXT_JS)) return cb(null, define(url,txt)) + + var + deps=[], + func=compile(url,txt,deps) + + if(url)modules[url]=placeHolder(url) + + linker(deps, function(err){ + if (err) return cb(err) + + cb(null,define(url,func)) + }) + }, + tick=function(timestamp){ + var f + for (var k in updates) { + (f = updates[k]) && f[0](f[1], timestamp) + } + schedule(tick) + } + +var pico=module[exports]={ + run:function(options,func){ + pico.ajax=options.ajax||pico.ajax + paths=options.paths||paths + env=options.env||env + preprocessors=options.preprocessors||preprocessors + importRule=options.importRule + + var pp + for(var url in modules){ + (pp=preprocessors[getExt(url)||EXT_JS]) && (modules[url]=pp(url, modules[url])) + } + + (options.onLoad||dummyLoader)(function(){ + js(options.name||null,funcBody(func.toString()),function(err,main){ + if (err) return console.error(err) + + main && main() + ran && ran() + + schedule(tick) + }) + }) + }, + reload:function(url, script, cb){ + if ('function'===typeof script) cb=script + cb=cb||dummyCB + var reattach=function(err, m){ + if (err) return cb(err) + cb(null, modules[url]=wrap(modules[url], m)) + } + delete modules[url] + if (cb===script) loader(url, reattach) + else js(url, script, reattach) + }, + parse:js, + define:define, + import:function(url){ + if (Array.isArray(importRule) && importRule.some(function(rx){ + return rx.match(url) + })) + return require(url) + }, + export:getMod, + env:getEnv +} +define('pico/func',function(exports,require,module,define,inherit,pico){ + function callerFormat(_, stack){ + var r = stack[0] + var trace = [] + + for (var i = 0, s; (s = stack[i]); i++){ + trace.push(s.toString()) + } + + return { + typeName: r.getTypeName(), + functionName: r.getFunctionName(), + methodName: r.getMethodName(), + fileName: r.getFileName(), + line: r.getLineNumber(), + column: r.getColumnNumber(), + evalOrigin: r.getEvalOrigin(), + isTopLevel: r.isToplevel(), + isEval: r.isEval(), + isNative: r.isNative(), + isConstructor: r.isConstructor(), + trace: trace + } + } + + return { + reflect: function callee(func, limit){ + var orgPrepare = Error.prepareStackTrace + var orgCount = Error.stackTraceLimit + + Error.prepareStackTrace = callerFormat + Error.stackTraceLimit = limit || 1 + + var err = new Error + Error.captureStackTrace(err, func || callee) + var s = err.stack + + Error.stackTraceLimit = orgCount + Error.prepareStackTrace = orgPrepare + + return s + } + } +}) +define('pico/json',function(exports,require,module,define,inherit,pico){ + return { + parse:function(pjson,deep){ + return JSON.parse(pjson[0], function(k, v){ + switch(k[0]){ + case '$': if(deep)return JSON.parse(pjson[v]) + case '_': return pjson[v] + default: return v + } + }) + }, + stringify:function(json, deep){ + var pjson=[] + pjson.unshift(JSON.stringify(json, function(k, v){ + switch(k[0]){ + case '$': if(deep)return pjson.push(JSON.stringify(v)) + case '_': return pjson.push(v) + default: return v + } + })) + return pjson + }, + path: function(json){ + var current = json + + function unwrap(arr, i) { + return i < 0 ? (arr.length || 0) + i : i + } + + function search(key, obj) { + if (!key || !obj || 'object' !== typeof obj) return + if (obj[key]) return obj[key] + + var ret = [] + var found + var ks = Object.keys(obj) + for(var i=0,k; (k=ks[i]); i++){ + found = search(key, obj[k]) + found && (Array.isArray(found) ? ret.push.apply(ret,found) : ret.push(found)) + } + return ret.length ? ret : void 0 + } + + function jwalk(){ + if (!arguments.length) return current + var isArr = Array.isArray(current) + + switch(typeof arguments[0]){ + case 'string': + var str = arguments[0] + + switch(str){ + default: + if (isArr){ + if (!current[0][str]) break + current = current.map( function(o) { + return o[str] + } ) + }else{ + if (!current[str]) break + current = current[str] + } + break + case '..': + current = search(arguments[1], current) || current + break + case '*': + if (isArr) break + current = Object.keys(current).map( function(k) { + return current[k] + } ) + break + } + break + case 'object': + var arr = arguments[0] + if (!Array.isArray(arr)) break + current = arr.map( function(i) { + return current[unwrap(current, i)] + } ) + break + case 'number': + var start = unwrap(current, arguments[0]) + var end = unwrap(current, arguments[1]) || current.length-1 || 0 + var interval = arguments[2] || 1 + var next = [] + var a = [] + for (var i=start; i <= end; i+=interval){ + next.push(current[i]) + a.push(i) + } + current = next + break + case 'function': + var cb = arguments[0] + current = isArr ? current.map( cb ) : cb(current) + break + } + Array.isArray(current) && (current = current.filter( function(o) { + return null != o + } )) + if (1 === current.length) current = current.pop() + return jwalk + } + return jwalk + } + } +}) +define('pico/obj',function(){ + var allows = ['object','function'] + var specialFunc = ['constructor'] + return { + extend: function extend(to, from, options){ + var tf=allows.indexOf(typeof to) + var ft=allows.indexOf(typeof from) + if (1 === tf) tf = allows.indexOf(typeof to.__proto__) + if (1 === ft) ft = allows.indexOf(typeof from.__proto__) + if (!to || null === from || (-1 === ft && ft === tf)) return void 0 === from ? to : from + if (1===ft) { + if(ft === tf)from.prototype=to + return from + } + options=options||{} + var tidy = options.tidy, key, value + if (Array.isArray(from)){ + if (options.mergeArr){ + to = to || [] + // TODO: change unique to Set when is more commonly support on mobile + var i, l, unique={} + for (i=0,l=to.length; i 1){ + switch(token.charAt(0)){ + case '%': + case ':': + case '#': + token = params[token.slice(1)] + if (!token) return mandatory ? '' : url + break + } + } + url += prefix + token + return buildRest(url, tokens, index, params, prefix, mandatory) + } + + return { + codec: function(num, str){ + for(var i=0,ret='',c; (c=str.charCodeAt(i)); i++){ + ret += String.fromCharCode(c ^ num) + } + return ret + }, + hash: function(str){ + for (var i=0,h=0,c; (c=str.charCodeAt(i)); i++) { + // same as h = ((h<<5)-h)+c; h = h | 0 or h = h & h <= Convert to 32bit integer + h = (h<<3)-h+c | 0 + } + return h + }, + rand: function(){ + return Random().toString(36).substr(2) + }, + pad:function(val,n,str){ + return this.tab(val,n,str)+val + }, + tab:function(val,n,str){ + var c=n-String(val).length+1 + return Array(c>0?c:0).join(str||'0') + }, + // src:https://raw.githubusercontent.com/krasimir/absurd/master/lib/processors/html/helpers/TemplateEngine.js + template:function(html){ + var re = /<%(.+?)%>/g, + reExp = /(^( )?(var|if|for|else|switch|case|break|{|}|;))(.*)?/g, + code = 'var r=[];\n', + cursor = 0, + match + var add = function(line, js) { + js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') : + (code += line !== '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '') + return add + } + while((match = re.exec(html))) { + add(html.slice(cursor, match.index))(match[1], true) + cursor = match.index + match[0].length + } + add(html.substr(cursor, html.length - cursor)) + return partial(new Function('pico', 'd', (code + 'return r.join("");').replace(/[\r\t\n]/g, ' '))) + }, + // precedence | / # : % + compileRest:function(rest, output){ + output=output||[] + if (-1 === rest.search('[|#:%]')) return output + compileRestOptional(rest.split('|'),[rest],function(err,codes){ + if (err) throw err + output.push(codes) + }) + return output + }, + execRest:function(api,build,params){ + var units=api.split('/') + for(var i=0,route,j,opt; (route=build[i]); i++){ + if (matchRestCode(units, route[1], params)){ + for(j=2; (opt=route[j]); j++){ + if (!matchRestCode(units, opt, params)) break + } + return route[0] + } + } + return null + }, + buildRest:function(api,build,params,relativePath){ + var codes + for (var i=0, b; (b = build[i]); i++){ + if (api === b[0]){ + codes = b + break + } + } + if (!codes) return api + var url = buildRest('', codes[1], 0, params, '/', true) + if (!url) return false + var c + for (i=2; (c = codes[i]); i++){ + url = buildRest(url, c, 0, params, '/') + } + // remove the first slash + if (relativePath || 1 === url.indexOf('http')) url = url.slice(1) + return ~url.search('[#%]') ? false : url + } + } +}) +define('pico/time',function(){ + var + Max=Math.max, + Min=Math.min, + Floor=Math.floor, + Ceil=Math.ceil, + SEC = 1000, + MIN = 60*SEC, + SAFE_MIN = 90*SEC, + HR = 60*MIN, + DAY= 24*HR, + daynum=function(end,start){ + return (end-start) / DAY + }, + weeknum=function(date, us, yearoff){ + var + offset=us?1:0, + jan1= new Date(date.getFullYear()+(yearoff||0), 0, 1), + day1=((7-jan1.getDay())%7 + offset), + days=daynum(date, jan1) + + if (days > day1) return Ceil((days - day1)/7) + return weeknum(date, us, -1) + }, + parseQuark=function(quark, min, max){ + var + q=quark.split('/'), + q0=q[0] + + if ('*'===q0){ + q[0]=min + }else{ + q0 = parseInt(q0) + q0 = Max(min, q0) + q0 = Min(max, q0) + q[0] = q0 + } + + if (1===q.length) q.push(0) // interval=1 + else q[1]=parseInt(q[1]) + + return q + }, + parseAtom=function(atom, min, max){ + if ('*'===atom) return 0 + var + ret=[], + list=atom.split(',') + for(var i=0,l,j,r,r0,r1,rm,ri; (l=list[i]); i++){ + r=l.split('-') + r0=parseQuark(r[0],min,max) + if (1===r.length){ + ri=r0[1] + if (ri) for(j=r0[0]; j<=max; j+=ri) ret.push(j) + else ret.push(r0[0]) + continue + } + r1=parseQuark(r[1],min,max) + j=r0[0] + rm=r1[0] + ri=r1[1]||1 + + if (j>rm){ + // wrap around + for(; j>=rm; j-=ri) { + ret.push(j) + } + }else{ + for(; j<=rm; j+=ri) { + ret.push(j) + } + } + } + ret.sort(function(a,b){ + return a-b + }) + return ret + }, + closest=function(now, list, max){ + if (!list) return now + if (Max.apply(Math, list.concat(now))===now) return now+(max-now)+Min.apply(Math, list) + for(var i=0,l=list.length; i=now) return list[i] + } + console.error('not suppose to be here',now, list, max) + }, + nearest=function(now, count, mins, hrs, doms, mons, dows, yrs, cb){ + if (count++ > 3) return cb(0) + + var + min=closest(now.getMinutes(), mins, 60), + hr=closest(now.getHours()+Floor(min/60), hrs, 24), + dom=now.getDate(), + mon=now.getMonth(), + yr=now.getFullYear(), + days=(new Date(yr, mon, 0)).getDate() + + if (dows){ + // if dow set ignore dom fields + var + day=now.getDay()+Floor(hr/24), + dow=closest(day, dows, 7) + dom+=(dow-day) + }else{ + dom=closest(dom+Floor(hr/24), doms, days) + } + mon=closest(mon+1+Floor(dom/days), mons, 12) + + if (now.getMonth()+1 !== mon) return nearest(new Date(yr, mon-1), count, mins, hrs, doms, mons, dows, yrs, cb) + + yr=closest(yr+Floor((mon-1)/12), yrs, 0) + if (now.getFullYear() !== yr) return nearest(new Date(yr, mon-1), count, mins, hrs, doms, mons, dows, yrs, cb) + + var then=(new Date(yr, (mon-1)%12)).getTime() + then+=(dom%days-1)*DAY // beginning of day + then+=(hr%24)*HR + then+=(min%60)*MIN + + return cb(then) + } + + return { + // fmt: min hr dom M dow yr + parse: function(fmt){ + var atoms=fmt.split(' ') + if (atoms.length < 6) return 0 + var mins=parseAtom(atoms[0], 0, 59) + if (null == mins) return 0 + var hrs=parseAtom(atoms[1], 0, 23) + if (null == hrs) return 0 + var doms=parseAtom(atoms[2], 1, 31) + if (null == doms) return 0 + var mons=parseAtom(atoms[3], 1, 12) + if (null == mons) return 0 + var dows=parseAtom(atoms[4], 0, 6) + if (null == dows) return 0 + var yrs=parseAtom(atoms[5], 1975, 2075) + if (null == yrs) return 0 + + return [mins, hrs, doms, mons, dows, yrs] + }, + nearest:function(mins, hrs, doms, mons, dows, yrs, now){ + now = now || Date.now() + return nearest(new Date(now + SAFE_MIN), 0, mins, hrs, doms, mons, dows, yrs, function(then){ + return then + }) + }, + daynum:daynum, + weeknum:weeknum, + // node.js should compile with + // ./configure --with-intl=full-icu --download=all + // ./configure --with-intl=small-icu --download=all + day: function(date, locale){ + var + now=new Date, + mid=new Date(now.getFullYear(),now.getMonth(),now.getDate(),12,0,0), + diff=mid-date, + DAY15=DAY*1.5 + if ((diff >= 0 && diff <= DAY15) || (diff <= 0 && diff > -DAY15)){ + if (now.getDate()===date.getDate())return'Today' + if (now > date) return 'Yesterday' + return 'Tomorrow' + } + + locale=locale||'en-US' + if (now.getFullYear()===date.getFullYear() && weeknum(now)===weeknum(date)) return date.toLocaleDateString(locale, {weekday:'long'}) + return date.toLocaleDateString(locale,{weekday: 'short', month: 'short', day: 'numeric'}) + } + } +}) +define('pico/web',function(exports,require,module,define,inherit,pico){ + var + PJSON=require('pico/json'), + Abs = Math.abs,Floor=Math.floor,Random=Math.random, + API_ACK = 'ack', + PT_HEAD = 1, + PT_BODY = 2, + isOnline = true, + stdCB = function(err){ + if (err) console.error(err) + }, + appendFD = function(fd, name, value){ + fd.append(name, value) + }, + appendObj = function(obj, name, value){ + obj[name] = value + }, + timeSync = function(net, cb){ + cb = cb || stdCB + pico.ajax('get', net.url, null, null, function(err, readyState, response){ + if (4 !== readyState) return + if (err) return cb(err) + var st = parseInt(response) + if (isNaN(st)) return cb('invalid timesync response') + net.serverTime = st + net.serverTimeAtClient = Date.now() + cb() + }) + }, + onResponse = function(err, readyState, response, net){ + if (err && 4===readyState) timeSync(net) // sync time, in case it was due to time error + + // schedule next update + switch(readyState){ + case 2: // send() and header received + net.head = null + net.currPT = PT_HEAD + net.resEndPos = 0 + break + case 3: break // body loading + case 4: // body received + break + } + + if (!response) return + + var + startPos = net.resEndPos, endPos = -1, + sep = net.delimiter, + sepLen = sep.length, + body = net.body, + head + + try{ + while(true){ + endPos = response.indexOf(sep, startPos) + if (-1 === endPos) break + + switch(net.currPT){ + case PT_HEAD: + net.head = JSON.parse(response.substring(startPos, endPos)) + body.length = 0 + net.currPT = PT_BODY + break + case PT_BODY: + body.push(response.substring(startPos, endPos)) + break + } + head = net.head + if (head && head.len === body.length){ + net.currPT = PT_HEAD + + if (head.resId){ + net.request(API_ACK, {resId:head.resId}) + } + if (!head.reqId) { + console.error('incomplete response header: '+JSON.stringify(head)) + return + } + if (net.cullAge && net.cullAge < Abs(net.getServerTime()-head.date)) { + console.error('invalid server time: '+JSON.stringify(head)+' '+Abs(net.getServerTime()-head.date)) + return + } + if (net.secretKey && body.length){ + var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.MD5, net.secretKey+head.date) + + //key: CryptoJS.HmacMD5(JSON.stringify(data), this.secretKey+t).toString(CryptoJS.enc.Base64), + for(var i=0,l=body.length; i settings: " + "\n\tip: {0}" + "\n\tport: {1}" + "\n\tuse_debugger: {2}" + "\n\tuse_reloader: {3}" + "\n\tthreaded: {4}".format( + ip, port, use_debugger, use_reloader, threaded + )) + + run_app(app, ip=ip, port=port, use_debugger=use_debugger, + use_reloader=use_reloader, threaded=threaded) diff --git a/pype/vendor/pysync.py b/pype/vendor/pysync.py new file mode 100644 index 0000000000..139c8eb538 --- /dev/null +++ b/pype/vendor/pysync.py @@ -0,0 +1,206 @@ +#!/usr/local/bin/python3 +# https://github.com/snullp/pySync/blob/master/pySync.py + +import sys +import shutil +import os +import time +import configparser +from os.path import ( + getsize, + getmtime, + isfile, + isdir, + join, + abspath, + expanduser, + realpath +) +import logging + +log = logging.getLogger(__name__) + +ignoreFiles = ("Thumbs.db", ".DS_Store") + +# this feature is not yet implemented +ignorePaths = [] + +if os.name == 'nt': + # msvcrt can't function correctly in IDLE + if 'idlelib.run' in sys.modules: + print("Please don't run this script in IDLE.") + sys.exit(0) + import msvcrt + + def flush_input(str, set=None): + if not set: + while msvcrt.kbhit(): + ch = msvcrt.getch() + if ch == '\xff': + print("msvcrt is broken, this is weird.") + sys.exit(0) + return input(str) + else: + return set +else: + import select + + def flush_input(str, set=None): + if not set: + while len(select.select([sys.stdin.fileno()], [], [], 0.0)[0]) > 0: + os.read(sys.stdin.fileno(), 4096) + return input(str) + else: + return set + + +def compare(fa, fb, options_input=[]): + if isfile(fa) == isfile(fb): + if isdir(fa): + walktree(fa, fb) + elif isfile(fa): + if getsize(fa) != getsize(fb) \ + or int(getmtime(fa)) != int(getmtime(fb)): + log.info(str((fa, ': size=', getsize(fa), 'mtime=', + time.asctime(time.localtime(getmtime(fa)))))) + log.info(str((fb, ': size=', getsize(fb), 'mtime=', + time.asctime(time.localtime(getmtime(fb)))))) + if getmtime(fa) > getmtime(fb): + act = '>' + else: + act = '<' + + set = [i for i in options_input if i in [">", "<"]][0] + + s = flush_input('What to do?(>,<,r,n)['+act+']', set=set) + if len(s) > 0: + act = s[0] + if act == '>': + shutil.copy2(fa, fb) + elif act == '<': + shutil.copy2(fb, fa) + elif act == 'r': + if isdir(fa): + shutil.rmtree(fa) + elif isfile(fa): + os.remove(fa) + else: + log.info(str(('Remove: Skipping', fa))) + if isdir(fb): + shutil.rmtree(fb) + elif isfile(fb): + os.remove(fb) + else: + log.info(str(('Remove: Skipping', fb))) + + else: + log.debug(str(('Compare: Skipping non-dir and non-file', fa))) + else: + log.error(str(('Error:', fa, ',', fb, 'have different file type'))) + + +def copy(fa, fb, options_input=[]): + set = [i for i in options_input if i in ["y"]][0] + s = flush_input('Copy '+fa+' to another side?(r,y,n)[y]', set=set) + if len(s) > 0: + act = s[0] + else: + act = 'y' + if act == 'y': + if isdir(fa): + shutil.copytree(fa, fb) + elif isfile(fa): + shutil.copy2(fa, fb) + else: + log.debug(str(('Copy: Skipping ', fa))) + elif act == 'r': + if isdir(fa): + shutil.rmtree(fa) + elif isfile(fa): + os.remove(fa) + else: + log.debug(str(('Remove: Skipping ', fa))) + + +stoentry = [] +tarentry = [] + + +def walktree(source, target, options_input=[]): + srclist = os.listdir(source) + tarlist = os.listdir(target) + if '!sync' in srclist: + return + if '!sync' in tarlist: + return + # files in source dir... + for f in srclist: + if f in ignoreFiles: + continue + spath = join(source, f) + tpath = join(target, f) + if spath in ignorePaths: + continue + if spath in stoentry: + # just in case target also have this one + if f in tarlist: + del tarlist[tarlist.index(f)] + continue + + # if also exists in target dir + if f in tarlist: + del tarlist[tarlist.index(f)] + compare(spath, tpath, options_input) + + # exists in source dir only + else: + copy(spath, tpath, options_input) + + # exists in target dir only + for f in tarlist: + if f in ignoreFiles: + continue + spath = join(source, f) + tpath = join(target, f) + if tpath in ignorePaths: + continue + if tpath in tarentry: + continue + copy(tpath, spath) + + +if __name__ == '__main__': + stoconf = configparser.RawConfigParser() + tarconf = configparser.RawConfigParser() + stoconf.read("pySync.ini") + tarconf.read(expanduser("~/.pysync")) + stoname = stoconf.sections()[0] + tarname = tarconf.sections()[0] + + # calculate storage's base folder + if stoconf.has_option(stoname, 'BASE'): + stobase = abspath(stoconf.get(stoname, 'BASE')) + stoconf.remove_option(stoname, 'BASE') + else: + stobase = os.getcwd() + + # same, for target's base folder + if tarconf.has_option(tarname, 'BASE'): + tarbase = abspath(tarconf.get(tarname, 'BASE')) + tarconf.remove_option(tarname, 'BASE') + else: + tarbase = expanduser('~/') + + print("Syncing between", stoname, "and", tarname) + sto_content = {x: realpath(join(stobase, stoconf.get(stoname, x))) + for x in stoconf.options(stoname)} + tar_content = {x: realpath(join(tarbase, tarconf.get(tarname, x))) + for x in tarconf.options(tarname)} + stoentry = [sto_content[x] for x in sto_content] + tarentry = [tar_content[x] for x in tar_content] + + for folder in sto_content: + if folder in tar_content: + print('Processing', folder) + walktree(sto_content[folder], tar_content[folder]) + print("Done.") diff --git a/pype/vendor/requests/__init__.py b/pype/vendor/requests/__init__.py index a5b3c9c33f..bc168ee533 100644 --- a/pype/vendor/requests/__init__.py +++ b/pype/vendor/requests/__init__.py @@ -22,7 +22,7 @@ usage: ... or POST: >>> payload = dict(key1='value1', key2='value2') - >>> r = requests.post('http://httpbin.org/post', data=payload) + >>> r = requests.post('https://httpbin.org/post', data=payload) >>> print(r.text) { ... @@ -57,10 +57,10 @@ def check_compatibility(urllib3_version, chardet_version): # Check urllib3 for compatibility. major, minor, patch = urllib3_version # noqa: F811 major, minor, patch = int(major), int(minor), int(patch) - # urllib3 >= 1.21.1, <= 1.23 + # urllib3 >= 1.21.1, <= 1.24 assert major == 1 assert minor >= 21 - assert minor <= 23 + assert minor <= 24 # Check chardet for compatibility. major, minor, patch = chardet_version.split('.')[:3] @@ -79,14 +79,14 @@ def _check_cryptography(cryptography_version): return if cryptography_version < [1, 3, 4]: - warning = 'Old version of cryptography ({0}) may cause slowdown.'.format(cryptography_version) + warning = 'Old version of cryptography ({}) may cause slowdown.'.format(cryptography_version) warnings.warn(warning, RequestsDependencyWarning) # Check imported dependencies for compatibility. try: check_compatibility(urllib3.__version__, chardet.__version__) except (AssertionError, ValueError): - warnings.warn("urllib3 ({0}) or chardet ({1}) doesn't match a supported " + warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported " "version!".format(urllib3.__version__, chardet.__version__), RequestsDependencyWarning) @@ -123,12 +123,7 @@ from .exceptions import ( # Set default logging handler to avoid "No handler found" warnings. import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass +from logging import NullHandler logging.getLogger(__name__).addHandler(NullHandler()) diff --git a/pype/vendor/requests/__version__.py b/pype/vendor/requests/__version__.py index ef61ec0f55..f5b5d03671 100644 --- a/pype/vendor/requests/__version__.py +++ b/pype/vendor/requests/__version__.py @@ -5,8 +5,8 @@ __title__ = 'requests' __description__ = 'Python HTTP for Humans.' __url__ = 'http://python-requests.org' -__version__ = '2.19.1' -__build__ = 0x021901 +__version__ = '2.21.0' +__build__ = 0x022100 __author__ = 'Kenneth Reitz' __author_email__ = 'me@kennethreitz.org' __license__ = 'Apache 2.0' diff --git a/pype/vendor/requests/adapters.py b/pype/vendor/requests/adapters.py index a4b0284208..fa4d9b3cc9 100644 --- a/pype/vendor/requests/adapters.py +++ b/pype/vendor/requests/adapters.py @@ -26,6 +26,7 @@ from urllib3.exceptions import ProtocolError from urllib3.exceptions import ReadTimeoutError from urllib3.exceptions import SSLError as _SSLError from urllib3.exceptions import ResponseError +from urllib3.exceptions import LocationValueError from .models import Response from .compat import urlparse, basestring @@ -35,7 +36,8 @@ from .utils import (DEFAULT_CA_BUNDLE_PATH, extract_zipped_paths, from .structures import CaseInsensitiveDict from .cookies import extract_cookies_to_jar from .exceptions import (ConnectionError, ConnectTimeout, ReadTimeout, SSLError, - ProxyError, RetryError, InvalidSchema, InvalidProxyURL) + ProxyError, RetryError, InvalidSchema, InvalidProxyURL, + InvalidURL) from .auth import _basic_auth_str try: @@ -127,8 +129,7 @@ class HTTPAdapter(BaseAdapter): self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) def __getstate__(self): - return dict((attr, getattr(self, attr, None)) for attr in - self.__attrs__) + return {attr: getattr(self, attr, None) for attr in self.__attrs__} def __setstate__(self, state): # Can't handle by adding 'proxy_manager' to self.__attrs__ because @@ -224,7 +225,7 @@ class HTTPAdapter(BaseAdapter): if not cert_loc or not os.path.exists(cert_loc): raise IOError("Could not find a suitable TLS CA certificate bundle, " - "invalid path: {0}".format(cert_loc)) + "invalid path: {}".format(cert_loc)) conn.cert_reqs = 'CERT_REQUIRED' @@ -246,10 +247,10 @@ class HTTPAdapter(BaseAdapter): conn.key_file = None if conn.cert_file and not os.path.exists(conn.cert_file): raise IOError("Could not find the TLS certificate file, " - "invalid path: {0}".format(conn.cert_file)) + "invalid path: {}".format(conn.cert_file)) if conn.key_file and not os.path.exists(conn.key_file): raise IOError("Could not find the TLS key file, " - "invalid path: {0}".format(conn.key_file)) + "invalid path: {}".format(conn.key_file)) def build_response(self, req, resp): """Builds a :class:`Response ` object from a urllib3 @@ -378,7 +379,7 @@ class HTTPAdapter(BaseAdapter): when subclassing the :class:`HTTPAdapter `. - :param proxies: The url of the proxy being used for this request. + :param proxy: The url of the proxy being used for this request. :rtype: dict """ headers = {} @@ -407,7 +408,10 @@ class HTTPAdapter(BaseAdapter): :rtype: requests.Response """ - conn = self.get_connection(request.url, proxies) + try: + conn = self.get_connection(request.url, proxies) + except LocationValueError as e: + raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) @@ -421,7 +425,7 @@ class HTTPAdapter(BaseAdapter): timeout = TimeoutSauce(connect=connect, read=read) except ValueError as e: # this may raise a string formatting error. - err = ("Invalid timeout {0}. Pass a (connect, read) " + err = ("Invalid timeout {}. Pass a (connect, read) " "timeout tuple, or a single float to set " "both timeouts to the same value".format(timeout)) raise ValueError(err) @@ -471,11 +475,10 @@ class HTTPAdapter(BaseAdapter): # Receive the response from the server try: - # For Python 2.7+ versions, use buffering of HTTP - # responses + # For Python 2.7, use buffering of HTTP responses r = low_conn.getresponse(buffering=True) except TypeError: - # For compatibility with Python 2.6 versions and back + # For compatibility with Python 3.3+ r = low_conn.getresponse() resp = HTTPResponse.from_httplib( diff --git a/pype/vendor/requests/api.py b/pype/vendor/requests/api.py index a2cc84d769..abada96d46 100644 --- a/pype/vendor/requests/api.py +++ b/pype/vendor/requests/api.py @@ -18,8 +18,10 @@ def request(method, url, **kwargs): :param method: method for the new :class:`Request` object. :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param data: (optional) Dictionary or list of tuples ``[(key, value)]`` (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. @@ -47,7 +49,7 @@ def request(method, url, **kwargs): Usage:: >>> import requests - >>> req = requests.request('GET', 'http://httpbin.org/get') + >>> req = requests.request('GET', 'https://httpbin.org/get') """ @@ -62,7 +64,8 @@ def get(url, params=None, **kwargs): r"""Sends a GET request. :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. + :param params: (optional) Dictionary, list of tuples or bytes to send + in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :return: :class:`Response ` object :rtype: requests.Response @@ -102,7 +105,8 @@ def post(url, data=None, json=None, **kwargs): r"""Sends a POST request. :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param json: (optional) json data to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :return: :class:`Response ` object @@ -116,7 +120,8 @@ def put(url, data=None, **kwargs): r"""Sends a PUT request. :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param json: (optional) json data to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :return: :class:`Response ` object @@ -130,7 +135,8 @@ def patch(url, data=None, **kwargs): r"""Sends a PATCH request. :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param json: (optional) json data to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :return: :class:`Response ` object diff --git a/pype/vendor/requests/auth.py b/pype/vendor/requests/auth.py index 4ae459474d..bdde51c7fd 100644 --- a/pype/vendor/requests/auth.py +++ b/pype/vendor/requests/auth.py @@ -38,7 +38,7 @@ def _basic_auth_str(username, password): if not isinstance(username, basestring): warnings.warn( "Non-string usernames will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({0!r}) to " + "3.0.0. Please convert the object you've passed in ({!r}) to " "a string or bytes object in the near future to avoid " "problems.".format(username), category=DeprecationWarning, @@ -48,7 +48,7 @@ def _basic_auth_str(username, password): if not isinstance(password, basestring): warnings.warn( "Non-string passwords will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({0!r}) to " + "3.0.0. Please convert the object you've passed in ({!r}) to " "a string or bytes object in the near future to avoid " "problems.".format(password), category=DeprecationWarning, diff --git a/pype/vendor/requests/cacert.pem b/pype/vendor/requests/cacert.pem deleted file mode 100644 index 7691c07658..0000000000 --- a/pype/vendor/requests/cacert.pem +++ /dev/null @@ -1,5660 +0,0 @@ - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Low-Value Services Root" -# Serial: 1 -# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc -# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d -# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7 ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Public Services Root" -# Serial: 1 -# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f -# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5 -# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Qualified Certificates Root" -# Serial: 1 -# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb -# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf -# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16 ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Global CA 2" -# Serial: 1 -# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9 -# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d -# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85 ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Subject: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Label: "Visa eCommerce Root" -# Serial: 25952180776285836048024890241505565794 -# MD5 Fingerprint: fc:11:b8:d8:08:93:30:00:6d:23:f9:7e:eb:52:1e:02 -# SHA1 Fingerprint: 70:17:9b:86:8c:00:a4:fa:60:91:52:22:3f:9f:3e:32:bd:e0:05:62 -# SHA256 Fingerprint: 69:fa:c9:bd:55:fb:0a:c7:8d:53:bb:ee:5c:f1:d5:97:98:9f:d0:aa:ab:20:a2:51:51:bd:f1:73:3e:e7:d1:22 ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -# Issuer: CN=Certum CA O=Unizeto Sp. z o.o. -# Subject: CN=Certum CA O=Unizeto Sp. z o.o. -# Label: "Certum Root CA" -# Serial: 65568 -# MD5 Fingerprint: 2c:8f:9f:66:1d:18:90:b1:47:26:9d:8e:86:82:8c:a9 -# SHA1 Fingerprint: 62:52:dc:40:f7:11:43:a2:2f:de:9e:f7:34:8e:06:42:51:b1:81:18 -# SHA256 Fingerprint: d8:e0:fe:bc:1d:b2:e3:8d:00:94:0f:37:d2:7d:41:34:4d:99:3e:73:4b:99:d5:65:6d:97:78:d4:d8:14:36:24 ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E -jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo -ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI -ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu -Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg -AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 -HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA -uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa -TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg -xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q -CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x -O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs -6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=Secure Certificate Services O=Comodo CA Limited -# Subject: CN=Secure Certificate Services O=Comodo CA Limited -# Label: "Comodo Secure Services root" -# Serial: 1 -# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd -# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1 -# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8 ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - -# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited -# Subject: CN=Trusted Certificate Services O=Comodo CA Limited -# Label: "Comodo Trusted Services root" -# Serial: 1 -# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27 -# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd -# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Label: "QuoVadis Root CA" -# Serial: 985026699 -# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 -# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 -# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 -# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 -# Label: "Security Communication Root CA" -# Serial: 0 -# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a -# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 -# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -# Issuer: CN=Sonera Class2 CA O=Sonera -# Subject: CN=Sonera Class2 CA O=Sonera -# Label: "Sonera Class 2 Root CA" -# Serial: 29 -# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb -# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 -# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - -# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN USERFirst Hardware Root CA" -# Serial: 91374294542884704022267039221184531197 -# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39 -# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7 -# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37 ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Subject: CN=Chambers of Commerce Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Label: "Camerfirma Chambers of Commerce Root" -# Serial: 0 -# MD5 Fingerprint: b0:01:ee:14:d9:af:29:18:94:76:8e:f1:69:33:2a:84 -# SHA1 Fingerprint: 6e:3a:55:a4:19:0c:19:5c:93:84:3c:c0:db:72:2e:31:30:61:f0:b1 -# SHA256 Fingerprint: 0c:25:8a:12:a5:67:4a:ef:25:f2:8b:a7:dc:fa:ec:ee:a3:48:e5:41:e6:f5:cc:4e:e6:3b:71:b3:61:60:6a:c3 ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg -b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa -MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB -ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw -IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B -AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb -unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d -BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq -7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 -0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX -roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG -A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j -aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p -26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA -BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud -EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN -BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB -AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd -p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi -1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc -XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 -eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu -tGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Subject: CN=Global Chambersign Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Label: "Camerfirma Global Chambersign Root" -# Serial: 0 -# MD5 Fingerprint: c5:e6:7b:bf:06:d0:4f:43:ed:c4:7a:65:8a:fb:6b:19 -# SHA1 Fingerprint: 33:9b:6b:14:50:24:9b:55:7a:01:87:72:84:d9:e0:2f:c3:d2:d8:e9 -# SHA256 Fingerprint: ef:3c:b4:17:fc:8e:bf:6f:97:87:6c:9e:4e:ce:39:de:1e:a5:fe:64:91:41:d1:02:8b:7d:11:c0:b2:29:8c:ed ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo -YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 -MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy -NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G -A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA -A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 -Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s -QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV -eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 -B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh -z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T -AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i -ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w -TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH -MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD -VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE -VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B -AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM -bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi -ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG -VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c -ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ -AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 1 -# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16 -# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f -# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- - -# Issuer: O=Government Root Certification Authority -# Subject: O=Government Root Certification Authority -# Label: "Taiwan GRCA" -# Serial: 42023070807708724159991140556527066870 -# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e -# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 -# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ -MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow -PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR -IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q -gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy -yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts -F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 -jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx -ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC -VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK -YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH -EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN -Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud -DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE -MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK -UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf -qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK -ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE -JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 -hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 -EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm -nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX -udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz -ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe -LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl -pYYsfPQS ------END CERTIFICATE----- - -# Issuer: CN=Swisscom Root CA 1 O=Swisscom OU=Digital Certificate Services -# Subject: CN=Swisscom Root CA 1 O=Swisscom OU=Digital Certificate Services -# Label: "Swisscom Root CA 1" -# Serial: 122348795730808398873664200247279986742 -# MD5 Fingerprint: f8:38:7c:77:88:df:2c:16:68:2e:c2:e2:52:4b:b8:f9 -# SHA1 Fingerprint: 5f:3a:fc:0a:8b:64:f6:86:67:34:74:df:7e:a9:a2:fe:f9:fa:7a:51 -# SHA256 Fingerprint: 21:db:20:12:36:60:bb:2e:d4:18:20:5d:a1:1e:e7:a8:5a:65:e2:bc:6e:55:b5:af:7e:78:99:c8:a2:66:d9:2e ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 -m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih -FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ -TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F -EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco -kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu -HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF -vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo -19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC -L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW -bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX -JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc -K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf -ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik -Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB -sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e -3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR -ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip -mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH -b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf -rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms -hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y -zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 -MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=Class 2 Primary CA O=Certplus -# Subject: CN=Class 2 Primary CA O=Certplus -# Label: "Certplus Class 2 Primary CA" -# Serial: 177770208045934040241468760488327595043 -# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b -# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb -# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Label: "DST Root CA X3" -# Serial: 91299735575339953335919266965803778155 -# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 -# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 -# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -# Issuer: CN=DST ACES CA X6 O=Digital Signature Trust OU=DST ACES -# Subject: CN=DST ACES CA X6 O=Digital Signature Trust OU=DST ACES -# Label: "DST ACES CA X6" -# Serial: 17771143917277623872238992636097467865 -# MD5 Fingerprint: 21:d8:4c:82:2b:99:09:33:a2:eb:14:24:8d:8e:5f:e8 -# SHA1 Fingerprint: 40:54:da:6f:1c:3f:40:74:ac:ed:0f:ec:cd:db:79:d1:53:fb:90:1d -# SHA256 Fingerprint: 76:7c:95:5a:76:41:2c:89:af:68:8e:90:a1:c7:0f:55:6c:fd:6b:60:25:db:ea:10:41:6d:7e:b6:83:1f:8c:40 ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx -ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w -MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD -VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx -FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu -ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 -gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH -fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a -ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT -ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk -c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto -dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt -aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI -hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk -QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ -h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR -rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 -9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication EV RootCA1 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication EV RootCA1 -# Label: "Security Communication EV RootCA1" -# Serial: 0 -# MD5 Fingerprint: 22:2d:a6:01:ea:7c:0a:f7:f0:6c:56:43:3f:77:76:d3 -# SHA1 Fingerprint: fe:b8:c4:32:dc:f9:76:9a:ce:ae:3d:d8:90:8f:fd:28:86:65:64:7d -# SHA256 Fingerprint: a2:2d:ba:68:1e:97:37:6e:2d:39:7d:72:8a:ae:3a:9b:62:96:b9:fd:ba:60:bc:2e:11:f6:47:f2:c6:75:fb:37 ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz -MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N -IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 -bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE -RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO -zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 -bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF -MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 -VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC -OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW -tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ -q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb -EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ -Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O -VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GA CA" -# Serial: 86718877871133159090080555911823548314 -# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 -# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 -# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Label: "Deutsche Telekom Root CA 2" -# Serial: 38 -# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 -# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf -# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: CN=T\xdcB\u0130TAK UEKAE K\xf6k Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 - S\xfcr\xfcm 3 O=T\xfcrkiye Bilimsel ve Teknolojik Ara\u015ft\u0131rma Kurumu - T\xdcB\u0130TAK OU=Ulusal Elektronik ve Kriptoloji Ara\u015ft\u0131rma Enstit\xfcs\xfc - UEKAE/Kamu Sertifikasyon Merkezi -# Subject: CN=T\xdcB\u0130TAK UEKAE K\xf6k Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 - S\xfcr\xfcm 3 O=T\xfcrkiye Bilimsel ve Teknolojik Ara\u015ft\u0131rma Kurumu - T\xdcB\u0130TAK OU=Ulusal Elektronik ve Kriptoloji Ara\u015ft\u0131rma Enstit\xfcs\xfc - UEKAE/Kamu Sertifikasyon Merkezi -# Label: "T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3" -# Serial: 17 -# MD5 Fingerprint: ed:41:f5:8c:50:c5:2b:9c:73:e6:ee:6c:eb:c2:a8:26 -# SHA1 Fingerprint: 1b:4b:39:61:26:27:6b:64:91:a2:68:6d:d7:02:43:21:2d:1f:1d:96 -# SHA256 Fingerprint: e4:c7:34:30:d7:a5:b5:09:25:df:43:37:0a:0d:21:6e:9a:79:b9:d6:db:83:73:a0:c6:9e:b1:cc:31:c7:c5:2a ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS -MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp -bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw -VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy -YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy -dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe -Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx -GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls -aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU -QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh -xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 -aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr -IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h -gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK -O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO -fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw -lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID -AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP -NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t -wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM -7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh -gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n -oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs -yZyQ2uypQjyttgI= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=CNNIC ROOT O=CNNIC -# Subject: CN=CNNIC ROOT O=CNNIC -# Label: "CNNIC ROOT" -# Serial: 1228079105 -# MD5 Fingerprint: 21:bc:82:ab:49:c4:13:3b:4b:b2:2b:5c:6b:90:9c:19 -# SHA1 Fingerprint: 8b:af:4c:9b:1d:f0:2a:92:f7:da:12:8e:b9:1b:ac:f4:98:60:4b:6f -# SHA256 Fingerprint: e2:83:93:77:3d:a8:45:a6:79:f2:08:0c:c7:fb:44:a3:b7:a1:c3:79:2c:b7:eb:77:29:fd:cb:6a:8d:99:ae:a7 ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD -TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 -MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF -Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh -IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 -dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO -V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC -GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN -v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB -AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB -Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO -76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK -OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH -ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi -yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL -buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj -2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G2" -# Serial: 10000012 -# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a -# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 -# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Label: "Hongkong Post Root CA 1" -# Serial: 1000 -# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca -# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 -# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=ACEDICOM Root O=EDICOM OU=PKI -# Subject: CN=ACEDICOM Root O=EDICOM OU=PKI -# Label: "ACEDICOM Root" -# Serial: 7029493972724711941 -# MD5 Fingerprint: 42:81:a0:e2:1c:e3:55:10:de:55:89:42:65:96:22:e6 -# SHA1 Fingerprint: e0:b4:32:2e:b2:f6:a5:68:b6:54:53:84:48:18:4a:50:36:87:43:84 -# SHA256 Fingerprint: 03:95:0f:b4:9a:53:1f:3e:19:91:94:23:98:df:a9:e0:ea:32:d7:ba:1c:dd:9b:c8:5d:b5:7e:d9:40:0b:43:4a ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE -AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x -CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW -MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF -RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC -AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7 -09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7 -XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P -Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK -t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb -X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28 -MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU -fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI -2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH -K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae -ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP -BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ -MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw -RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm -fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3 -gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe -I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i -5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi -ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn -MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ -o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 -zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN -GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt -r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK -Z05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 6047274297262753887 -# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 -# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa -# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Label: "Chambers of Commerce Root - 2008" -# Serial: 11806822484801597146 -# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 -# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c -# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Label: "Global Chambersign Root - 2008" -# Serial: 14541511773111788494 -# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 -# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c -# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=Certinomis - Autorit\xe9 Racine O=Certinomis OU=0002 433998903 -# Subject: CN=Certinomis - Autorit\xe9 Racine O=Certinomis OU=0002 433998903 -# Label: "Certinomis - Autorit\xe9 Racine" -# Serial: 1 -# MD5 Fingerprint: 7f:30:78:8c:03:e3:ca:c9:0a:e2:c9:ea:1e:aa:55:1a -# SHA1 Fingerprint: 2e:14:da:ec:28:f0:fa:1e:8e:38:9a:4e:ab:eb:26:c0:0a:d3:83:c3 -# SHA256 Fingerprint: fc:bf:e2:88:62:06:f7:2b:27:59:3c:8b:07:02:97:e1:2d:76:9e:d1:0e:d7:93:07:05:a8:09:8e:ff:c1:4d:17 ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET -MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk -BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4 -Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl -cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0 -aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY -F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N -8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe -rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K -/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu -7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC -28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6 -lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E -nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB -0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09 -5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj -WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN -jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s -ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM -OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q -619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn -2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj -o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v -nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG -5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq -pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb -dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0 -BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2011" -# Serial: 0 -# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 -# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d -# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: O=Trustis Limited OU=Trustis FPS Root CA -# Subject: O=Trustis Limited OU=Trustis FPS Root CA -# Label: "Trustis FPS Root CA" -# Serial: 36053640375399034304724988975563710553 -# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d -# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 -# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL -ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx -MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc -MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ -AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH -iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj -vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA -0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB -OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ -BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E -FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 -GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW -zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 -1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE -f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F -jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN -ZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 45 -# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16 -# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0 -# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11 ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul -F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC -ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w -ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk -aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 -YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg -c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 -d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG -CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF -wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS -Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst -0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc -pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl -CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF -P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK -1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm -KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ -8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm -fyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Label: "StartCom Certification Authority G2" -# Serial: 59 -# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64 -# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17 -# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95 ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 -OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG -A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ -JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD -vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo -D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ -Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW -RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK -HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN -nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM -0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i -UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 -Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg -TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL -BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX -UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl -6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK -9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ -HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI -wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY -XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l -IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo -hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr -so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Label: "EE Certification Centre Root CA" -# Serial: 112324828676200291871926431888494945866 -# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f -# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 -# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 -czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG -CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy -MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl -ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS -b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy -euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO -bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw -WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d -MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE -1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ -zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF -BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV -v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG -E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW -iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v -GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= ------END CERTIFICATE----- - -# Issuer: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. (c) Aral\u0131k 2007 -# Subject: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. (c) Aral\u0131k 2007 -# Label: "TURKTRUST Certificate Services Provider Root 2007" -# Serial: 1 -# MD5 Fingerprint: 2b:70:20:56:86:82:a0:18:c8:07:53:12:28:70:21:72 -# SHA1 Fingerprint: f1:7f:6f:b6:31:dc:99:e3:a3:c8:7f:fe:1c:f1:81:10:88:d9:60:33 -# SHA256 Fingerprint: 97:8c:d9:66:f2:fa:a0:7b:a7:aa:95:00:d9:c0:2e:9d:77:f2:cd:ad:a6:ad:6b:a7:4a:f4:b9:1c:66:59:3c:50 ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx -OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry -b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC -VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE -sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F -ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY -KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG -+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG -HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P -IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M -733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk -Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW -AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5 -mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa -XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ -qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Raiz del Estado Venezolano O=Sistema Nacional de Certificacion Electronica OU=Superintendencia de Servicios de Certificacion Electronica -# Subject: CN=PSCProcert O=Sistema Nacional de Certificacion Electronica OU=Proveedor de Certificados PROCERT -# Label: "PSCProcert" -# Serial: 11 -# MD5 Fingerprint: e6:24:e9:12:01:ae:0c:de:8e:85:c4:ce:a3:12:dd:ec -# SHA1 Fingerprint: 70:c1:8d:74:b4:28:81:0a:e4:fd:a5:75:d7:01:9f:99:b0:3d:50:74 -# SHA256 Fingerprint: 3c:fc:3c:14:d1:f6:84:ff:17:e3:8c:43:ca:44:0c:00:b9:67:ec:93:3e:8b:fe:06:4c:a1:d7:2c:90:f2:ad:b0 ------BEGIN CERTIFICATE----- -MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1 -dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s -YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz -dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0 -aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh -IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ -KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw -MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy -b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx -KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG -A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u -aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9 -7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74 -BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G -ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9 -JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0 -PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2 -0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH -0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/ -6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m -v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7 -K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev -bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw -MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w -MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD -gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0 -b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh -bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0 -cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp -ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg -ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq -hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD -AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w -MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag -RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t -UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl -cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v -Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG -AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN -AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS -1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB -3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv -Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh -HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm -pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz -sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE -qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb -mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9 -opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H -YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km ------END CERTIFICATE----- - -# Issuer: CN=China Internet Network Information Center EV Certificates Root O=China Internet Network Information Center -# Subject: CN=China Internet Network Information Center EV Certificates Root O=China Internet Network Information Center -# Label: "China Internet Network Information Center EV Certificates Root" -# Serial: 1218379777 -# MD5 Fingerprint: 55:5d:63:00:97:bd:6a:97:f5:67:ab:4b:fb:6e:63:15 -# SHA1 Fingerprint: 4f:99:aa:93:fb:2b:d1:37:26:a1:99:4a:ce:7f:f0:05:f2:93:5d:1e -# SHA256 Fingerprint: 1c:01:c6:f4:db:b2:fe:fc:22:55:8b:2b:ca:32:56:3f:49:84:4a:cf:c3:2b:7b:e4:b0:ff:59:9f:9e:8c:7a:f7 ------BEGIN CERTIFICATE----- -MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC -Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g -Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0 -aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa -Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg -SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo -aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp -ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z -7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA// -DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx -zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8 -hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs -4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u -gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY -NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E -FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3 -j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG -52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB -echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws -ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI -zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy -wy39FCqQmbkHzJ8= ------END CERTIFICATE----- - -# Issuer: CN=Swisscom Root CA 2 O=Swisscom OU=Digital Certificate Services -# Subject: CN=Swisscom Root CA 2 O=Swisscom OU=Digital Certificate Services -# Label: "Swisscom Root CA 2" -# Serial: 40698052477090394928831521023204026294 -# MD5 Fingerprint: 5b:04:69:ec:a5:83:94:63:18:a7:86:d0:e4:f2:6e:19 -# SHA1 Fingerprint: 77:47:4f:c6:30:e4:0f:4c:47:64:3f:84:ba:b8:c6:95:4a:8a:41:ec -# SHA256 Fingerprint: f0:9b:12:2c:71:14:f4:a0:9b:d4:ea:4f:4a:99:d5:58:b4:6e:4c:25:cd:81:14:0d:29:c0:56:13:91:4c:38:41 ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr -jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r -0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f -2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP -ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF -y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA -tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL -6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0 -uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL -acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh -k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q -VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O -BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh -b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R -fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv -/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI -REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx -srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv -aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT -woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n -Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W -t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N -8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2 -9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5 -wSsSnqaeG8XmDtkx2Q== ------END CERTIFICATE----- - -# Issuer: CN=Swisscom Root EV CA 2 O=Swisscom OU=Digital Certificate Services -# Subject: CN=Swisscom Root EV CA 2 O=Swisscom OU=Digital Certificate Services -# Label: "Swisscom Root EV CA 2" -# Serial: 322973295377129385374608406479535262296 -# MD5 Fingerprint: 7b:30:34:9f:dd:0a:4b:6b:35:ca:31:51:28:5d:ae:ec -# SHA1 Fingerprint: e7:a1:90:29:d3:d5:52:dc:0d:0f:c6:92:d3:ea:88:0d:15:2e:1a:6b -# SHA256 Fingerprint: d9:5f:ea:3c:a4:ee:dc:e7:4c:d7:6e:75:fc:6d:1f:f6:2c:44:1f:0f:a8:bc:77:f0:34:b1:9e:5d:b2:58:01:5d ------BEGIN CERTIFICATE----- -MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw -ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp -dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290 -IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD -VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy -dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg -MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx -UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD -1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH -oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR -HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/ -5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv -idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL -OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC -NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f -46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB -UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth -7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G -A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED -MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB -bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x -XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T -PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0 -Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70 -WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL -Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm -7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S -nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN -vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB -WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI -fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb -I+2ksx0WckNLIOFZfsLorSa/ovc= ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R1 O=Disig a.s. -# Subject: CN=CA Disig Root R1 O=Disig a.s. -# Label: "CA Disig Root R1" -# Serial: 14052245610670616104 -# MD5 Fingerprint: be:ec:11:93:9a:f5:69:21:bc:d7:c1:c0:67:89:cc:2a -# SHA1 Fingerprint: 8e:1c:74:f8:a6:20:b9:e5:8a:f4:61:fa:ec:2b:47:56:51:1a:52:c6 -# SHA256 Fingerprint: f9:6f:23:f4:c3:e7:9c:07:7a:46:98:8d:5a:f5:90:06:76:a0:f0:39:cb:64:5d:d1:75:49:b2:16:c8:24:40:ce ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy -MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk -D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o -OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A -fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe -IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n -oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK -/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj -rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD -3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE -7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC -yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd -qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI -hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR -xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA -SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo -HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB -emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC -AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb -7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x -DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk -F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF -a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT -Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Label: "E-Tugra Certification Authority" -# Serial: 7667447206703254355 -# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 -# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 -# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV -BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC -aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV -BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 -Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz -MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ -BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp -em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY -B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH -D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF -Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo -q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D -k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH -fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut -dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM -ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 -zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX -U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 -Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 -XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF -Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR -HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY -GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c -77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 -+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK -vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 -FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl -yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P -AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD -y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d -NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=Certification Authority of WoSign O=WoSign CA Limited -# Subject: CN=Certification Authority of WoSign O=WoSign CA Limited -# Label: "WoSign" -# Serial: 125491772294754854453622855443212256657 -# MD5 Fingerprint: a1:f2:f9:b5:d2:c8:7a:74:b8:f3:05:f1:d7:e1:84:8d -# SHA1 Fingerprint: b9:42:94:bf:91:ea:8f:b6:4b:e6:10:97:c7:fb:00:13:59:b6:76:cb -# SHA256 Fingerprint: 4b:22:d5:a6:ae:c9:9f:3c:db:79:aa:5e:c0:68:38:47:9c:d5:ec:ba:71:64:f7:f2:2d:c1:d6:5f:63:d8:57:08 ------BEGIN CERTIFICATE----- -MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBV -MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNV -BAMTIUNlcnRpZmljYXRpb24gQXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgw -MTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJBgNVBAYTAkNOMRowGAYDVQQKExFX -b1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvcqN -rLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1U -fcIiePyOCbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcScc -f+Hb0v1naMQFXQoOXXDX2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2 -ZjC1vt7tj/id07sBMOby8w7gLJKA84X5KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4M -x1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR+ScPewavVIMYe+HdVHpR -aG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ezEC8wQjch -zDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDar -uHqklWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221K -mYo0SLwX3OSACCK28jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvA -Sh0JWzko/amrzgD5LkhLJuYwTKVYyrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWv -HYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0CAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R8bNLtwYgFP6H -EtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 -LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJ -MuYhOZO9sxXqT2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2e -JXLOC62qx1ViC777Y7NhRCOjy+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VN -g64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC2nz4SNAzqfkHx5Xh9T71XXG68pWp -dIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes5cVAWubXbHssw1ab -R80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/EaEQ -PkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGce -xGATVdVhmVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+ -J7x6v+Db9NpSvd4MVHAxkUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMl -OtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGikpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWT -ee5Ehr7XHuQe+w== ------END CERTIFICATE----- - -# Issuer: CN=CA \u6c83\u901a\u6839\u8bc1\u4e66 O=WoSign CA Limited -# Subject: CN=CA \u6c83\u901a\u6839\u8bc1\u4e66 O=WoSign CA Limited -# Label: "WoSign China" -# Serial: 106921963437422998931660691310149453965 -# MD5 Fingerprint: 78:83:5b:52:16:76:c4:24:3b:83:78:e8:ac:da:9a:93 -# SHA1 Fingerprint: 16:32:47:8d:89:f9:21:3a:92:00:85:63:f5:a4:a7:d3:12:40:8a:d6 -# SHA256 Fingerprint: d6:f0:34:bd:94:aa:23:3f:02:97:ec:a4:24:5b:28:39:73:e4:47:aa:59:0f:31:0c:77:f4:8f:df:83:11:22:54 ------BEGIN CERTIFICATE----- -MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBG -MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNV -BAMMEkNBIOayg+mAmuagueivgeS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgw -MTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRl -ZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k8H/r -D195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld1 -9AXbbQs5uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExf -v5RxadmWPgxDT74wwJ85dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnk -UkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+L -NVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFyb7Ao65vh4YOhn0pdr8yb -+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc76DbT52V -qyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6K -yX2m+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0G -AbQOXDBGVWCvOGU6yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaK -J/kR8slC/k7e3x9cxKSGhxYzoacXGKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwEC -AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUAA4ICAQBqinA4 -WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 -yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj -/feTZU7n85iYr83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6 -jBAyvd0zaziGfjk9DgNyp115j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2 -ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0AkLppRQjbbpCBhqcqBT/mhDn4t/lX -X0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97qA4bLJyuQHCH2u2n -FoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Yjj4D -u9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10l -O1Hm13ZBONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Le -ie2uPAmvylezkolwQOQvT8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR1 -2KvxAmLBsX5VYc8T1yaw15zLKYs4SgsOkI26oQ== ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 14367148294922964480859022125800977897474 -# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e -# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb -# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ -FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F -uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX -kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs -ewv4n4Q= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G3" -# Serial: 10003001 -# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 -# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc -# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX -DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP -cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW -IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX -xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy -KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR -9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az -5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 -6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 -Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP -bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt -BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt -XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd -INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp -LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 -Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp -gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh -/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw -0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A -fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq -4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR -1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ -QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM -94B7IWcnMFk= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Label: "Staat der Nederlanden EV Root CA" -# Serial: 10000013 -# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba -# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb -# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y -MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg -TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS -b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS -M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC -UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d -Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p -rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l -pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb -j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC -KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS -/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X -cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH -1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP -px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 -MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u -2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS -v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC -wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy -CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e -vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 -Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa -Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL -eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 -FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc -7uzXLg== ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. -# Subject: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. -# Label: "T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5" -# Serial: 156233699172481 -# MD5 Fingerprint: da:70:8e:f0:22:df:93:26:f6:5f:9f:d3:15:06:52:4e -# SHA1 Fingerprint: c4:18:f6:4d:46:d1:df:00:3d:27:30:13:72:43:a9:12:11:c6:75:fb -# SHA256 Fingerprint: 49:35:1b:90:34:44:c1:85:cc:dc:5c:69:3d:24:d8:55:5c:b2:08:d6:a8:14:13:07:69:9f:4a:f0:63:19:9d:78 ------BEGIN CERTIFICATE----- -MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UE -BhMCVFIxDzANBgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxn -aSDEsGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkg -QS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1QgRWxla3Ryb25payBTZXJ0aWZpa2Eg -SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAwODA3MDFaFw0yMzA0 -MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0wSwYD -VQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCUZ4WWe60ghUEoI5RHwWrom -/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537jVJp45wnEFPzpALFp/kR -Gml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1mep5Fimh3 -4khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z -5UNP9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0 -hO8EuPbJbKoCPrZV4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QID -AQABo0IwQDAdBgNVHQ4EFgQUVpkHHtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJ5FdnsX -SDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPoBP5yCccLqh0l -VX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq -URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nf -peYVhDfwwvJllpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CF -Yv4HAqGEVka+lgqaE9chTLd8B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW -+qtB4Uu2NQvAmxU= ------END CERTIFICATE----- - -# Issuer: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 -# Subject: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 -# Label: "Certinomis - Root CA" -# Serial: 1 -# MD5 Fingerprint: 14:0a:fd:8d:a8:28:b5:38:69:db:56:7e:61:22:03:3f -# SHA1 Fingerprint: 9d:70:bb:01:a5:a4:a0:18:11:2e:f7:1c:01:b9:32:c5:34:e7:88:a8 -# SHA256 Fingerprint: 2a:99:f5:bc:11:74:b7:3c:bb:1d:62:08:84:e0:1c:34:e5:1c:cb:39:78:da:12:5f:0e:33:26:88:83:bf:41:58 ------BEGIN CERTIFICATE----- -MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET -MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb -BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz -MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx -FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g -Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 -fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl -LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV -WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF -TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb -5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc -CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri -wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ -wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG -m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 -F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng -WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 -2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF -AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ -0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw -F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS -g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj -qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN -h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ -ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V -btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj -Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ -8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW -gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=Certification Authority of WoSign G2 O=WoSign CA Limited -# Subject: CN=Certification Authority of WoSign G2 O=WoSign CA Limited -# Label: "Certification Authority of WoSign G2" -# Serial: 142423943073812161787490648904721057092 -# MD5 Fingerprint: c8:1c:7d:19:aa:cb:71:93:f2:50:f8:52:a8:1e:ba:60 -# SHA1 Fingerprint: fb:ed:dc:90:65:b7:27:20:37:bc:55:0c:9c:56:de:bb:f2:78:94:e1 -# SHA256 Fingerprint: d4:87:a5:6f:83:b0:74:82:e8:5e:96:33:94:c1:ec:c2:c9:e5:1d:09:03:ee:94:6b:02:c3:01:58:1e:d9:9e:16 ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBY -MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNV -BAMTJENlcnRpZmljYXRpb24gQXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDEx -MDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgxCzAJBgNVBAYTAkNOMRowGAYDVQQK -ExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPX -JYY1kBaiXW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgO -gHzKtB0TiGsOqCR3A9DuW/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg -5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg95k4ot+vElbGs/V6r+kHLXZ1L3PR8du9n -fwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BKv0mUYQs4kI9dJGwlezt5 -2eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJ -KoZIhvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8 -fHulwqZm46qwtyeYP0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G -3CE4Q3RM+zD4F3LBMvzIkRfEzFg3TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yy -SrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu+sif/a+RZQp4OBXllxcU3fng -LDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+7Q9LGOHSJDy7 -XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= ------END CERTIFICATE----- - -# Issuer: CN=CA WoSign ECC Root O=WoSign CA Limited -# Subject: CN=CA WoSign ECC Root O=WoSign CA Limited -# Label: "CA WoSign ECC Root" -# Serial: 138625735294506723296996289575837012112 -# MD5 Fingerprint: 80:c6:53:ee:61:82:28:72:f0:ff:21:b9:17:ca:b2:20 -# SHA1 Fingerprint: d2:7a:d2:be:ed:94:c0:a1:3c:c7:25:21:ea:5d:71:be:81:19:f3:2b -# SHA256 Fingerprint: 8b:45:da:1c:06:f7:91:eb:0c:ab:f2:6b:e5:88:f5:fb:23:16:5c:2e:61:4b:f8:85:56:2d:0d:ce:50:b2:9b:02 ------BEGIN CERTIFICATE----- -MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQsw -CQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMT -EkNBIFdvU2lnbiBFQ0MgUm9vdDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4 -NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEb -MBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZIzj0CAQYFK4EEACID -YgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiUt5v8 -KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES -1ns2o0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUqv3VWqP2h4syhf3RMluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB -1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0Daupn75OcsqF1NnstTJFGG+rrQIwfcf3 -aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYua/GRspBl9JrmkO5K ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=Certplus Root CA G1 O=Certplus -# Subject: CN=Certplus Root CA G1 O=Certplus -# Label: "Certplus Root CA G1" -# Serial: 1491911565779898356709731176965615564637713 -# MD5 Fingerprint: 7f:09:9c:f7:d9:b9:5c:69:69:56:d5:37:3e:14:0d:42 -# SHA1 Fingerprint: 22:fd:d0:b7:fd:a2:4e:0d:ac:49:2c:a0:ac:a6:7b:6a:1f:e3:f7:66 -# SHA256 Fingerprint: 15:2a:40:2b:fc:df:2c:d5:48:05:4d:22:75:b3:9c:7f:ca:3e:c0:97:80:78:b0:f0:ea:76:e5:61:a6:c7:43:3e ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUA -MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy -dHBsdXMgUm9vdCBDQSBHMTAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBa -MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy -dHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHNr49a -iZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt -6kuJPKNxQv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP -0FG7Yn2ksYyy/yARujVjBYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f -6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTvLRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDE -EW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2z4QTd28n6v+WZxcIbekN -1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc4nBvCGrc -h2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCT -mehd4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV -4EJQeIQEQWGw9CEjjy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPO -WftwenMGE9nTdDckQQoRb5fc5+R+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1Ud -DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSowcCbkahDFXxd -Bie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHYlwuBsTANBgkq -hkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh -66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7 -/SMNkPX0XtPGYX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BS -S7CTKtQ+FjPlnsZlFT5kOwQ/2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j -2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F6ALEUz65noe8zDUa3qHpimOHZR4R -Kttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilXCNQ314cnrUlZp5Gr -RHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWetUNy -6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEV -V/xuZDDCVRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5 -g4VCXA9DO2pJNdWY9BW/+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl -++O/QmueD6i9a5jc2NvLi6Td11n0bt3+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= ------END CERTIFICATE----- - -# Issuer: CN=Certplus Root CA G2 O=Certplus -# Subject: CN=Certplus Root CA G2 O=Certplus -# Label: "Certplus Root CA G2" -# Serial: 1492087096131536844209563509228951875861589 -# MD5 Fingerprint: a7:ee:c4:78:2d:1b:ee:2d:b9:29:ce:d6:a7:96:32:31 -# SHA1 Fingerprint: 4f:65:8e:1f:e9:06:d8:28:02:e9:54:47:41:c9:54:25:5d:69:cc:1a -# SHA256 Fingerprint: 6c:c0:50:41:e6:44:5e:74:69:6c:4c:fb:c9:f8:0f:54:3b:7e:ab:bb:44:b4:ce:6f:78:7c:6a:99:71:c4:2f:17 ------BEGIN CERTIFICATE----- -MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4x -CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs -dXMgUm9vdCBDQSBHMjAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4x -CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs -dXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABM0PW1aC3/BFGtat -93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uNAm8x -Ik0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwj -FNiPwyCrKGBZMB8GA1UdIwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqG -SM49BAMDA2gAMGUCMHD+sAvZ94OX7PNVHdTcswYO/jOYnYs5kGuUIe22113WTNch -p+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjlvPl5adytRSv3tjFzzAal -U5ORGpOucGpnutee5WEaXw== ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G1 O=OpenTrust -# Subject: CN=OpenTrust Root CA G1 O=OpenTrust -# Label: "OpenTrust Root CA G1" -# Serial: 1492036577811947013770400127034825178844775 -# MD5 Fingerprint: 76:00:cc:81:29:cd:55:5e:88:6a:7a:2e:f7:4d:39:da -# SHA1 Fingerprint: 79:91:e8:34:f7:e2:ee:dd:08:95:01:52:e9:55:2d:14:e9:58:d5:7e -# SHA256 Fingerprint: 56:c7:71:28:d9:8c:18:d9:1b:4c:fd:ff:bc:25:ee:91:03:d4:75:8e:a2:ab:ad:82:6a:90:f3:45:7d:46:0e:b4 ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUA -MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w -ZW5UcnVzdCBSb290IENBIEcxMB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAw -MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU -T3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7faYp6b -wiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX -/uMftk87ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR0 -77F9jAHiOH3BX2pfJLKOYheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGP -uY4zbGneWK2gDqdkVBFpRGZPTBKnjix9xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLx -p2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO9z0M+Yo0FMT7MzUj8czx -Kselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq3ywgsNw2 -TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+W -G+Oin6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPw -vFEVVJSmdz7QdFG9URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYY -EQRVzXR7z2FwefR7LFxckvzluFqrTJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUl0YhVyE1 -2jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/PxN3DlCPaTKbYw -DQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E -PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kf -gLMtMrpkZ2CvuVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbS -FXJfLkur1J1juONI5f6ELlgKn0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0 -V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLhX4SPgPL0DTatdrOjteFkdjpY3H1P -XlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80nR14SohWZ25g/4/I -i+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcmGS3t -TAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L91 -09S5zvE/bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/Ky -Pu1svf0OnWZzsD2097+o4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJ -AwSQiumPv+i2tCqjI40cHLI5kqiPAlxAOXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj -1oxx ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G2 O=OpenTrust -# Subject: CN=OpenTrust Root CA G2 O=OpenTrust -# Label: "OpenTrust Root CA G2" -# Serial: 1492012448042702096986875987676935573415441 -# MD5 Fingerprint: 57:24:b6:59:24:6b:ae:c8:fe:1c:0c:20:f2:c0:4e:eb -# SHA1 Fingerprint: 79:5f:88:60:c5:ab:7c:3d:92:e6:cb:f4:8d:e1:45:cd:11:ef:60:0b -# SHA256 Fingerprint: 27:99:58:29:fe:6a:75:15:c1:bf:e8:48:f9:c4:76:1d:b1:6c:22:59:29:25:7b:f4:0d:08:94:f2:9e:a8:ba:f2 ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUA -MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w -ZW5UcnVzdCBSb290IENBIEcyMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAw -MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU -T3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+Ntmh -/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78e -CbY2albz4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/6 -1UWY0jUJ9gNDlP7ZvyCVeYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fE -FY8ElggGQgT4hNYdvJGmQr5J1WqIP7wtUdGejeBSzFfdNTVY27SPJIjki9/ca1TS -gSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz3GIZ38i1MH/1PCZ1Eb3X -G7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj3CzMpSZy -YhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaH -vGOz9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4 -t/bQWVyJ98LVtZR00dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/ -gh7PU3+06yzbXfZqfUAkBXKJOAGTy3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUajn6QiL3 -5okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59M4PLuG53hq8w -DQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz -Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0 -nXGEL8pZ0keImUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qT -RmTFAHneIWv2V6CG1wZy7HBGS4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpT -wm+bREx50B1ws9efAvSyB7DH5fitIw6mVskpEndI2S9G/Tvw/HRwkqWOOAgfZDC2 -t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ6e18CL13zSdkzJTa -TkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97krgCf2 -o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU -3jg9CcCoSmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eA -iN1nE28daCSLT7d0geX0YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14f -WKGVyasvc0rQLW6aWQ9VGHgtPFGml4vmu7JwqkwR3v98KzfUetF3NI/n+UL3PIEM -S1IK ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G3 O=OpenTrust -# Subject: CN=OpenTrust Root CA G3 O=OpenTrust -# Label: "OpenTrust Root CA G3" -# Serial: 1492104908271485653071219941864171170455615 -# MD5 Fingerprint: 21:37:b4:17:16:92:7b:67:46:70:a9:96:d7:a8:13:24 -# SHA1 Fingerprint: 6e:26:64:f3:56:bf:34:55:bf:d1:93:3f:7c:01:de:d8:13:da:8a:a6 -# SHA256 Fingerprint: b7:c3:62:31:70:6e:81:07:8c:36:7c:b8:96:19:8f:1e:32:08:dd:92:69:49:dd:8f:57:09:a4:10:f7:5b:62:92 ------BEGIN CERTIFICATE----- -MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAx -CzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5U -cnVzdCBSb290IENBIEczMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFow -QDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwUT3Bl -blRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARK7liuTcpm -3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5Bta1d -oYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5 -DMlv4VBN0BBY3JWIbTAfBgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAK -BggqhkjOPQQDAwNpADBmAjEAj6jcnboMBBf6Fek9LykBl7+BFjNAk2z8+e2AcG+q -j9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta3U1fJAuwACEl74+nBCZx -4nxp5V2a+EEfOzmTk51V6s2N8fvB ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Label: "LuxTrust Global Root 2" -# Serial: 59914338225734147123941058376788110305822489521 -# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c -# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f -# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- -# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Secure Server CA" -# Serial: 927650371 -# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee -# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39 -# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50 ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Label: "ValiCert Class 2 VA" -# Serial: 1 -# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87 -# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6 -# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - -# Issuer: CN=NetLock Expressz (Class C) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Subject: CN=NetLock Expressz (Class C) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Label: "NetLock Express (Class C) Root" -# Serial: 104 -# MD5 Fingerprint: 4f:eb:f1:f0:70:c2:80:63:5d:58:9f:da:12:3c:a9:c4 -# SHA1 Fingerprint: e3:92:51:2f:0a:cf:f5:05:df:f6:de:06:7f:75:37:e1:65:ea:57:4b -# SHA256 Fingerprint: 0b:5e:ed:4e:84:64:03:cf:55:e0:65:84:84:40:ed:2a:82:75:8b:f5:b9:aa:1f:25:3d:46:13:cf:a0:80:ff:3f ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 -Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Uzleti (Class B) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Subject: CN=NetLock Uzleti (Class B) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Label: "NetLock Business (Class B) Root" -# Serial: 105 -# MD5 Fingerprint: 39:16:aa:b9:6a:41:e1:14:69:df:9e:6c:3b:72:dc:b6 -# SHA1 Fingerprint: 87:9f:4b:ee:05:df:98:58:3b:e3:60:d6:33:e7:0d:3f:fe:98:71:af -# SHA256 Fingerprint: 39:df:7b:68:2b:7b:93:8f:84:71:54:81:cc:de:8d:60:d8:f2:2e:c5:98:87:7d:0a:aa:c1:2b:59:18:2b:03:12 ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Label: "RSA Root Certificate 1" -# Serial: 1 -# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72 -# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb -# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Label: "ValiCert Class 1 VA" -# Serial: 1 -# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb -# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e -# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04 ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure eBusiness CA 1" -# Serial: 4 -# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d -# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41 -# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73 ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure Global eBusiness CA" -# Serial: 1 -# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc -# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45 -# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07 ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Premium Server CA" -# Serial: 1 -# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a -# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a -# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72 ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Server CA" -# Serial: 1 -# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d -# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c -# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9 ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Label: "Verisign Class 3 Public Primary Certification Authority" -# Serial: 149843929435818692848040365716851702463 -# MD5 Fingerprint: 10:fc:63:5d:f6:26:3e:0d:f3:25:be:5f:79:cd:67:67 -# SHA1 Fingerprint: 74:2c:31:92:e6:07:e4:24:eb:45:49:54:2b:e1:bb:c5:3e:61:74:e2 -# SHA256 Fingerprint: e7:68:56:34:ef:ac:f6:9a:ce:93:9a:6b:25:5b:7b:4f:ab:ef:42:93:5b:50:a2:65:ac:b5:cb:60:27:e4:4e:70 ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Label: "Verisign Class 3 Public Primary Certification Authority" -# Serial: 80507572722862485515306429940691309246 -# MD5 Fingerprint: ef:5a:f1:33:ef:f1:cd:bb:51:02:ee:12:14:4b:96:c4 -# SHA1 Fingerprint: a1:db:63:93:91:6f:17:e4:18:55:09:40:04:15:c7:02:40:b0:ae:6b -# SHA256 Fingerprint: a4:b6:b3:99:6f:c2:f3:06:b3:fd:86:81:bd:63:41:3d:8c:50:09:cc:4f:a3:29:c2:cc:f0:e2:fa:1b:14:03:05 ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i -2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ -2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Label: "Verisign Class 3 Public Primary Certification Authority - G2" -# Serial: 167285380242319648451154478808036881606 -# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9 -# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f -# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - -# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Label: "GTE CyberTrust Global Root" -# Serial: 421 -# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db -# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74 -# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36 ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -# Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority -# Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority -# Label: "Equifax Secure Certificate Authority" -# Serial: 903804111 -# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4 -# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a -# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- diff --git a/pype/vendor/requests/compat.py b/pype/vendor/requests/compat.py index 6b9c6facb4..c44b35efb9 100644 --- a/pype/vendor/requests/compat.py +++ b/pype/vendor/requests/compat.py @@ -43,9 +43,8 @@ if is_py2: import cookielib from Cookie import Morsel from StringIO import StringIO - from collections import Callable, Mapping, MutableMapping + from collections import Callable, Mapping, MutableMapping, OrderedDict - from urllib3.packages.ordered_dict import OrderedDict builtin_str = str bytes = str diff --git a/pype/vendor/requests/cookies.py b/pype/vendor/requests/cookies.py index 50883a84f3..56fccd9c25 100644 --- a/pype/vendor/requests/cookies.py +++ b/pype/vendor/requests/cookies.py @@ -444,20 +444,21 @@ def create_cookie(name, value, **kwargs): By default, the pair of `name` and `value` will be set for the domain '' and sent on every request (this is sometimes called a "supercookie"). """ - result = dict( - version=0, - name=name, - value=value, - port=None, - domain='', - path='/', - secure=False, - expires=None, - discard=True, - comment=None, - comment_url=None, - rest={'HttpOnly': None}, - rfc2109=False,) + result = { + 'version': 0, + 'name': name, + 'value': value, + 'port': None, + 'domain': '', + 'path': '/', + 'secure': False, + 'expires': None, + 'discard': True, + 'comment': None, + 'comment_url': None, + 'rest': {'HttpOnly': None}, + 'rfc2109': False, + } badargs = set(kwargs) - set(result) if badargs: @@ -511,6 +512,7 @@ def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): :param cookiejar: (optional) A cookiejar to add the cookies to. :param overwrite: (optional) If False, will not replace cookies already in the jar with new ones. + :rtype: CookieJar """ if cookiejar is None: cookiejar = RequestsCookieJar() @@ -529,6 +531,7 @@ def merge_cookies(cookiejar, cookies): :param cookiejar: CookieJar object to add the cookies to. :param cookies: Dictionary or CookieJar object to be added. + :rtype: CookieJar """ if not isinstance(cookiejar, cookielib.CookieJar): raise ValueError('You can only merge into CookieJar') diff --git a/pype/vendor/requests/help.py b/pype/vendor/requests/help.py index 06e06b2a75..e53d35ef6d 100644 --- a/pype/vendor/requests/help.py +++ b/pype/vendor/requests/help.py @@ -89,8 +89,7 @@ def info(): 'version': getattr(idna, '__version__', ''), } - # OPENSSL_VERSION_NUMBER doesn't exist in the Python 2.6 ssl module. - system_ssl = getattr(ssl, 'OPENSSL_VERSION_NUMBER', None) + system_ssl = ssl.OPENSSL_VERSION_NUMBER system_ssl_info = { 'version': '%x' % system_ssl if system_ssl is not None else '' } diff --git a/pype/vendor/requests/hooks.py b/pype/vendor/requests/hooks.py index 32b32de750..7a51f212c8 100644 --- a/pype/vendor/requests/hooks.py +++ b/pype/vendor/requests/hooks.py @@ -15,14 +15,14 @@ HOOKS = ['response'] def default_hooks(): - return dict((event, []) for event in HOOKS) + return {event: [] for event in HOOKS} # TODO: response is the only one def dispatch_hook(key, hooks, hook_data, **kwargs): """Dispatches a hook dictionary on a given piece of data.""" - hooks = hooks or dict() + hooks = hooks or {} hooks = hooks.get(key) if hooks: if hasattr(hooks, '__call__'): diff --git a/pype/vendor/requests/models.py b/pype/vendor/requests/models.py index 3d0e1f42a1..62dcd0b7c8 100644 --- a/pype/vendor/requests/models.py +++ b/pype/vendor/requests/models.py @@ -204,9 +204,13 @@ class Request(RequestHooksMixin): :param url: URL to send. :param headers: dictionary of headers to send. :param files: dictionary of {filename: fileobject} files to multipart upload. - :param data: the body to attach to the request. If a dictionary is provided, form-encoding will take place. + :param data: the body to attach to the request. If a dictionary or + list of tuples ``[(key, value)]`` is provided, form-encoding will + take place. :param json: json for the body to attach to the request (if files or data is not specified). - :param params: dictionary of URL parameters to append to the URL. + :param params: URL parameters to append to the URL. If a dictionary or + list of tuples ``[(key, value)]`` is provided, form-encoding will + take place. :param auth: Auth handler or (user, pass) tuple. :param cookies: dictionary or CookieJar of cookies to attach to this request. :param hooks: dictionary of callback hooks, for internal usage. @@ -214,7 +218,7 @@ class Request(RequestHooksMixin): Usage:: >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') + >>> req = requests.Request('GET', 'https://httpbin.org/get') >>> req.prepare() """ @@ -274,7 +278,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): Usage:: >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') + >>> req = requests.Request('GET', 'https://httpbin.org/get') >>> r = req.prepare() @@ -648,10 +652,7 @@ class Response(object): if not self._content_consumed: self.content - return dict( - (attr, getattr(self, attr, None)) - for attr in self.__attrs__ - ) + return {attr: getattr(self, attr, None) for attr in self.__attrs__} def __setstate__(self, state): for name, value in state.items(): @@ -780,7 +781,7 @@ class Response(object): return chunks - def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None, delimiter=None): + def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=False, delimiter=None): """Iterates over the response data, one line at a time. When stream=True is set on the request, this avoids reading the content at once into memory for large responses. diff --git a/pype/vendor/requests/packages/__init__.py b/pype/vendor/requests/packages/__init__.py deleted file mode 100644 index 971c2ad024..0000000000 --- a/pype/vendor/requests/packages/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -''' -Debian and other distributions "unbundle" requests' vendored dependencies, and -rewrite all imports to use the global versions of ``urllib3`` and ``chardet``. -The problem with this is that not only requests itself imports those -dependencies, but third-party code outside of the distros' control too. - -In reaction to these problems, the distro maintainers replaced -``requests.packages`` with a magical "stub module" that imports the correct -modules. The implementations were varying in quality and all had severe -problems. For example, a symlink (or hardlink) that links the correct modules -into place introduces problems regarding object identity, since you now have -two modules in `sys.modules` with the same API, but different identities:: - - requests.packages.urllib3 is not urllib3 - -With version ``2.5.2``, requests started to maintain its own stub, so that -distro-specific breakage would be reduced to a minimum, even though the whole -issue is not requests' fault in the first place. See -https://github.com/kennethreitz/requests/pull/2375 for the corresponding pull -request. -''' - -from __future__ import absolute_import -import sys - -try: - from . import urllib3 -except ImportError: - import urllib3 - sys.modules['%s.urllib3' % __name__] = urllib3 - -try: - from . import chardet -except ImportError: - import chardet - sys.modules['%s.chardet' % __name__] = chardet diff --git a/pype/vendor/requests/packages/chardet/__init__.py b/pype/vendor/requests/packages/chardet/__init__.py deleted file mode 100644 index 0f9f820ef6..0000000000 --- a/pype/vendor/requests/packages/chardet/__init__.py +++ /dev/null @@ -1,39 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -from .compat import PY2, PY3 -from .universaldetector import UniversalDetector -from .version import __version__, VERSION - - -def detect(byte_str): - """ - Detect the encoding of the given byte string. - - :param byte_str: The byte sequence to examine. - :type byte_str: ``bytes`` or ``bytearray`` - """ - if not isinstance(byte_str, bytearray): - if not isinstance(byte_str, bytes): - raise TypeError('Expected object of type bytes or bytearray, got: ' - '{0}'.format(type(byte_str))) - else: - byte_str = bytearray(byte_str) - detector = UniversalDetector() - detector.feed(byte_str) - return detector.close() diff --git a/pype/vendor/requests/packages/chardet/big5freq.py b/pype/vendor/requests/packages/chardet/big5freq.py deleted file mode 100644 index 38f32517aa..0000000000 --- a/pype/vendor/requests/packages/chardet/big5freq.py +++ /dev/null @@ -1,386 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Big5 frequency table -# by Taiwan's Mandarin Promotion Council -# -# -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -#Char to FreqOrder table -BIG5_TABLE_SIZE = 5376 - -BIG5_CHAR_TO_FREQ_ORDER = ( - 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 -3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 -1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 - 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 -3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 -4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 -5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 - 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 - 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 - 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 -2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 -1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 -3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 - 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 -3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 -2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 - 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 -3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 -1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 -5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 - 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 -5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 -1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 - 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 - 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 -3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 -3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 - 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 -2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 -2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 - 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 - 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 -3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 -1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 -1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 -1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 -2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 - 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 -4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 -1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 -5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 -2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 - 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 - 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 - 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 - 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 -5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 - 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 -1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 - 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 - 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 -5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 -1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 - 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 -3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 -4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 -3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 - 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 - 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 -1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 -4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 -3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 -3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 -2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 -5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 -3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 -5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 -1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 -2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 -1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 - 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 -1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 -4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 -3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 - 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 - 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 - 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 -2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 -5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 -1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 -2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 -1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 -1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 -5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 -5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 -5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 -3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 -4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 -4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 -2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 -5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 -3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 - 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 -5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 -5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 -1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 -2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 -3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 -4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 -5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 -3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 -4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 -1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 -1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 -4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 -1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 - 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 -1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 -1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 -3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 - 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 -5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 -2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 -1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 -1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 -5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 - 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 -4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 - 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 -2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 - 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 -1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 -1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 - 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 -4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 -4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 -1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 -3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 -5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 -5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 -1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 -2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 -1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 -3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 -2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 -3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 -2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 -4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 -4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 -3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 - 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 -3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 - 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 -3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 -4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 -3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 -1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 -5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 - 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 -5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 -1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 - 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 -4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 -4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 - 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 -2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 -2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 -3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 -1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 -4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 -2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 -1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 -1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 -2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 -3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 -1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 -5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 -1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 -4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 -1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 - 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 -1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 -4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 -4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 -2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 -1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 -4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 - 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 -5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 -2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 -3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 -4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 - 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 -5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 -5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 -1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 -4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 -4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 -2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 -3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 -3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 -2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 -1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 -4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 -3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 -3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 -2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 -4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 -5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 -3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 -2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 -3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 -1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 -2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 -3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 -4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 -2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 -2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 -5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 -1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 -2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 -1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 -3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 -4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 -2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 -3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 -3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 -2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 -4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 -2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 -3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 -4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 -5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 -3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 - 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 -1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 -4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 -1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 -4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 -5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 - 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 -5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 -5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 -2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 -3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 -2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 -2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 - 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 -1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 -4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 -3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 -3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 - 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 -2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 - 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 -2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 -4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 -1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 -4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 -1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 -3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 - 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 -3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 -5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 -5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 -3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 -3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 -1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 -2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 -5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 -1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 -1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 -3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 - 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 -1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 -4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 -5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 -2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 -3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 - 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 -1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 -2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 -2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 -5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 -5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 -5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 -2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 -2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 -1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 -4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 -3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 -3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 -4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 -4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 -2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 -2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 -5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 -4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 -5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 -4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 - 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 - 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 -1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 -3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 -4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 -1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 -5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 -2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 -2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 -3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 -5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 -1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 -3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 -5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 -1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 -5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 -2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 -3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 -2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 -3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 -3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 -3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 -4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 - 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 -2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 -4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 -3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 -5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 -1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 -5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 - 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 -1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 - 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 -4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 -1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 -4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 -1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 - 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 -3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 -4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 -5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 - 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 -3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 - 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 -2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 -) - diff --git a/pype/vendor/requests/packages/chardet/big5prober.py b/pype/vendor/requests/packages/chardet/big5prober.py deleted file mode 100644 index 98f9970122..0000000000 --- a/pype/vendor/requests/packages/chardet/big5prober.py +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import Big5DistributionAnalysis -from .mbcssm import BIG5_SM_MODEL - - -class Big5Prober(MultiByteCharSetProber): - def __init__(self): - super(Big5Prober, self).__init__() - self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) - self.distribution_analyzer = Big5DistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "Big5" - - @property - def language(self): - return "Chinese" diff --git a/pype/vendor/requests/packages/chardet/chardetect.py b/pype/vendor/requests/packages/chardet/chardetect.py deleted file mode 100644 index ffe892f25d..0000000000 --- a/pype/vendor/requests/packages/chardet/chardetect.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python -""" -Script which takes one or more file paths and reports on their detected -encodings - -Example:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -If no paths are provided, it takes its input from stdin. - -""" - -from __future__ import absolute_import, print_function, unicode_literals - -import argparse -import sys -from io import open - -from chardet import __version__ -from chardet.universaldetector import UniversalDetector - - -def description_of(lines, name='stdin'): - """ - Return a string describing the probable encoding of a file or - list of strings. - - :param lines: The lines to get the encoding of. - :type lines: Iterable of bytes - :param name: Name of file or collection of lines - :type name: str - """ - u = UniversalDetector() - for line in lines: - u.feed(line) - u.close() - result = u.result - if result['encoding']: - return '{0}: {1} with confidence {2}'.format(name, result['encoding'], - result['confidence']) - else: - return '{0}: no result'.format(name) - - -def main(argv=None): - ''' - Handles command line arguments and gets things started. - - :param argv: List of arguments, as if specified on the command-line. - If None, ``sys.argv[1:]`` is used instead. - :type argv: list of str - ''' - # Get command line arguments - parser = argparse.ArgumentParser( - description="Takes one or more file paths and reports their detected \ - encodings", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - conflict_handler='resolve') - parser.add_argument('input', - help='File whose encoding we would like to determine.', - type=argparse.FileType('rb'), nargs='*', - default=[sys.stdin]) - parser.add_argument('--version', action='version', - version='%(prog)s {0}'.format(__version__)) - args = parser.parse_args(argv) - - for f in args.input: - if f.isatty(): - print("You are running chardetect interactively. Press " + - "CTRL-D twice at the start of a blank line to signal the " + - "end of your input. If you want help, run chardetect " + - "--help\n", file=sys.stderr) - print(description_of(f, f.name)) - - -if __name__ == '__main__': - main() diff --git a/pype/vendor/requests/packages/chardet/chardistribution.py b/pype/vendor/requests/packages/chardet/chardistribution.py deleted file mode 100644 index c0395f4a45..0000000000 --- a/pype/vendor/requests/packages/chardet/chardistribution.py +++ /dev/null @@ -1,233 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, - EUCTW_TYPICAL_DISTRIBUTION_RATIO) -from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, - EUCKR_TYPICAL_DISTRIBUTION_RATIO) -from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, - GB2312_TYPICAL_DISTRIBUTION_RATIO) -from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, - BIG5_TYPICAL_DISTRIBUTION_RATIO) -from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, - JIS_TYPICAL_DISTRIBUTION_RATIO) - - -class CharDistributionAnalysis(object): - ENOUGH_DATA_THRESHOLD = 1024 - SURE_YES = 0.99 - SURE_NO = 0.01 - MINIMUM_DATA_THRESHOLD = 3 - - def __init__(self): - # Mapping table to get frequency order from char order (get from - # GetOrder()) - self._char_to_freq_order = None - self._table_size = None # Size of above table - # This is a constant value which varies from language to language, - # used in calculating confidence. See - # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html - # for further detail. - self.typical_distribution_ratio = None - self._done = None - self._total_chars = None - self._freq_chars = None - self.reset() - - def reset(self): - """reset analyser, clear any state""" - # If this flag is set to True, detection is done and conclusion has - # been made - self._done = False - self._total_chars = 0 # Total characters encountered - # The number of characters whose frequency order is less than 512 - self._freq_chars = 0 - - def feed(self, char, char_len): - """feed a character with known length""" - if char_len == 2: - # we only care about 2-bytes character in our distribution analysis - order = self.get_order(char) - else: - order = -1 - if order >= 0: - self._total_chars += 1 - # order is valid - if order < self._table_size: - if 512 > self._char_to_freq_order[order]: - self._freq_chars += 1 - - def get_confidence(self): - """return confidence based on existing data""" - # if we didn't receive any character in our consideration range, - # return negative answer - if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: - return self.SURE_NO - - if self._total_chars != self._freq_chars: - r = (self._freq_chars / ((self._total_chars - self._freq_chars) - * self.typical_distribution_ratio)) - if r < self.SURE_YES: - return r - - # normalize confidence (we don't want to be 100% sure) - return self.SURE_YES - - def got_enough_data(self): - # It is not necessary to receive all data to draw conclusion. - # For charset detection, certain amount of data is enough - return self._total_chars > self.ENOUGH_DATA_THRESHOLD - - def get_order(self, byte_str): - # We do not handle characters based on the original encoding string, - # but convert this encoding string to a number, here called order. - # This allows multiple encodings of a language to share one frequency - # table. - return -1 - - -class EUCTWDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCTWDistributionAnalysis, self).__init__() - self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER - self._table_size = EUCTW_TABLE_SIZE - self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-TW encoding, we are interested - # first byte range: 0xc4 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = byte_str[0] - if first_char >= 0xC4: - return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 - else: - return -1 - - -class EUCKRDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCKRDistributionAnalysis, self).__init__() - self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER - self._table_size = EUCKR_TABLE_SIZE - self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-KR encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = byte_str[0] - if first_char >= 0xB0: - return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 - else: - return -1 - - -class GB2312DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(GB2312DistributionAnalysis, self).__init__() - self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER - self._table_size = GB2312_TABLE_SIZE - self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for GB2312 encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if (first_char >= 0xB0) and (second_char >= 0xA1): - return 94 * (first_char - 0xB0) + second_char - 0xA1 - else: - return -1 - - -class Big5DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(Big5DistributionAnalysis, self).__init__() - self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER - self._table_size = BIG5_TABLE_SIZE - self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for big5 encoding, we are interested - # first byte range: 0xa4 -- 0xfe - # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if first_char >= 0xA4: - if second_char >= 0xA1: - return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 - else: - return 157 * (first_char - 0xA4) + second_char - 0x40 - else: - return -1 - - -class SJISDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(SJISDistributionAnalysis, self).__init__() - self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER - self._table_size = JIS_TABLE_SIZE - self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for sjis encoding, we are interested - # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe - # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if (first_char >= 0x81) and (first_char <= 0x9F): - order = 188 * (first_char - 0x81) - elif (first_char >= 0xE0) and (first_char <= 0xEF): - order = 188 * (first_char - 0xE0 + 31) - else: - return -1 - order = order + second_char - 0x40 - if second_char > 0x7F: - order = -1 - return order - - -class EUCJPDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCJPDistributionAnalysis, self).__init__() - self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER - self._table_size = JIS_TABLE_SIZE - self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-JP encoding, we are interested - # first byte range: 0xa0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - char = byte_str[0] - if char >= 0xA0: - return 94 * (char - 0xA1) + byte_str[1] - 0xa1 - else: - return -1 diff --git a/pype/vendor/requests/packages/chardet/charsetgroupprober.py b/pype/vendor/requests/packages/chardet/charsetgroupprober.py deleted file mode 100644 index 8b3738efd8..0000000000 --- a/pype/vendor/requests/packages/chardet/charsetgroupprober.py +++ /dev/null @@ -1,106 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import ProbingState -from .charsetprober import CharSetProber - - -class CharSetGroupProber(CharSetProber): - def __init__(self, lang_filter=None): - super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) - self._active_num = 0 - self.probers = [] - self._best_guess_prober = None - - def reset(self): - super(CharSetGroupProber, self).reset() - self._active_num = 0 - for prober in self.probers: - if prober: - prober.reset() - prober.active = True - self._active_num += 1 - self._best_guess_prober = None - - @property - def charset_name(self): - if not self._best_guess_prober: - self.get_confidence() - if not self._best_guess_prober: - return None - return self._best_guess_prober.charset_name - - @property - def language(self): - if not self._best_guess_prober: - self.get_confidence() - if not self._best_guess_prober: - return None - return self._best_guess_prober.language - - def feed(self, byte_str): - for prober in self.probers: - if not prober: - continue - if not prober.active: - continue - state = prober.feed(byte_str) - if not state: - continue - if state == ProbingState.FOUND_IT: - self._best_guess_prober = prober - return self.state - elif state == ProbingState.NOT_ME: - prober.active = False - self._active_num -= 1 - if self._active_num <= 0: - self._state = ProbingState.NOT_ME - return self.state - return self.state - - def get_confidence(self): - state = self.state - if state == ProbingState.FOUND_IT: - return 0.99 - elif state == ProbingState.NOT_ME: - return 0.01 - best_conf = 0.0 - self._best_guess_prober = None - for prober in self.probers: - if not prober: - continue - if not prober.active: - self.logger.debug('%s not active', prober.charset_name) - continue - conf = prober.get_confidence() - self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) - if best_conf < conf: - best_conf = conf - self._best_guess_prober = prober - if not self._best_guess_prober: - return 0.0 - return best_conf diff --git a/pype/vendor/requests/packages/chardet/charsetprober.py b/pype/vendor/requests/packages/chardet/charsetprober.py deleted file mode 100644 index eac4e59865..0000000000 --- a/pype/vendor/requests/packages/chardet/charsetprober.py +++ /dev/null @@ -1,145 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import logging -import re - -from .enums import ProbingState - - -class CharSetProber(object): - - SHORTCUT_THRESHOLD = 0.95 - - def __init__(self, lang_filter=None): - self._state = None - self.lang_filter = lang_filter - self.logger = logging.getLogger(__name__) - - def reset(self): - self._state = ProbingState.DETECTING - - @property - def charset_name(self): - return None - - def feed(self, buf): - pass - - @property - def state(self): - return self._state - - def get_confidence(self): - return 0.0 - - @staticmethod - def filter_high_byte_only(buf): - buf = re.sub(b'([\x00-\x7F])+', b' ', buf) - return buf - - @staticmethod - def filter_international_words(buf): - """ - We define three types of bytes: - alphabet: english alphabets [a-zA-Z] - international: international characters [\x80-\xFF] - marker: everything else [^a-zA-Z\x80-\xFF] - - The input buffer can be thought to contain a series of words delimited - by markers. This function works to filter all words that contain at - least one international character. All contiguous sequences of markers - are replaced by a single space ascii character. - - This filter applies to all scripts which do not use English characters. - """ - filtered = bytearray() - - # This regex expression filters out only words that have at-least one - # international character. The word may include one marker character at - # the end. - words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', - buf) - - for word in words: - filtered.extend(word[:-1]) - - # If the last character in the word is a marker, replace it with a - # space as markers shouldn't affect our analysis (they are used - # similarly across all languages and may thus have similar - # frequencies). - last_char = word[-1:] - if not last_char.isalpha() and last_char < b'\x80': - last_char = b' ' - filtered.extend(last_char) - - return filtered - - @staticmethod - def filter_with_english_letters(buf): - """ - Returns a copy of ``buf`` that retains only the sequences of English - alphabet and high byte characters that are not between <> characters. - Also retains English alphabet and high byte characters immediately - before occurrences of >. - - This filter can be applied to all scripts which contain both English - characters and extended ASCII characters, but is currently only used by - ``Latin1Prober``. - """ - filtered = bytearray() - in_tag = False - prev = 0 - - for curr in range(len(buf)): - # Slice here to get bytes instead of an int with Python 3 - buf_char = buf[curr:curr + 1] - # Check if we're coming out of or entering an HTML tag - if buf_char == b'>': - in_tag = False - elif buf_char == b'<': - in_tag = True - - # If current character is not extended-ASCII and not alphabetic... - if buf_char < b'\x80' and not buf_char.isalpha(): - # ...and we're not in a tag - if curr > prev and not in_tag: - # Keep everything after last non-extended-ASCII, - # non-alphabetic character - filtered.extend(buf[prev:curr]) - # Output a space to delimit stretch we kept - filtered.extend(b' ') - prev = curr + 1 - - # If we're not in a tag... - if not in_tag: - # Keep everything after last non-extended-ASCII, non-alphabetic - # character - filtered.extend(buf[prev:]) - - return filtered diff --git a/pype/vendor/requests/packages/chardet/cli/__init__.py b/pype/vendor/requests/packages/chardet/cli/__init__.py deleted file mode 100644 index 8b13789179..0000000000 --- a/pype/vendor/requests/packages/chardet/cli/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/pype/vendor/requests/packages/chardet/cli/chardetect.py b/pype/vendor/requests/packages/chardet/cli/chardetect.py deleted file mode 100644 index f0a4cc5d79..0000000000 --- a/pype/vendor/requests/packages/chardet/cli/chardetect.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python -""" -Script which takes one or more file paths and reports on their detected -encodings - -Example:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -If no paths are provided, it takes its input from stdin. - -""" - -from __future__ import absolute_import, print_function, unicode_literals - -import argparse -import sys - -from chardet import __version__ -from chardet.compat import PY2 -from chardet.universaldetector import UniversalDetector - - -def description_of(lines, name='stdin'): - """ - Return a string describing the probable encoding of a file or - list of strings. - - :param lines: The lines to get the encoding of. - :type lines: Iterable of bytes - :param name: Name of file or collection of lines - :type name: str - """ - u = UniversalDetector() - for line in lines: - line = bytearray(line) - u.feed(line) - # shortcut out of the loop to save reading further - particularly useful if we read a BOM. - if u.done: - break - u.close() - result = u.result - if PY2: - name = name.decode(sys.getfilesystemencoding(), 'ignore') - if result['encoding']: - return '{0}: {1} with confidence {2}'.format(name, result['encoding'], - result['confidence']) - else: - return '{0}: no result'.format(name) - - -def main(argv=None): - """ - Handles command line arguments and gets things started. - - :param argv: List of arguments, as if specified on the command-line. - If None, ``sys.argv[1:]`` is used instead. - :type argv: list of str - """ - # Get command line arguments - parser = argparse.ArgumentParser( - description="Takes one or more file paths and reports their detected \ - encodings") - parser.add_argument('input', - help='File whose encoding we would like to determine. \ - (default: stdin)', - type=argparse.FileType('rb'), nargs='*', - default=[sys.stdin if PY2 else sys.stdin.buffer]) - parser.add_argument('--version', action='version', - version='%(prog)s {0}'.format(__version__)) - args = parser.parse_args(argv) - - for f in args.input: - if f.isatty(): - print("You are running chardetect interactively. Press " + - "CTRL-D twice at the start of a blank line to signal the " + - "end of your input. If you want help, run chardetect " + - "--help\n", file=sys.stderr) - print(description_of(f, f.name)) - - -if __name__ == '__main__': - main() diff --git a/pype/vendor/requests/packages/chardet/codingstatemachine.py b/pype/vendor/requests/packages/chardet/codingstatemachine.py deleted file mode 100644 index 68fba44f14..0000000000 --- a/pype/vendor/requests/packages/chardet/codingstatemachine.py +++ /dev/null @@ -1,88 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import logging - -from .enums import MachineState - - -class CodingStateMachine(object): - """ - A state machine to verify a byte sequence for a particular encoding. For - each byte the detector receives, it will feed that byte to every active - state machine available, one byte at a time. The state machine changes its - state based on its previous state and the byte it receives. There are 3 - states in a state machine that are of interest to an auto-detector: - - START state: This is the state to start with, or a legal byte sequence - (i.e. a valid code point) for character has been identified. - - ME state: This indicates that the state machine identified a byte sequence - that is specific to the charset it is designed for and that - there is no other possible encoding which can contain this byte - sequence. This will to lead to an immediate positive answer for - the detector. - - ERROR state: This indicates the state machine identified an illegal byte - sequence for that encoding. This will lead to an immediate - negative answer for this encoding. Detector will exclude this - encoding from consideration from here on. - """ - def __init__(self, sm): - self._model = sm - self._curr_byte_pos = 0 - self._curr_char_len = 0 - self._curr_state = None - self.logger = logging.getLogger(__name__) - self.reset() - - def reset(self): - self._curr_state = MachineState.START - - def next_state(self, c): - # for each byte we get its class - # if it is first byte, we also get byte length - byte_class = self._model['class_table'][c] - if self._curr_state == MachineState.START: - self._curr_byte_pos = 0 - self._curr_char_len = self._model['char_len_table'][byte_class] - # from byte's class and state_table, we get its next state - curr_state = (self._curr_state * self._model['class_factor'] - + byte_class) - self._curr_state = self._model['state_table'][curr_state] - self._curr_byte_pos += 1 - return self._curr_state - - def get_current_charlen(self): - return self._curr_char_len - - def get_coding_state_machine(self): - return self._model['name'] - - @property - def language(self): - return self._model['language'] diff --git a/pype/vendor/requests/packages/chardet/compat.py b/pype/vendor/requests/packages/chardet/compat.py deleted file mode 100644 index ddd74687c0..0000000000 --- a/pype/vendor/requests/packages/chardet/compat.py +++ /dev/null @@ -1,34 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# Contributor(s): -# Dan Blanchard -# Ian Cordasco -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys - - -if sys.version_info < (3, 0): - PY2 = True - PY3 = False - base_str = (str, unicode) - text_type = unicode -else: - PY2 = False - PY3 = True - base_str = (bytes, str) - text_type = str diff --git a/pype/vendor/requests/packages/chardet/constants.py b/pype/vendor/requests/packages/chardet/constants.py deleted file mode 100644 index e4d148b3c5..0000000000 --- a/pype/vendor/requests/packages/chardet/constants.py +++ /dev/null @@ -1,39 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -_debug = 0 - -eDetecting = 0 -eFoundIt = 1 -eNotMe = 2 - -eStart = 0 -eError = 1 -eItsMe = 2 - -SHORTCUT_THRESHOLD = 0.95 diff --git a/pype/vendor/requests/packages/chardet/cp949prober.py b/pype/vendor/requests/packages/chardet/cp949prober.py deleted file mode 100644 index efd793abca..0000000000 --- a/pype/vendor/requests/packages/chardet/cp949prober.py +++ /dev/null @@ -1,49 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .chardistribution import EUCKRDistributionAnalysis -from .codingstatemachine import CodingStateMachine -from .mbcharsetprober import MultiByteCharSetProber -from .mbcssm import CP949_SM_MODEL - - -class CP949Prober(MultiByteCharSetProber): - def __init__(self): - super(CP949Prober, self).__init__() - self.coding_sm = CodingStateMachine(CP949_SM_MODEL) - # NOTE: CP949 is a superset of EUC-KR, so the distribution should be - # not different. - self.distribution_analyzer = EUCKRDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "CP949" - - @property - def language(self): - return "Korean" diff --git a/pype/vendor/requests/packages/chardet/enums.py b/pype/vendor/requests/packages/chardet/enums.py deleted file mode 100644 index 0451207225..0000000000 --- a/pype/vendor/requests/packages/chardet/enums.py +++ /dev/null @@ -1,76 +0,0 @@ -""" -All of the Enums that are used throughout the chardet package. - -:author: Dan Blanchard (dan.blanchard@gmail.com) -""" - - -class InputState(object): - """ - This enum represents the different states a universal detector can be in. - """ - PURE_ASCII = 0 - ESC_ASCII = 1 - HIGH_BYTE = 2 - - -class LanguageFilter(object): - """ - This enum represents the different language filters we can apply to a - ``UniversalDetector``. - """ - CHINESE_SIMPLIFIED = 0x01 - CHINESE_TRADITIONAL = 0x02 - JAPANESE = 0x04 - KOREAN = 0x08 - NON_CJK = 0x10 - ALL = 0x1F - CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL - CJK = CHINESE | JAPANESE | KOREAN - - -class ProbingState(object): - """ - This enum represents the different states a prober can be in. - """ - DETECTING = 0 - FOUND_IT = 1 - NOT_ME = 2 - - -class MachineState(object): - """ - This enum represents the different states a state machine can be in. - """ - START = 0 - ERROR = 1 - ITS_ME = 2 - - -class SequenceLikelihood(object): - """ - This enum represents the likelihood of a character following the previous one. - """ - NEGATIVE = 0 - UNLIKELY = 1 - LIKELY = 2 - POSITIVE = 3 - - @classmethod - def get_num_categories(cls): - """:returns: The number of likelihood categories in the enum.""" - return 4 - - -class CharacterCategory(object): - """ - This enum represents the different categories language models for - ``SingleByteCharsetProber`` put characters into. - - Anything less than CONTROL is considered a letter. - """ - UNDEFINED = 255 - LINE_BREAK = 254 - SYMBOL = 253 - DIGIT = 252 - CONTROL = 251 diff --git a/pype/vendor/requests/packages/chardet/escprober.py b/pype/vendor/requests/packages/chardet/escprober.py deleted file mode 100644 index c70493f2b1..0000000000 --- a/pype/vendor/requests/packages/chardet/escprober.py +++ /dev/null @@ -1,101 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .codingstatemachine import CodingStateMachine -from .enums import LanguageFilter, ProbingState, MachineState -from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, - ISO2022KR_SM_MODEL) - - -class EscCharSetProber(CharSetProber): - """ - This CharSetProber uses a "code scheme" approach for detecting encodings, - whereby easily recognizable escape or shift sequences are relied on to - identify these encodings. - """ - - def __init__(self, lang_filter=None): - super(EscCharSetProber, self).__init__(lang_filter=lang_filter) - self.coding_sm = [] - if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: - self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) - self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) - if self.lang_filter & LanguageFilter.JAPANESE: - self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) - if self.lang_filter & LanguageFilter.KOREAN: - self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) - self.active_sm_count = None - self._detected_charset = None - self._detected_language = None - self._state = None - self.reset() - - def reset(self): - super(EscCharSetProber, self).reset() - for coding_sm in self.coding_sm: - if not coding_sm: - continue - coding_sm.active = True - coding_sm.reset() - self.active_sm_count = len(self.coding_sm) - self._detected_charset = None - self._detected_language = None - - @property - def charset_name(self): - return self._detected_charset - - @property - def language(self): - return self._detected_language - - def get_confidence(self): - if self._detected_charset: - return 0.99 - else: - return 0.00 - - def feed(self, byte_str): - for c in byte_str: - for coding_sm in self.coding_sm: - if not coding_sm or not coding_sm.active: - continue - coding_state = coding_sm.next_state(c) - if coding_state == MachineState.ERROR: - coding_sm.active = False - self.active_sm_count -= 1 - if self.active_sm_count <= 0: - self._state = ProbingState.NOT_ME - return self.state - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - self._detected_charset = coding_sm.get_coding_state_machine() - self._detected_language = coding_sm.language - return self.state - - return self.state diff --git a/pype/vendor/requests/packages/chardet/escsm.py b/pype/vendor/requests/packages/chardet/escsm.py deleted file mode 100644 index 0069523a04..0000000000 --- a/pype/vendor/requests/packages/chardet/escsm.py +++ /dev/null @@ -1,246 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import MachineState - -HZ_CLS = ( -1,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,0,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,4,0,5,2,0, # 78 - 7f -1,1,1,1,1,1,1,1, # 80 - 87 -1,1,1,1,1,1,1,1, # 88 - 8f -1,1,1,1,1,1,1,1, # 90 - 97 -1,1,1,1,1,1,1,1, # 98 - 9f -1,1,1,1,1,1,1,1, # a0 - a7 -1,1,1,1,1,1,1,1, # a8 - af -1,1,1,1,1,1,1,1, # b0 - b7 -1,1,1,1,1,1,1,1, # b8 - bf -1,1,1,1,1,1,1,1, # c0 - c7 -1,1,1,1,1,1,1,1, # c8 - cf -1,1,1,1,1,1,1,1, # d0 - d7 -1,1,1,1,1,1,1,1, # d8 - df -1,1,1,1,1,1,1,1, # e0 - e7 -1,1,1,1,1,1,1,1, # e8 - ef -1,1,1,1,1,1,1,1, # f0 - f7 -1,1,1,1,1,1,1,1, # f8 - ff -) - -HZ_ST = ( -MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 - 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f - 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 - 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f -) - -HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) - -HZ_SM_MODEL = {'class_table': HZ_CLS, - 'class_factor': 6, - 'state_table': HZ_ST, - 'char_len_table': HZ_CHAR_LEN_TABLE, - 'name': "HZ-GB-2312", - 'language': 'Chinese'} - -ISO2022CN_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,3,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,4,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022CN_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 -MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f -MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 - 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f -) - -ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, - 'class_factor': 9, - 'state_table': ISO2022CN_ST, - 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, - 'name': "ISO-2022-CN", - 'language': 'Chinese'} - -ISO2022JP_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,2,2, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,7,0,0,0, # 20 - 27 -3,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -6,0,4,0,8,0,0,0, # 40 - 47 -0,9,5,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022JP_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 -MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f -MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 -) - -ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, - 'class_factor': 10, - 'state_table': ISO2022JP_ST, - 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, - 'name': "ISO-2022-JP", - 'language': 'Japanese'} - -ISO2022KR_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,3,0,0,0, # 20 - 27 -0,4,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,5,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022KR_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 -) - -ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) - -ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, - 'class_factor': 6, - 'state_table': ISO2022KR_ST, - 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, - 'name': "ISO-2022-KR", - 'language': 'Korean'} - - diff --git a/pype/vendor/requests/packages/chardet/eucjpprober.py b/pype/vendor/requests/packages/chardet/eucjpprober.py deleted file mode 100644 index 20ce8f7d15..0000000000 --- a/pype/vendor/requests/packages/chardet/eucjpprober.py +++ /dev/null @@ -1,92 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import ProbingState, MachineState -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCJPDistributionAnalysis -from .jpcntx import EUCJPContextAnalysis -from .mbcssm import EUCJP_SM_MODEL - - -class EUCJPProber(MultiByteCharSetProber): - def __init__(self): - super(EUCJPProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) - self.distribution_analyzer = EUCJPDistributionAnalysis() - self.context_analyzer = EUCJPContextAnalysis() - self.reset() - - def reset(self): - super(EUCJPProber, self).reset() - self.context_analyzer.reset() - - @property - def charset_name(self): - return "EUC-JP" - - @property - def language(self): - return "Japanese" - - def feed(self, byte_str): - for i in range(len(byte_str)): - # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.context_analyzer.feed(self._last_char, char_len) - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.context_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.context_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - context_conf = self.context_analyzer.get_confidence() - distrib_conf = self.distribution_analyzer.get_confidence() - return max(context_conf, distrib_conf) diff --git a/pype/vendor/requests/packages/chardet/euckrfreq.py b/pype/vendor/requests/packages/chardet/euckrfreq.py deleted file mode 100644 index b68078cb96..0000000000 --- a/pype/vendor/requests/packages/chardet/euckrfreq.py +++ /dev/null @@ -1,195 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology - -# 128 --> 0.79 -# 256 --> 0.92 -# 512 --> 0.986 -# 1024 --> 0.99944 -# 2048 --> 0.99999 -# -# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 -# Random Distribution Ration = 512 / (2350-512) = 0.279. -# -# Typical Distribution Ratio - -EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 - -EUCKR_TABLE_SIZE = 2352 - -# Char to FreqOrder table , -EUCKR_CHAR_TO_FREQ_ORDER = ( - 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, -1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, -1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, - 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, - 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, - 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, -1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, - 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, - 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, -1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, -1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, -1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, -1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, -1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, - 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, -1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, -1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, -1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, -1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, - 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, -1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, - 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, - 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, -1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, - 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, -1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, - 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, - 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, -1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, -1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, -1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, -1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, - 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, -1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, - 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, - 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, -1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, -1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, -1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, -1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, -1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, -1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, - 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, - 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, - 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, -1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, - 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, -1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, - 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, - 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, -2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, - 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, - 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, -2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, -2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, -2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, - 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, - 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, -2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, - 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, -1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, -2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, -1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, -2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, -2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, -1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, - 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, -2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, -2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, - 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, - 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, -2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, -1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, -2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, -2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, -2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, -2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, -2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, -2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, -1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, -2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, -2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, -2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, -2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, -2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, -1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, -1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, -2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, -1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, -2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, -1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, - 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, -2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, - 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, -2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, - 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, -2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, -2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, - 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, -2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, -1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, - 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, -1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, -2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, -1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, -2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, - 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, -2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, -1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, -2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, -1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, -2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, -1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, - 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, -2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, -2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, - 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, - 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, -1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, -1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, - 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, -2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, -2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, - 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, - 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, - 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, -2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, - 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, - 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, -2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, -2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, - 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, -2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, -1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, - 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, -2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, -2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, -2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, - 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, - 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, - 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, -2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, -2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, -2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, -1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, -2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, - 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 -) - diff --git a/pype/vendor/requests/packages/chardet/euckrprober.py b/pype/vendor/requests/packages/chardet/euckrprober.py deleted file mode 100644 index 345a060d02..0000000000 --- a/pype/vendor/requests/packages/chardet/euckrprober.py +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCKRDistributionAnalysis -from .mbcssm import EUCKR_SM_MODEL - - -class EUCKRProber(MultiByteCharSetProber): - def __init__(self): - super(EUCKRProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) - self.distribution_analyzer = EUCKRDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "EUC-KR" - - @property - def language(self): - return "Korean" diff --git a/pype/vendor/requests/packages/chardet/euctwfreq.py b/pype/vendor/requests/packages/chardet/euctwfreq.py deleted file mode 100644 index ed7a995a3a..0000000000 --- a/pype/vendor/requests/packages/chardet/euctwfreq.py +++ /dev/null @@ -1,387 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# EUCTW frequency table -# Converted from big5 work -# by Taiwan's Mandarin Promotion Council -# - -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -# Char to FreqOrder table , -EUCTW_TABLE_SIZE = 5376 - -EUCTW_CHAR_TO_FREQ_ORDER = ( - 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 -3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 -1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 - 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 -3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 -4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 -7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 - 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 - 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 - 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 -2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 -1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 -3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 - 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 -3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 -2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 - 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 -3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 -1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 -7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 - 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 -7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 -1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 - 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 - 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 -3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 -3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 - 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 -2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 -2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 - 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 - 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 -3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 -1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 -1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 -1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 -2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 - 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 -4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 -1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 -7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 -2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 - 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 - 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 - 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 - 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 -7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 - 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 -1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 - 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 - 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 -7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 -1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 - 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 -3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 -4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 -3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 - 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 - 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 -1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 -4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 -3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 -3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 -2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 -7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 -3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 -7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 -1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 -2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 -1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 - 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 -1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 -4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 -3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 - 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 - 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 - 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 -2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 -7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 -1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 -2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 -1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 -1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 -7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 -7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 -7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 -3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 -4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 -1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 -7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 -2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 -7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 -3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 -3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 -7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 -2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 -7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 - 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 -4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 -2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 -7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 -3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 -2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 -2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 - 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 -2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 -1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 -1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 -2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 -1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 -7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 -7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 -2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 -4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 -1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 -7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 - 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 -4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 - 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 -2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 - 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 -1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 -1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 - 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 -3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 -3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 -1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 -3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 -7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 -7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 -1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 -2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 -1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 -3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 -2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 -3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 -2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 -4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 -4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 -3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 - 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 -3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 - 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 -3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 -3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 -3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 -1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 -7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 - 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 -7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 -1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 - 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 -4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 -3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 - 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 -2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 -2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 -3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 -1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 -4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 -2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 -1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 -1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 -2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 -3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 -1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 -7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 -1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 -4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 -1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 - 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 -1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 -3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 -3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 -2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 -1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 -4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 - 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 -7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 -2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 -3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 -4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 - 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 -7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 -7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 -1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 -4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 -3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 -2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 -3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 -3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 -2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 -1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 -4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 -3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 -3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 -2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 -4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 -7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 -3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 -2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 -3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 -1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 -2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 -3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 -4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 -2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 -2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 -7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 -1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 -2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 -1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 -3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 -4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 -2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 -3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 -3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 -2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 -4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 -2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 -3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 -4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 -7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 -3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 - 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 -1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 -4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 -1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 -4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 -7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 - 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 -7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 -2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 -1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 -1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 -3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 - 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 - 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 - 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 -3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 -2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 - 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 -7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 -1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 -3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 -7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 -1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 -7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 -4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 -1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 -2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 -2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 -4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 - 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 - 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 -3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 -3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 -1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 -2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 -7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 -1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 -1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 -3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 - 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 -1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 -4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 -7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 -2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 -3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 - 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 -1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 -2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 -2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 -7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 -7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 -7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 -2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 -2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 -1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 -4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 -3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 -3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 -4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 -4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 -2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 -2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 -7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 -4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 -7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 -2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 -1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 -3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 -4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 -2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 - 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 -2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 -1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 -2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 -2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 -4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 -7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 -1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 -3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 -7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 -1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 -8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 -2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 -8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 -2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 -2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 -8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 -8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 -8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 - 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 -8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 -4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 -3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 -8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 -1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 -8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 - 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 -1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 - 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 -4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 -1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 -4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 -1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 - 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 -3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 -4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 -8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 - 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 -3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 - 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 -2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 -) - diff --git a/pype/vendor/requests/packages/chardet/euctwprober.py b/pype/vendor/requests/packages/chardet/euctwprober.py deleted file mode 100644 index 35669cc4dd..0000000000 --- a/pype/vendor/requests/packages/chardet/euctwprober.py +++ /dev/null @@ -1,46 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCTWDistributionAnalysis -from .mbcssm import EUCTW_SM_MODEL - -class EUCTWProber(MultiByteCharSetProber): - def __init__(self): - super(EUCTWProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) - self.distribution_analyzer = EUCTWDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "EUC-TW" - - @property - def language(self): - return "Taiwan" diff --git a/pype/vendor/requests/packages/chardet/gb2312freq.py b/pype/vendor/requests/packages/chardet/gb2312freq.py deleted file mode 100644 index 697837bd9a..0000000000 --- a/pype/vendor/requests/packages/chardet/gb2312freq.py +++ /dev/null @@ -1,283 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# GB2312 most frequently used character table -# -# Char to FreqOrder table , from hz6763 - -# 512 --> 0.79 -- 0.79 -# 1024 --> 0.92 -- 0.13 -# 2048 --> 0.98 -- 0.06 -# 6768 --> 1.00 -- 0.02 -# -# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 -# Random Distribution Ration = 512 / (3755 - 512) = 0.157 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR - -GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 - -GB2312_TABLE_SIZE = 3760 - -GB2312_CHAR_TO_FREQ_ORDER = ( -1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, -2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, -2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, - 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, -1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, -1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, - 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, -1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, -2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, -3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, - 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, -1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, - 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, -2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, - 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, -2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, -1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, -3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, - 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, -1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, - 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, -2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, -1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, -3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, -1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, -2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, -1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, - 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, -3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, -3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, - 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, -3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, - 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, -1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, -3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, -2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, -1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, - 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, -1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, -4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, - 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, -3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, -3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, - 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, -1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, -2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, -1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, -1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, - 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, -3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, -3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, -4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, - 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, -3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, -1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, -1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, -4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, - 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, - 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, -3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, -1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, - 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, -1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, -2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, - 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, - 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, - 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, -3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, -4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, -3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, - 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, -2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, -2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, -2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, - 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, -2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, - 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, - 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, - 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, -3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, -2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, -2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, -1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, - 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, -2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, - 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, - 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, -1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, -1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, - 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, - 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, -1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, -2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, -3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, -2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, -2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, -2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, -3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, -1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, -1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, -2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, -1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, -3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, -1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, -1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, -3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, - 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, -2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, -1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, -4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, -1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, -1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, -3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, -1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, - 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, - 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, -1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, - 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, -1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, -1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, - 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, -3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, -4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, -3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, -2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, -2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, -1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, -3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, -2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, -1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, -1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, - 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, -2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, -2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, -3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, -4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, -3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, - 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, -3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, -2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, -1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, - 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, - 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, -3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, -4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, -2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, -1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, -1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, - 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, -1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, -3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, - 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, - 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, -1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, - 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, -1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, - 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, -2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, - 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, -2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, -2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, -1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, -1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, -2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, - 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, -1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, -1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, -2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, -2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, -3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, -1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, -4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, - 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, - 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, -3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, -1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, - 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, -3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, -1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, -4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, -1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, -2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, -1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, - 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, -1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, -3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, - 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, -2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, - 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, -1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, -1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, -1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, -3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, -2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, -3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, -3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, -3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, - 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, -2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, - 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, -2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, - 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, -1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, - 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, - 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, -1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, -3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, -3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, -1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, -1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, -3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, -2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, -2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, -1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, -3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, - 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, -4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, -1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, -2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, -3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, -3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, -1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, - 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, - 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, -2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, - 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, -1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, - 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, -1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, -1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, -1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, -1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, -1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, - 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, - 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 -) - diff --git a/pype/vendor/requests/packages/chardet/gb2312prober.py b/pype/vendor/requests/packages/chardet/gb2312prober.py deleted file mode 100644 index 8446d2dd95..0000000000 --- a/pype/vendor/requests/packages/chardet/gb2312prober.py +++ /dev/null @@ -1,46 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import GB2312DistributionAnalysis -from .mbcssm import GB2312_SM_MODEL - -class GB2312Prober(MultiByteCharSetProber): - def __init__(self): - super(GB2312Prober, self).__init__() - self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) - self.distribution_analyzer = GB2312DistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "GB2312" - - @property - def language(self): - return "Chinese" diff --git a/pype/vendor/requests/packages/chardet/hebrewprober.py b/pype/vendor/requests/packages/chardet/hebrewprober.py deleted file mode 100644 index b0e1bf4926..0000000000 --- a/pype/vendor/requests/packages/chardet/hebrewprober.py +++ /dev/null @@ -1,292 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Shy Shalom -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState - -# This prober doesn't actually recognize a language or a charset. -# It is a helper prober for the use of the Hebrew model probers - -### General ideas of the Hebrew charset recognition ### -# -# Four main charsets exist in Hebrew: -# "ISO-8859-8" - Visual Hebrew -# "windows-1255" - Logical Hebrew -# "ISO-8859-8-I" - Logical Hebrew -# "x-mac-hebrew" - ?? Logical Hebrew ?? -# -# Both "ISO" charsets use a completely identical set of code points, whereas -# "windows-1255" and "x-mac-hebrew" are two different proper supersets of -# these code points. windows-1255 defines additional characters in the range -# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific -# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. -# x-mac-hebrew defines similar additional code points but with a different -# mapping. -# -# As far as an average Hebrew text with no diacritics is concerned, all four -# charsets are identical with respect to code points. Meaning that for the -# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters -# (including final letters). -# -# The dominant difference between these charsets is their directionality. -# "Visual" directionality means that the text is ordered as if the renderer is -# not aware of a BIDI rendering algorithm. The renderer sees the text and -# draws it from left to right. The text itself when ordered naturally is read -# backwards. A buffer of Visual Hebrew generally looks like so: -# "[last word of first line spelled backwards] [whole line ordered backwards -# and spelled backwards] [first word of first line spelled backwards] -# [end of line] [last word of second line] ... etc' " -# adding punctuation marks, numbers and English text to visual text is -# naturally also "visual" and from left to right. -# -# "Logical" directionality means the text is ordered "naturally" according to -# the order it is read. It is the responsibility of the renderer to display -# the text from right to left. A BIDI algorithm is used to place general -# punctuation marks, numbers and English text in the text. -# -# Texts in x-mac-hebrew are almost impossible to find on the Internet. From -# what little evidence I could find, it seems that its general directionality -# is Logical. -# -# To sum up all of the above, the Hebrew probing mechanism knows about two -# charsets: -# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are -# backwards while line order is natural. For charset recognition purposes -# the line order is unimportant (In fact, for this implementation, even -# word order is unimportant). -# Logical Hebrew - "windows-1255" - normal, naturally ordered text. -# -# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be -# specifically identified. -# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew -# that contain special punctuation marks or diacritics is displayed with -# some unconverted characters showing as question marks. This problem might -# be corrected using another model prober for x-mac-hebrew. Due to the fact -# that x-mac-hebrew texts are so rare, writing another model prober isn't -# worth the effort and performance hit. -# -#### The Prober #### -# -# The prober is divided between two SBCharSetProbers and a HebrewProber, -# all of which are managed, created, fed data, inquired and deleted by the -# SBCSGroupProber. The two SBCharSetProbers identify that the text is in -# fact some kind of Hebrew, Logical or Visual. The final decision about which -# one is it is made by the HebrewProber by combining final-letter scores -# with the scores of the two SBCharSetProbers to produce a final answer. -# -# The SBCSGroupProber is responsible for stripping the original text of HTML -# tags, English characters, numbers, low-ASCII punctuation characters, spaces -# and new lines. It reduces any sequence of such characters to a single space. -# The buffer fed to each prober in the SBCS group prober is pure text in -# high-ASCII. -# The two SBCharSetProbers (model probers) share the same language model: -# Win1255Model. -# The first SBCharSetProber uses the model normally as any other -# SBCharSetProber does, to recognize windows-1255, upon which this model was -# built. The second SBCharSetProber is told to make the pair-of-letter -# lookup in the language model backwards. This in practice exactly simulates -# a visual Hebrew model using the windows-1255 logical Hebrew model. -# -# The HebrewProber is not using any language model. All it does is look for -# final-letter evidence suggesting the text is either logical Hebrew or visual -# Hebrew. Disjointed from the model probers, the results of the HebrewProber -# alone are meaningless. HebrewProber always returns 0.00 as confidence -# since it never identifies a charset by itself. Instead, the pointer to the -# HebrewProber is passed to the model probers as a helper "Name Prober". -# When the Group prober receives a positive identification from any prober, -# it asks for the name of the charset identified. If the prober queried is a -# Hebrew model prober, the model prober forwards the call to the -# HebrewProber to make the final decision. In the HebrewProber, the -# decision is made according to the final-letters scores maintained and Both -# model probers scores. The answer is returned in the form of the name of the -# charset identified, either "windows-1255" or "ISO-8859-8". - -class HebrewProber(CharSetProber): - # windows-1255 / ISO-8859-8 code points of interest - FINAL_KAF = 0xea - NORMAL_KAF = 0xeb - FINAL_MEM = 0xed - NORMAL_MEM = 0xee - FINAL_NUN = 0xef - NORMAL_NUN = 0xf0 - FINAL_PE = 0xf3 - NORMAL_PE = 0xf4 - FINAL_TSADI = 0xf5 - NORMAL_TSADI = 0xf6 - - # Minimum Visual vs Logical final letter score difference. - # If the difference is below this, don't rely solely on the final letter score - # distance. - MIN_FINAL_CHAR_DISTANCE = 5 - - # Minimum Visual vs Logical model score difference. - # If the difference is below this, don't rely at all on the model score - # distance. - MIN_MODEL_DISTANCE = 0.01 - - VISUAL_HEBREW_NAME = "ISO-8859-8" - LOGICAL_HEBREW_NAME = "windows-1255" - - def __init__(self): - super(HebrewProber, self).__init__() - self._final_char_logical_score = None - self._final_char_visual_score = None - self._prev = None - self._before_prev = None - self._logical_prober = None - self._visual_prober = None - self.reset() - - def reset(self): - self._final_char_logical_score = 0 - self._final_char_visual_score = 0 - # The two last characters seen in the previous buffer, - # mPrev and mBeforePrev are initialized to space in order to simulate - # a word delimiter at the beginning of the data - self._prev = ' ' - self._before_prev = ' ' - # These probers are owned by the group prober. - - def set_model_probers(self, logicalProber, visualProber): - self._logical_prober = logicalProber - self._visual_prober = visualProber - - def is_final(self, c): - return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, - self.FINAL_PE, self.FINAL_TSADI] - - def is_non_final(self, c): - # The normal Tsadi is not a good Non-Final letter due to words like - # 'lechotet' (to chat) containing an apostrophe after the tsadi. This - # apostrophe is converted to a space in FilterWithoutEnglishLetters - # causing the Non-Final tsadi to appear at an end of a word even - # though this is not the case in the original text. - # The letters Pe and Kaf rarely display a related behavior of not being - # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' - # for example legally end with a Non-Final Pe or Kaf. However, the - # benefit of these letters as Non-Final letters outweighs the damage - # since these words are quite rare. - return c in [self.NORMAL_KAF, self.NORMAL_MEM, - self.NORMAL_NUN, self.NORMAL_PE] - - def feed(self, byte_str): - # Final letter analysis for logical-visual decision. - # Look for evidence that the received buffer is either logical Hebrew - # or visual Hebrew. - # The following cases are checked: - # 1) A word longer than 1 letter, ending with a final letter. This is - # an indication that the text is laid out "naturally" since the - # final letter really appears at the end. +1 for logical score. - # 2) A word longer than 1 letter, ending with a Non-Final letter. In - # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, - # should not end with the Non-Final form of that letter. Exceptions - # to this rule are mentioned above in isNonFinal(). This is an - # indication that the text is laid out backwards. +1 for visual - # score - # 3) A word longer than 1 letter, starting with a final letter. Final - # letters should not appear at the beginning of a word. This is an - # indication that the text is laid out backwards. +1 for visual - # score. - # - # The visual score and logical score are accumulated throughout the - # text and are finally checked against each other in GetCharSetName(). - # No checking for final letters in the middle of words is done since - # that case is not an indication for either Logical or Visual text. - # - # We automatically filter out all 7-bit characters (replace them with - # spaces) so the word boundary detection works properly. [MAP] - - if self.state == ProbingState.NOT_ME: - # Both model probers say it's not them. No reason to continue. - return ProbingState.NOT_ME - - byte_str = self.filter_high_byte_only(byte_str) - - for cur in byte_str: - if cur == ' ': - # We stand on a space - a word just ended - if self._before_prev != ' ': - # next-to-last char was not a space so self._prev is not a - # 1 letter word - if self.is_final(self._prev): - # case (1) [-2:not space][-1:final letter][cur:space] - self._final_char_logical_score += 1 - elif self.is_non_final(self._prev): - # case (2) [-2:not space][-1:Non-Final letter][ - # cur:space] - self._final_char_visual_score += 1 - else: - # Not standing on a space - if ((self._before_prev == ' ') and - (self.is_final(self._prev)) and (cur != ' ')): - # case (3) [-2:space][-1:final letter][cur:not space] - self._final_char_visual_score += 1 - self._before_prev = self._prev - self._prev = cur - - # Forever detecting, till the end or until both model probers return - # ProbingState.NOT_ME (handled above) - return ProbingState.DETECTING - - @property - def charset_name(self): - # Make the decision: is it Logical or Visual? - # If the final letter score distance is dominant enough, rely on it. - finalsub = self._final_char_logical_score - self._final_char_visual_score - if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: - return self.LOGICAL_HEBREW_NAME - if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: - return self.VISUAL_HEBREW_NAME - - # It's not dominant enough, try to rely on the model scores instead. - modelsub = (self._logical_prober.get_confidence() - - self._visual_prober.get_confidence()) - if modelsub > self.MIN_MODEL_DISTANCE: - return self.LOGICAL_HEBREW_NAME - if modelsub < -self.MIN_MODEL_DISTANCE: - return self.VISUAL_HEBREW_NAME - - # Still no good, back to final letter distance, maybe it'll save the - # day. - if finalsub < 0.0: - return self.VISUAL_HEBREW_NAME - - # (finalsub > 0 - Logical) or (don't know what to do) default to - # Logical. - return self.LOGICAL_HEBREW_NAME - - @property - def language(self): - return 'Hebrew' - - @property - def state(self): - # Remain active as long as any of the model probers are active. - if (self._logical_prober.state == ProbingState.NOT_ME) and \ - (self._visual_prober.state == ProbingState.NOT_ME): - return ProbingState.NOT_ME - return ProbingState.DETECTING diff --git a/pype/vendor/requests/packages/chardet/jisfreq.py b/pype/vendor/requests/packages/chardet/jisfreq.py deleted file mode 100644 index 83fc082b54..0000000000 --- a/pype/vendor/requests/packages/chardet/jisfreq.py +++ /dev/null @@ -1,325 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology -# -# Japanese frequency table, applied to both S-JIS and EUC-JP -# They are sorted in order. - -# 128 --> 0.77094 -# 256 --> 0.85710 -# 512 --> 0.92635 -# 1024 --> 0.97130 -# 2048 --> 0.99431 -# -# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 -# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 -# -# Typical Distribution Ratio, 25% of IDR - -JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 - -# Char to FreqOrder table , -JIS_TABLE_SIZE = 4368 - -JIS_CHAR_TO_FREQ_ORDER = ( - 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 -3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 -1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 -2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 -2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 -5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 -1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 -5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 -5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 -5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 -5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 -5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 -5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 -1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 -1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 -1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 -2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 -3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 -3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 - 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 - 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 -1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 - 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 -5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 - 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 - 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 - 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 - 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 - 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 -5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 -5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 -5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 -4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 -5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 -5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 -5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 -5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 -5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 -5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 -5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 -5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 -5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 -3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 -5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 -5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 -5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 -5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 -5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 -5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 -5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 -5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 -5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 -5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 -5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 -5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 -5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 -5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 -5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 -5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 -5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 -5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 -5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 -5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 -5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 -5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 -5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 -5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 -5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 -5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 -5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 -5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 -5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 -5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 -5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 -5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 -5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 -5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 -5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 -5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 -6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 -6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 -6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 -6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 -6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 -6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 -6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 -6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 -4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 - 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 - 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 -1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 -1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 - 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 -3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 -3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 - 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 -3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 -3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 - 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 -2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 - 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 -3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 -1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 - 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 -1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 - 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 -2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 -2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 -2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 -2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 -1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 -1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 -1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 -1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 -2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 -1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 -2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 -1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 -1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 -1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 -1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 -1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 -1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 - 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 - 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 -1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 -2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 -2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 -2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 -3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 -3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 - 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 -3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 -1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 - 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 -2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 -1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 - 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 -3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 -4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 -2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 -1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 -2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 -1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 - 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 - 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 -1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 -2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 -2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 -2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 -3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 -1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 -2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 - 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 - 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 - 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 -1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 -2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 - 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 -1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 -1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 - 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 -1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 -1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 -1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 - 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 -2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 - 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 -2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 -3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 -2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 -1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 -6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 -1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 -2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 -1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 - 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 - 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 -3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 -3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 -1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 -1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 -1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 -1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 - 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 - 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 -2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 - 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 -3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 -2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 - 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 -1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 -2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 - 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 -1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 - 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 -4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 -2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 -1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 - 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 -1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 -2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 - 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 -6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 -1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 -1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 -2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 -3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 - 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 -3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 -1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 - 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 -1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 - 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 -3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 - 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 -2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 - 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 -4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 -2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 -1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 -1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 -1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 - 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 -1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 -3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 -1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 -3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 - 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 - 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 - 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 -2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 -1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 - 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 -1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 - 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 -1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 - 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 - 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 - 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 -1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 -1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 -2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 -4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 - 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 -1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 - 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 -1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 -3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 -1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 -2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 -2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 -1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 -1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 -2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 - 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 -2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 -1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 -1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 -1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 -1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 -3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 -2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 -2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 - 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 -3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 -3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 -1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 -2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 -1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 -2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 -) - - diff --git a/pype/vendor/requests/packages/chardet/jpcntx.py b/pype/vendor/requests/packages/chardet/jpcntx.py deleted file mode 100644 index 20044e4bc8..0000000000 --- a/pype/vendor/requests/packages/chardet/jpcntx.py +++ /dev/null @@ -1,233 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -# This is hiragana 2-char sequence table, the number in each cell represents its frequency category -jp2CharContext = ( -(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), -(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), -(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), -(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), -(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), -(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), -(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), -(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), -(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), -(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), -(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), -(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), -(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), -(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), -(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), -(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), -(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), -(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), -(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), -(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), -(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), -(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), -(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), -(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), -(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), -(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), -(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), -(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), -(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), -(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), -(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), -(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), -(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), -(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), -(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), -(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), -(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), -(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), -(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), -(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), -(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), -(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), -(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), -(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), -(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), -(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), -(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), -(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), -(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), -(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), -(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), -(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), -(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), -(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), -(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), -(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), -(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), -(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), -(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), -(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), -(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), -(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), -(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), -(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), -(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), -(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), -(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), -(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), -(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), -(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), -(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), -(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), -(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), -(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), -) - -class JapaneseContextAnalysis(object): - NUM_OF_CATEGORY = 6 - DONT_KNOW = -1 - ENOUGH_REL_THRESHOLD = 100 - MAX_REL_THRESHOLD = 1000 - MINIMUM_DATA_THRESHOLD = 4 - - def __init__(self): - self._total_rel = None - self._rel_sample = None - self._need_to_skip_char_num = None - self._last_char_order = None - self._done = None - self.reset() - - def reset(self): - self._total_rel = 0 # total sequence received - # category counters, each integer counts sequence in its category - self._rel_sample = [0] * self.NUM_OF_CATEGORY - # if last byte in current buffer is not the last byte of a character, - # we need to know how many bytes to skip in next buffer - self._need_to_skip_char_num = 0 - self._last_char_order = -1 # The order of previous char - # If this flag is set to True, detection is done and conclusion has - # been made - self._done = False - - def feed(self, byte_str, num_bytes): - if self._done: - return - - # The buffer we got is byte oriented, and a character may span in more than one - # buffers. In case the last one or two byte in last buffer is not - # complete, we record how many byte needed to complete that character - # and skip these bytes here. We can choose to record those bytes as - # well and analyse the character once it is complete, but since a - # character will not make much difference, by simply skipping - # this character will simply our logic and improve performance. - i = self._need_to_skip_char_num - while i < num_bytes: - order, char_len = self.get_order(byte_str[i:i + 2]) - i += char_len - if i > num_bytes: - self._need_to_skip_char_num = i - num_bytes - self._last_char_order = -1 - else: - if (order != -1) and (self._last_char_order != -1): - self._total_rel += 1 - if self._total_rel > self.MAX_REL_THRESHOLD: - self._done = True - break - self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 - self._last_char_order = order - - def got_enough_data(self): - return self._total_rel > self.ENOUGH_REL_THRESHOLD - - def get_confidence(self): - # This is just one way to calculate confidence. It works well for me. - if self._total_rel > self.MINIMUM_DATA_THRESHOLD: - return (self._total_rel - self._rel_sample[0]) / self._total_rel - else: - return self.DONT_KNOW - - def get_order(self, byte_str): - return -1, 1 - -class SJISContextAnalysis(JapaneseContextAnalysis): - def __init__(self): - super(SJISContextAnalysis, self).__init__() - self._charset_name = "SHIFT_JIS" - - @property - def charset_name(self): - return self._charset_name - - def get_order(self, byte_str): - if not byte_str: - return -1, 1 - # find out current char's byte length - first_char = byte_str[0] - if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): - char_len = 2 - if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): - self._charset_name = "CP932" - else: - char_len = 1 - - # return its order if it is hiragana - if len(byte_str) > 1: - second_char = byte_str[1] - if (first_char == 202) and (0x9F <= second_char <= 0xF1): - return second_char - 0x9F, char_len - - return -1, char_len - -class EUCJPContextAnalysis(JapaneseContextAnalysis): - def get_order(self, byte_str): - if not byte_str: - return -1, 1 - # find out current char's byte length - first_char = byte_str[0] - if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): - char_len = 2 - elif first_char == 0x8F: - char_len = 3 - else: - char_len = 1 - - # return its order if it is hiragana - if len(byte_str) > 1: - second_char = byte_str[1] - if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): - return second_char - 0xA1, char_len - - return -1, char_len - - diff --git a/pype/vendor/requests/packages/chardet/langbulgarianmodel.py b/pype/vendor/requests/packages/chardet/langbulgarianmodel.py deleted file mode 100644 index 2aa4fb2e22..0000000000 --- a/pype/vendor/requests/packages/chardet/langbulgarianmodel.py +++ /dev/null @@ -1,228 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -# this table is modified base on win1251BulgarianCharToOrderMap, so -# only number <64 is sure valid - -Latin5_BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 -210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 - 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 - 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 -) - -win1251BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 -221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 - 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 - 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 96.9392% -# first 1024 sequences:3.0618% -# rest sequences: 0.2992% -# negative sequences: 0.0020% -BulgarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, -3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, -0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, -0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, -0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, -0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, -0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, -2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, -3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, -1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, -3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, -1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, -2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, -2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, -3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, -1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, -2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, -2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, -1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, -2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, -2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, -2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, -1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, -2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, -1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, -3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, -1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, -3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, -1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, -2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, -1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, -2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, -1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, -2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, -1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, -2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, -1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, -0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, -1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, -1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, -1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, -0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, -1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, -1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -) - -Latin5BulgarianModel = { - 'char_to_order_map': Latin5_BulgarianCharToOrderMap, - 'precedence_matrix': BulgarianLangModel, - 'typical_positive_ratio': 0.969392, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-5", - 'language': 'Bulgairan', -} - -Win1251BulgarianModel = { - 'char_to_order_map': win1251BulgarianCharToOrderMap, - 'precedence_matrix': BulgarianLangModel, - 'typical_positive_ratio': 0.969392, - 'keep_english_letter': False, - 'charset_name': "windows-1251", - 'language': 'Bulgarian', -} diff --git a/pype/vendor/requests/packages/chardet/langcyrillicmodel.py b/pype/vendor/requests/packages/chardet/langcyrillicmodel.py deleted file mode 100644 index e5f9a1fd19..0000000000 --- a/pype/vendor/requests/packages/chardet/langcyrillicmodel.py +++ /dev/null @@ -1,333 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# KOI8-R language model -# Character Mapping Table: -KOI8R_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 -223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 -238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 - 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 - 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 - 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 - 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 -) - -win1251_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -) - -latin5_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -macCyrillic_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, -) - -IBM855_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, -206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, - 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, -220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, -230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, - 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, - 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, -250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, -) - -IBM866_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 97.6601% -# first 1024 sequences: 2.3389% -# rest sequences: 0.1237% -# negative sequences: 0.0009% -RussianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, -1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, -1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, -2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, -1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, -3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, -1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, -2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, -1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, -1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, -1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, -1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, -3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, -1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, -2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, -1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, -2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, -1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, -1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, -1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, -3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, -3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, -1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, -1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, -0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, -1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, -1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, -0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, -1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, -2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, -1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, -1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, -2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, -1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, -1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, -1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, -0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, -0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, -0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, -2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, -0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -) - -Koi8rModel = { - 'char_to_order_map': KOI8R_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "KOI8-R", - 'language': 'Russian', -} - -Win1251CyrillicModel = { - 'char_to_order_map': win1251_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "windows-1251", - 'language': 'Russian', -} - -Latin5CyrillicModel = { - 'char_to_order_map': latin5_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-5", - 'language': 'Russian', -} - -MacCyrillicModel = { - 'char_to_order_map': macCyrillic_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "MacCyrillic", - 'language': 'Russian', -} - -Ibm866Model = { - 'char_to_order_map': IBM866_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "IBM866", - 'language': 'Russian', -} - -Ibm855Model = { - 'char_to_order_map': IBM855_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "IBM855", - 'language': 'Russian', -} diff --git a/pype/vendor/requests/packages/chardet/langgreekmodel.py b/pype/vendor/requests/packages/chardet/langgreekmodel.py deleted file mode 100644 index 533222166c..0000000000 --- a/pype/vendor/requests/packages/chardet/langgreekmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin7_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -win1253_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.2851% -# first 1024 sequences:1.7001% -# rest sequences: 0.0359% -# negative sequences: 0.0148% -GreekLangModel = ( -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, -2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, -2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, -2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, -0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, -3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, -2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, -0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, -0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, -0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, -0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, -0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, -0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, -0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, -0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, -0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, -0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, -0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, -0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, -0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, -0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, -0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, -0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, -0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, -0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin7GreekModel = { - 'char_to_order_map': Latin7_char_to_order_map, - 'precedence_matrix': GreekLangModel, - 'typical_positive_ratio': 0.982851, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-7", - 'language': 'Greek', -} - -Win1253GreekModel = { - 'char_to_order_map': win1253_char_to_order_map, - 'precedence_matrix': GreekLangModel, - 'typical_positive_ratio': 0.982851, - 'keep_english_letter': False, - 'charset_name': "windows-1253", - 'language': 'Greek', -} diff --git a/pype/vendor/requests/packages/chardet/langhebrewmodel.py b/pype/vendor/requests/packages/chardet/langhebrewmodel.py deleted file mode 100644 index 58f4c875ec..0000000000 --- a/pype/vendor/requests/packages/chardet/langhebrewmodel.py +++ /dev/null @@ -1,200 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Simon Montagu -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Shoshannah Forbes - original C code (?) -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Windows-1255 language model -# Character Mapping Table: -WIN1255_CHAR_TO_ORDER_MAP = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 - 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 -253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 - 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 -124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, -215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, - 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, -106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, - 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, -238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, - 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, - 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.4004% -# first 1024 sequences: 1.5981% -# rest sequences: 0.087% -# negative sequences: 0.0015% -HEBREW_LANG_MODEL = ( -0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, -3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, -1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, -1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, -1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, -1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, -0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, -0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, -0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, -0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, -0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, -0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, -0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, -0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, -0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, -0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, -0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, -0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, -0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, -1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, -1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, -2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, -0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, -0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, -) - -Win1255HebrewModel = { - 'char_to_order_map': WIN1255_CHAR_TO_ORDER_MAP, - 'precedence_matrix': HEBREW_LANG_MODEL, - 'typical_positive_ratio': 0.984004, - 'keep_english_letter': False, - 'charset_name': "windows-1255", - 'language': 'Hebrew', -} diff --git a/pype/vendor/requests/packages/chardet/langhungarianmodel.py b/pype/vendor/requests/packages/chardet/langhungarianmodel.py deleted file mode 100644 index bb7c095e1e..0000000000 --- a/pype/vendor/requests/packages/chardet/langhungarianmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin2_HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, -175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, - 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, - 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, -245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -win1250HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, -177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, - 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, - 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, -245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 94.7368% -# first 1024 sequences:5.2623% -# rest sequences: 0.8894% -# negative sequences: 0.0009% -HungarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, -3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, -0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, -1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, -1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, -3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, -2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, -2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, -2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, -2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, -1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, -1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, -3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, -1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, -1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, -2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, -2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, -2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, -3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, -1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, -1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, -1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, -2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, -1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, -2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, -2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, -1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, -1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, -0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, -2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, -2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, -1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, -1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, -2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, -2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, -2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, -1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, -0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -) - -Latin2HungarianModel = { - 'char_to_order_map': Latin2_HungarianCharToOrderMap, - 'precedence_matrix': HungarianLangModel, - 'typical_positive_ratio': 0.947368, - 'keep_english_letter': True, - 'charset_name': "ISO-8859-2", - 'language': 'Hungarian', -} - -Win1250HungarianModel = { - 'char_to_order_map': win1250HungarianCharToOrderMap, - 'precedence_matrix': HungarianLangModel, - 'typical_positive_ratio': 0.947368, - 'keep_english_letter': True, - 'charset_name': "windows-1250", - 'language': 'Hungarian', -} diff --git a/pype/vendor/requests/packages/chardet/langthaimodel.py b/pype/vendor/requests/packages/chardet/langthaimodel.py deleted file mode 100644 index 15f94c2df0..0000000000 --- a/pype/vendor/requests/packages/chardet/langthaimodel.py +++ /dev/null @@ -1,199 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# The following result for thai was collected from a limited sample (1M). - -# Character Mapping Table: -TIS620CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 -188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 -253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 - 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 -209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, -223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, -236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, - 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, - 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, - 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, - 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, - 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 92.6386% -# first 1024 sequences:7.3177% -# rest sequences: 1.0230% -# negative sequences: 0.0436% -ThaiLangModel = ( -0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, -0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, -3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, -0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, -3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, -3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, -3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, -3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, -2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, -3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, -1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, -3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, -1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, -0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, -0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, -2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, -0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, -3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, -2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, -2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, -3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, -3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, -3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, -3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, -1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, -0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, -0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, -3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, -3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, -1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, -3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, -3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, -0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, -0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, -1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, -1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, -3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, -0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, -3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, -0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, -0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, -0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, -0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, -0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, -0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, -0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, -3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, -2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, -0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, -3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, -1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, -1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -TIS620ThaiModel = { - 'char_to_order_map': TIS620CharToOrderMap, - 'precedence_matrix': ThaiLangModel, - 'typical_positive_ratio': 0.926386, - 'keep_english_letter': False, - 'charset_name': "TIS-620", - 'language': 'Thai', -} diff --git a/pype/vendor/requests/packages/chardet/langturkishmodel.py b/pype/vendor/requests/packages/chardet/langturkishmodel.py deleted file mode 100644 index a427a45739..0000000000 --- a/pype/vendor/requests/packages/chardet/langturkishmodel.py +++ /dev/null @@ -1,193 +0,0 @@ -# -*- coding: utf-8 -*- -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Özgür Baskın - Turkish Language Model -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin5_TurkishCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255, 23, 37, 47, 39, 29, 52, 36, 45, 53, 60, 16, 49, 20, 46, 42, - 48, 69, 44, 35, 31, 51, 38, 62, 65, 43, 56,255,255,255,255,255, -255, 1, 21, 28, 12, 2, 18, 27, 25, 3, 24, 10, 5, 13, 4, 15, - 26, 64, 7, 8, 9, 14, 32, 57, 58, 11, 22,255,255,255,255,255, -180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165, -164,163,162,161,160,159,101,158,157,156,155,154,153,152,151,106, -150,149,148,147,146,145,144,100,143,142,141,140,139,138,137,136, - 94, 80, 93,135,105,134,133, 63,132,131,130,129,128,127,126,125, -124,104, 73, 99, 79, 85,123, 54,122, 98, 92,121,120, 91,103,119, - 68,118,117, 97,116,115, 50, 90,114,113,112,111, 55, 41, 40, 86, - 89, 70, 59, 78, 71, 82, 88, 33, 77, 66, 84, 83,110, 75, 61, 96, - 30, 67,109, 74, 87,102, 34, 95, 81,108, 76, 72, 17, 6, 19,107, -) - -TurkishLangModel = ( -3,2,3,3,3,1,3,3,3,3,3,3,3,3,2,1,1,3,3,1,3,3,0,3,3,3,3,3,0,3,1,3, -3,2,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, -3,2,2,3,3,0,3,3,3,3,3,3,3,2,3,1,0,3,3,1,3,3,0,3,3,3,3,3,0,3,0,3, -3,1,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,0,1,0,1, -3,3,2,3,3,0,3,3,3,3,3,3,3,2,3,1,1,3,3,0,3,3,1,2,3,3,3,3,0,3,0,3, -3,1,1,0,0,0,1,0,0,0,0,1,1,0,1,2,1,0,0,0,1,0,0,0,0,2,0,0,0,0,0,1, -3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,2,0,3,2,1,2,2,1,3,3,0,0,0,2, -2,2,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1, -3,3,3,2,3,3,1,2,3,3,3,3,3,3,3,1,3,2,1,0,3,2,0,1,2,3,3,2,1,0,0,2, -2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0, -1,0,1,3,3,1,3,3,3,3,3,3,3,1,2,0,0,2,3,0,2,3,0,0,2,2,2,3,0,3,0,1, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,2,0,2,3,2,3,3,1,0,0,2, -3,2,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,0,1, -3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,0,3,3,0,0,2,1,0,0,2,3,2,2,0,0,0,2, -2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,2,0,0,1, -3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,0,1,3,2,1,1,3,2,3,2,1,0,0,2, -2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, -3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,2,0,2,3,0,0,2,2,2,2,0,0,0,2, -3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, -3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,0,3,3,1,1,2,2,0,0,2,2,3,2,0,0,1,3, -0,3,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1, -3,3,3,2,3,3,3,2,1,2,2,3,2,3,3,0,3,2,0,0,1,1,0,1,1,2,1,2,0,0,0,1, -0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, -3,3,3,2,3,3,2,3,2,2,2,3,3,3,3,1,3,1,1,0,3,2,1,1,3,3,2,3,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,1, -3,2,2,3,3,0,3,3,3,3,3,3,3,2,2,1,0,3,3,1,3,3,0,1,3,3,2,3,0,3,0,3, -2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -2,2,2,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3,2,0,3,3,0,3,2,3,3,3,0,3,1,3, -2,0,0,0,0,0,0,0,0,0,0,1,0,1,2,0,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, -3,3,3,1,2,3,3,1,0,0,1,0,0,3,3,2,3,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0, -0,3,1,0,1,0,0,0,2,2,1,0,1,1,2,1,2,2,2,0,2,1,1,0,0,0,2,0,0,0,0,0, -1,2,1,3,3,0,3,3,3,3,3,2,3,0,0,0,0,2,3,0,2,3,1,0,2,3,1,3,0,3,0,2, -3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,3,3,2,2,3,2,2,0,1,2,3,0,1,2,1,0,1,0,0,0,1,0,2,2,0,0,0,1, -1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0, -3,3,3,1,3,3,1,1,3,3,1,1,3,3,1,0,2,1,2,0,2,1,0,0,1,1,2,1,0,0,0,2, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,0,2,1,3,0,0,2,0,0,3,3,0,3,0,0,1,0,1,2,0,0,1,1,2,2,0,1,0, -0,1,2,1,1,0,1,0,1,1,1,1,1,0,1,1,1,2,2,1,2,0,1,0,0,0,0,0,0,1,0,0, -3,3,3,2,3,2,3,3,0,2,2,2,3,3,3,0,3,0,0,0,2,2,0,1,2,1,1,1,0,0,0,1, -0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -3,3,3,3,3,3,2,1,2,2,3,3,3,3,2,0,2,0,0,0,2,2,0,0,2,1,3,3,0,0,1,1, -1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, -1,1,2,3,3,0,3,3,3,3,3,3,2,2,0,2,0,2,3,2,3,2,2,2,2,2,2,2,1,3,2,3, -2,0,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,0,0,2,1,1,0,2,1,0,0,1,0,0,0,1, -2,3,3,1,1,1,0,1,1,1,2,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,2,2,1,3,3,3,0,2,1,2,0,2,1,0,0,1,1,1,1,1,0,0,1, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, -3,3,3,2,3,3,3,3,3,2,3,1,2,3,3,1,2,0,0,0,0,0,0,0,3,2,1,1,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -3,3,3,2,2,3,3,2,1,1,1,1,1,3,3,0,3,1,0,0,1,1,0,0,3,1,2,1,0,0,0,0, -0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, -3,3,3,2,2,3,2,2,2,3,2,1,1,3,3,0,3,0,0,0,0,1,0,0,3,1,1,2,0,0,0,1, -1,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,3,3,0,3,3,3,3,3,2,2,2,1,2,0,2,1,2,2,1,1,0,1,2,2,2,2,2,2,2, -0,0,2,1,2,1,2,1,0,1,1,3,1,2,1,1,2,0,0,2,0,1,0,1,0,1,0,0,0,1,0,1, -3,3,3,1,3,3,3,0,1,1,0,2,2,3,1,0,3,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,2,2,1,0,0,1,0,0,3,3,1,3,0,0,1,1,0,2,0,3,0,0,0,2,0,1,1, -0,1,2,0,1,2,2,0,2,2,2,2,1,0,2,1,1,0,2,0,2,1,2,0,0,0,0,0,0,0,0,0, -3,3,3,1,3,2,3,2,0,2,2,2,1,3,2,0,2,1,2,0,1,2,0,0,1,0,2,2,0,0,0,2, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, -3,3,3,0,3,3,1,1,2,3,1,0,3,2,3,0,3,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0, -1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,3,0,3,3,2,3,3,2,2,0,0,0,0,1,2,0,1,3,0,0,0,3,1,1,0,3,0,2, -2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,2,2,1,0,3,1,1,1,1,3,3,2,3,0,0,1,0,1,2,0,2,2,0,2,2,0,2,1, -0,2,2,1,1,1,1,0,2,1,1,0,1,1,1,1,2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0, -3,3,3,0,1,1,3,0,0,1,1,0,0,2,2,0,3,0,0,1,1,0,1,0,0,0,0,0,2,0,0,0, -0,3,1,0,1,0,1,0,2,0,0,1,0,1,0,1,1,1,2,1,1,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,0,2,0,1,1,1,0,0,3,3,0,2,0,0,1,0,0,2,1,1,0,1,0,1,0,1,0, -0,2,0,1,2,0,2,0,2,1,1,0,1,0,2,1,1,0,2,1,1,0,1,0,0,0,1,1,0,0,0,0, -3,2,3,0,1,0,0,0,0,0,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0, -0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,2,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,0,0,2,3,0,0,1,0,1,0,2,3,2,3,0,0,1,3,0,2,1,0,0,0,0,2,0,1,0, -0,2,1,0,0,1,1,0,2,1,0,0,1,0,0,1,1,0,1,1,2,0,1,0,0,0,0,1,0,0,0,0, -3,2,2,0,0,1,1,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,1,0,0,0,0,0,2,0,1,0, -0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,3,3,0,2,3,2,2,1,2,2,1,1,2,0,1,3,2,2,2,0,0,2,2,0,0,0,1,2,1, -3,0,2,1,1,0,1,1,1,0,1,2,2,2,1,1,2,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0, -0,1,1,2,3,0,3,3,3,2,2,2,2,1,0,1,0,1,0,1,2,2,0,0,2,2,1,3,1,1,2,1, -0,0,1,1,2,0,1,1,0,0,1,2,0,2,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0, -3,3,2,0,0,3,1,0,0,0,0,0,0,3,2,1,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, -0,2,1,1,0,0,1,0,1,2,0,0,1,1,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,1,0,0,0,0,1,0,0,3,3,2,2,0,0,1,0,0,2,0,1,0,0,0,2,0,1,0, -0,0,1,1,0,0,2,0,2,1,0,0,1,1,2,1,2,0,2,1,2,1,1,1,0,0,1,1,0,0,0,0, -3,3,2,0,0,2,2,0,0,0,1,1,0,2,2,1,3,1,0,1,0,1,2,0,0,0,0,0,1,0,1,0, -0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,0,0,0,1,0,0,1,0,0,2,3,1,2,0,0,1,0,0,2,0,0,0,1,0,2,0,2,0, -0,1,1,2,2,1,2,0,2,1,1,0,0,1,1,0,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,1,2,1,0,0,1,1,0,3,3,1,2,0,0,1,0,0,2,0,2,0,1,1,2,0,0,0, -0,0,1,1,1,1,2,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -3,3,3,0,2,2,3,2,0,0,1,0,0,2,3,1,0,0,0,0,0,0,2,0,2,0,0,0,2,0,0,0, -0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,0,0,0,0,0,0,1,0,0,2,2,2,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, -0,0,2,1,1,0,1,0,2,1,1,0,0,1,1,2,1,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0, -0,0,0,2,2,0,2,1,1,1,1,2,2,0,0,1,0,1,0,0,1,3,0,0,0,0,1,0,0,2,1,0, -0,0,1,0,1,0,0,0,0,0,2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -2,0,0,2,3,0,2,3,1,2,2,0,2,0,0,2,0,2,1,1,1,2,1,0,0,1,2,1,1,2,1,0, -1,0,2,0,1,0,1,1,0,0,2,2,1,2,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,1,2,0,0,0,1,0,0,3,2,0,1,0,0,1,0,0,2,0,0,0,1,2,1,0,1,0, -0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,2,2,0,2,2,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,0,1,0,0,0,1,1,1,1, -0,0,2,1,0,1,1,1,0,1,1,2,1,2,1,1,2,0,1,1,2,1,0,2,0,0,0,0,0,0,0,0, -3,2,2,0,0,2,0,0,0,0,0,0,0,2,2,0,2,0,0,1,0,0,2,0,0,0,0,0,2,0,0,0, -0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,0,2,2,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0, -2,0,1,0,1,0,1,1,0,0,1,2,0,1,0,1,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0, -2,2,2,0,1,1,0,0,0,1,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0, -0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,1,1,1,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -1,1,2,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,1, -0,0,1,2,2,0,2,1,2,1,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,2,2,0,0,0,1,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin5TurkishModel = { - 'char_to_order_map': Latin5_TurkishCharToOrderMap, - 'precedence_matrix': TurkishLangModel, - 'typical_positive_ratio': 0.970290, - 'keep_english_letter': True, - 'charset_name': "ISO-8859-9", - 'language': 'Turkish', -} diff --git a/pype/vendor/requests/packages/chardet/latin1prober.py b/pype/vendor/requests/packages/chardet/latin1prober.py deleted file mode 100644 index 7d1e8c20fb..0000000000 --- a/pype/vendor/requests/packages/chardet/latin1prober.py +++ /dev/null @@ -1,145 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState - -FREQ_CAT_NUM = 4 - -UDF = 0 # undefined -OTH = 1 # other -ASC = 2 # ascii capital letter -ASS = 3 # ascii small letter -ACV = 4 # accent capital vowel -ACO = 5 # accent capital other -ASV = 6 # accent small vowel -ASO = 7 # accent small other -CLASS_NUM = 8 # total classes - -Latin1_CharToClass = ( - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F - OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 - ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F - OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 - ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F - OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 - OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F - UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 - OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF - ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 - ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF - ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 - ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF - ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 - ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF - ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 - ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF -) - -# 0 : illegal -# 1 : very unlikely -# 2 : normal -# 3 : very likely -Latin1ClassModel = ( -# UDF OTH ASC ASS ACV ACO ASV ASO - 0, 0, 0, 0, 0, 0, 0, 0, # UDF - 0, 3, 3, 3, 3, 3, 3, 3, # OTH - 0, 3, 3, 3, 3, 3, 3, 3, # ASC - 0, 3, 3, 3, 1, 1, 3, 3, # ASS - 0, 3, 3, 3, 1, 2, 1, 2, # ACV - 0, 3, 3, 3, 3, 3, 3, 3, # ACO - 0, 3, 1, 3, 1, 1, 1, 3, # ASV - 0, 3, 1, 3, 1, 1, 3, 3, # ASO -) - - -class Latin1Prober(CharSetProber): - def __init__(self): - super(Latin1Prober, self).__init__() - self._last_char_class = None - self._freq_counter = None - self.reset() - - def reset(self): - self._last_char_class = OTH - self._freq_counter = [0] * FREQ_CAT_NUM - CharSetProber.reset(self) - - @property - def charset_name(self): - return "ISO-8859-1" - - @property - def language(self): - return "" - - def feed(self, byte_str): - byte_str = self.filter_with_english_letters(byte_str) - for c in byte_str: - char_class = Latin1_CharToClass[c] - freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) - + char_class] - if freq == 0: - self._state = ProbingState.NOT_ME - break - self._freq_counter[freq] += 1 - self._last_char_class = char_class - - return self.state - - def get_confidence(self): - if self.state == ProbingState.NOT_ME: - return 0.01 - - total = sum(self._freq_counter) - if total < 0.01: - confidence = 0.0 - else: - confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) - / total) - if confidence < 0.0: - confidence = 0.0 - # lower the confidence of latin1 so that other more accurate - # detector can take priority. - confidence = confidence * 0.73 - return confidence diff --git a/pype/vendor/requests/packages/chardet/mbcharsetprober.py b/pype/vendor/requests/packages/chardet/mbcharsetprober.py deleted file mode 100644 index 6256ecfd1e..0000000000 --- a/pype/vendor/requests/packages/chardet/mbcharsetprober.py +++ /dev/null @@ -1,91 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState, MachineState - - -class MultiByteCharSetProber(CharSetProber): - """ - MultiByteCharSetProber - """ - - def __init__(self, lang_filter=None): - super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) - self.distribution_analyzer = None - self.coding_sm = None - self._last_char = [0, 0] - - def reset(self): - super(MultiByteCharSetProber, self).reset() - if self.coding_sm: - self.coding_sm.reset() - if self.distribution_analyzer: - self.distribution_analyzer.reset() - self._last_char = [0, 0] - - @property - def charset_name(self): - raise NotImplementedError - - @property - def language(self): - raise NotImplementedError - - def feed(self, byte_str): - for i in range(len(byte_str)): - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.distribution_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - return self.distribution_analyzer.get_confidence() diff --git a/pype/vendor/requests/packages/chardet/mbcsgroupprober.py b/pype/vendor/requests/packages/chardet/mbcsgroupprober.py deleted file mode 100644 index 530abe75e0..0000000000 --- a/pype/vendor/requests/packages/chardet/mbcsgroupprober.py +++ /dev/null @@ -1,54 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .utf8prober import UTF8Prober -from .sjisprober import SJISProber -from .eucjpprober import EUCJPProber -from .gb2312prober import GB2312Prober -from .euckrprober import EUCKRProber -from .cp949prober import CP949Prober -from .big5prober import Big5Prober -from .euctwprober import EUCTWProber - - -class MBCSGroupProber(CharSetGroupProber): - def __init__(self, lang_filter=None): - super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) - self.probers = [ - UTF8Prober(), - SJISProber(), - EUCJPProber(), - GB2312Prober(), - EUCKRProber(), - CP949Prober(), - Big5Prober(), - EUCTWProber() - ] - self.reset() diff --git a/pype/vendor/requests/packages/chardet/mbcssm.py b/pype/vendor/requests/packages/chardet/mbcssm.py deleted file mode 100644 index 8360d0f284..0000000000 --- a/pype/vendor/requests/packages/chardet/mbcssm.py +++ /dev/null @@ -1,572 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import MachineState - -# BIG5 - -BIG5_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 4,4,4,4,4,4,4,4, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 4,3,3,3,3,3,3,3, # a0 - a7 - 3,3,3,3,3,3,3,3, # a8 - af - 3,3,3,3,3,3,3,3, # b0 - b7 - 3,3,3,3,3,3,3,3, # b8 - bf - 3,3,3,3,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -BIG5_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 -) - -BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) - -BIG5_SM_MODEL = {'class_table': BIG5_CLS, - 'class_factor': 5, - 'state_table': BIG5_ST, - 'char_len_table': BIG5_CHAR_LEN_TABLE, - 'name': 'Big5'} - -# CP949 - -CP949_CLS = ( - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f - 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f - 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f - 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f - 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f - 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f - 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f - 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f - 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af - 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf - 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff -) - -CP949_ST = ( -#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = - MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 -) - -CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) - -CP949_SM_MODEL = {'class_table': CP949_CLS, - 'class_factor': 10, - 'state_table': CP949_ST, - 'char_len_table': CP949_CHAR_LEN_TABLE, - 'name': 'CP949'} - -# EUC-JP - -EUCJP_CLS = ( - 4,4,4,4,4,4,4,4, # 00 - 07 - 4,4,4,4,4,4,5,5, # 08 - 0f - 4,4,4,4,4,4,4,4, # 10 - 17 - 4,4,4,5,4,4,4,4, # 18 - 1f - 4,4,4,4,4,4,4,4, # 20 - 27 - 4,4,4,4,4,4,4,4, # 28 - 2f - 4,4,4,4,4,4,4,4, # 30 - 37 - 4,4,4,4,4,4,4,4, # 38 - 3f - 4,4,4,4,4,4,4,4, # 40 - 47 - 4,4,4,4,4,4,4,4, # 48 - 4f - 4,4,4,4,4,4,4,4, # 50 - 57 - 4,4,4,4,4,4,4,4, # 58 - 5f - 4,4,4,4,4,4,4,4, # 60 - 67 - 4,4,4,4,4,4,4,4, # 68 - 6f - 4,4,4,4,4,4,4,4, # 70 - 77 - 4,4,4,4,4,4,4,4, # 78 - 7f - 5,5,5,5,5,5,5,5, # 80 - 87 - 5,5,5,5,5,5,1,3, # 88 - 8f - 5,5,5,5,5,5,5,5, # 90 - 97 - 5,5,5,5,5,5,5,5, # 98 - 9f - 5,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,0,5 # f8 - ff -) - -EUCJP_ST = ( - 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f - 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 -) - -EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) - -EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, - 'class_factor': 6, - 'state_table': EUCJP_ST, - 'char_len_table': EUCJP_CHAR_LEN_TABLE, - 'name': 'EUC-JP'} - -# EUC-KR - -EUCKR_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,3,3,3, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,3,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 2,2,2,2,2,2,2,2, # e0 - e7 - 2,2,2,2,2,2,2,2, # e8 - ef - 2,2,2,2,2,2,2,2, # f0 - f7 - 2,2,2,2,2,2,2,0 # f8 - ff -) - -EUCKR_ST = ( - MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f -) - -EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) - -EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, - 'class_factor': 4, - 'state_table': EUCKR_ST, - 'char_len_table': EUCKR_CHAR_LEN_TABLE, - 'name': 'EUC-KR'} - -# EUC-TW - -EUCTW_CLS = ( - 2,2,2,2,2,2,2,2, # 00 - 07 - 2,2,2,2,2,2,0,0, # 08 - 0f - 2,2,2,2,2,2,2,2, # 10 - 17 - 2,2,2,0,2,2,2,2, # 18 - 1f - 2,2,2,2,2,2,2,2, # 20 - 27 - 2,2,2,2,2,2,2,2, # 28 - 2f - 2,2,2,2,2,2,2,2, # 30 - 37 - 2,2,2,2,2,2,2,2, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,2, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,6,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,3,4,4,4,4,4,4, # a0 - a7 - 5,5,1,1,1,1,1,1, # a8 - af - 1,1,1,1,1,1,1,1, # b0 - b7 - 1,1,1,1,1,1,1,1, # b8 - bf - 1,1,3,1,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -EUCTW_ST = ( - MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 - MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 - MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f -) - -EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) - -EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, - 'class_factor': 7, - 'state_table': EUCTW_ST, - 'char_len_table': EUCTW_CHAR_LEN_TABLE, - 'name': 'x-euc-tw'} - -# GB2312 - -GB2312_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 3,3,3,3,3,3,3,3, # 30 - 37 - 3,3,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,4, # 78 - 7f - 5,6,6,6,6,6,6,6, # 80 - 87 - 6,6,6,6,6,6,6,6, # 88 - 8f - 6,6,6,6,6,6,6,6, # 90 - 97 - 6,6,6,6,6,6,6,6, # 98 - 9f - 6,6,6,6,6,6,6,6, # a0 - a7 - 6,6,6,6,6,6,6,6, # a8 - af - 6,6,6,6,6,6,6,6, # b0 - b7 - 6,6,6,6,6,6,6,6, # b8 - bf - 6,6,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 6,6,6,6,6,6,6,6, # e0 - e7 - 6,6,6,6,6,6,6,6, # e8 - ef - 6,6,6,6,6,6,6,6, # f0 - f7 - 6,6,6,6,6,6,6,0 # f8 - ff -) - -GB2312_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 - 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f -) - -# To be accurate, the length of class 6 can be either 2 or 4. -# But it is not necessary to discriminate between the two since -# it is used for frequency analysis only, and we are validating -# each code range there as well. So it is safe to set it to be -# 2 here. -GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) - -GB2312_SM_MODEL = {'class_table': GB2312_CLS, - 'class_factor': 7, - 'state_table': GB2312_ST, - 'char_len_table': GB2312_CHAR_LEN_TABLE, - 'name': 'GB2312'} - -# Shift_JIS - -SJIS_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 3,3,3,3,3,2,2,3, # 80 - 87 - 3,3,3,3,3,3,3,3, # 88 - 8f - 3,3,3,3,3,3,3,3, # 90 - 97 - 3,3,3,3,3,3,3,3, # 98 - 9f - #0xa0 is illegal in sjis encoding, but some pages does - #contain such byte. We need to be more error forgiven. - 2,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,4,4,4, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,0,0,0) # f8 - ff - - -SJIS_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 -) - -SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) - -SJIS_SM_MODEL = {'class_table': SJIS_CLS, - 'class_factor': 6, - 'state_table': SJIS_ST, - 'char_len_table': SJIS_CHAR_LEN_TABLE, - 'name': 'Shift_JIS'} - -# UCS2-BE - -UCS2BE_CLS = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2BE_ST = ( - 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 - 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f - 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 - 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f - 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 -) - -UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) - -UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, - 'class_factor': 6, - 'state_table': UCS2BE_ST, - 'char_len_table': UCS2BE_CHAR_LEN_TABLE, - 'name': 'UTF-16BE'} - -# UCS2-LE - -UCS2LE_CLS = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2LE_ST = ( - 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 - 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f - 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 - 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f - 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 -) - -UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) - -UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, - 'class_factor': 6, - 'state_table': UCS2LE_ST, - 'char_len_table': UCS2LE_CHAR_LEN_TABLE, - 'name': 'UTF-16LE'} - -# UTF-8 - -UTF8_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 2,2,2,2,3,3,3,3, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 5,5,5,5,5,5,5,5, # a0 - a7 - 5,5,5,5,5,5,5,5, # a8 - af - 5,5,5,5,5,5,5,5, # b0 - b7 - 5,5,5,5,5,5,5,5, # b8 - bf - 0,0,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 7,8,8,8,8,8,8,8, # e0 - e7 - 8,8,8,8,8,9,8,8, # e8 - ef - 10,11,11,11,11,11,11,11, # f0 - f7 - 12,13,13,13,14,15,0,0 # f8 - ff -) - -UTF8_ST = ( - MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 - 9, 11, 8, 7, 6, 5, 4, 3,#08-0f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f - MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f - MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f - MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f - MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af - MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf -) - -UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) - -UTF8_SM_MODEL = {'class_table': UTF8_CLS, - 'class_factor': 16, - 'state_table': UTF8_ST, - 'char_len_table': UTF8_CHAR_LEN_TABLE, - 'name': 'UTF-8'} diff --git a/pype/vendor/requests/packages/chardet/sbcharsetprober.py b/pype/vendor/requests/packages/chardet/sbcharsetprober.py deleted file mode 100644 index 0adb51de5a..0000000000 --- a/pype/vendor/requests/packages/chardet/sbcharsetprober.py +++ /dev/null @@ -1,132 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import CharacterCategory, ProbingState, SequenceLikelihood - - -class SingleByteCharSetProber(CharSetProber): - SAMPLE_SIZE = 64 - SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 - POSITIVE_SHORTCUT_THRESHOLD = 0.95 - NEGATIVE_SHORTCUT_THRESHOLD = 0.05 - - def __init__(self, model, reversed=False, name_prober=None): - super(SingleByteCharSetProber, self).__init__() - self._model = model - # TRUE if we need to reverse every pair in the model lookup - self._reversed = reversed - # Optional auxiliary prober for name decision - self._name_prober = name_prober - self._last_order = None - self._seq_counters = None - self._total_seqs = None - self._total_char = None - self._freq_char = None - self.reset() - - def reset(self): - super(SingleByteCharSetProber, self).reset() - # char order of last character - self._last_order = 255 - self._seq_counters = [0] * SequenceLikelihood.get_num_categories() - self._total_seqs = 0 - self._total_char = 0 - # characters that fall in our sampling range - self._freq_char = 0 - - @property - def charset_name(self): - if self._name_prober: - return self._name_prober.charset_name - else: - return self._model['charset_name'] - - @property - def language(self): - if self._name_prober: - return self._name_prober.language - else: - return self._model.get('language') - - def feed(self, byte_str): - if not self._model['keep_english_letter']: - byte_str = self.filter_international_words(byte_str) - if not byte_str: - return self.state - char_to_order_map = self._model['char_to_order_map'] - for i, c in enumerate(byte_str): - # XXX: Order is in range 1-64, so one would think we want 0-63 here, - # but that leads to 27 more test failures than before. - order = char_to_order_map[c] - # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but - # CharacterCategory.SYMBOL is actually 253, so we use CONTROL - # to make it closer to the original intent. The only difference - # is whether or not we count digits and control characters for - # _total_char purposes. - if order < CharacterCategory.CONTROL: - self._total_char += 1 - if order < self.SAMPLE_SIZE: - self._freq_char += 1 - if self._last_order < self.SAMPLE_SIZE: - self._total_seqs += 1 - if not self._reversed: - i = (self._last_order * self.SAMPLE_SIZE) + order - model = self._model['precedence_matrix'][i] - else: # reverse the order of the letters in the lookup - i = (order * self.SAMPLE_SIZE) + self._last_order - model = self._model['precedence_matrix'][i] - self._seq_counters[model] += 1 - self._last_order = order - - charset_name = self._model['charset_name'] - if self.state == ProbingState.DETECTING: - if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: - confidence = self.get_confidence() - if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: - self.logger.debug('%s confidence = %s, we have a winner', - charset_name, confidence) - self._state = ProbingState.FOUND_IT - elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: - self.logger.debug('%s confidence = %s, below negative ' - 'shortcut threshhold %s', charset_name, - confidence, - self.NEGATIVE_SHORTCUT_THRESHOLD) - self._state = ProbingState.NOT_ME - - return self.state - - def get_confidence(self): - r = 0.01 - if self._total_seqs > 0: - r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / - self._total_seqs / self._model['typical_positive_ratio']) - r = r * self._freq_char / self._total_char - if r >= 1.0: - r = 0.99 - return r diff --git a/pype/vendor/requests/packages/chardet/sbcsgroupprober.py b/pype/vendor/requests/packages/chardet/sbcsgroupprober.py deleted file mode 100644 index 98e95dc1a3..0000000000 --- a/pype/vendor/requests/packages/chardet/sbcsgroupprober.py +++ /dev/null @@ -1,73 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .sbcharsetprober import SingleByteCharSetProber -from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, - Latin5CyrillicModel, MacCyrillicModel, - Ibm866Model, Ibm855Model) -from .langgreekmodel import Latin7GreekModel, Win1253GreekModel -from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel -# from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel -from .langthaimodel import TIS620ThaiModel -from .langhebrewmodel import Win1255HebrewModel -from .hebrewprober import HebrewProber -from .langturkishmodel import Latin5TurkishModel - - -class SBCSGroupProber(CharSetGroupProber): - def __init__(self): - super(SBCSGroupProber, self).__init__() - self.probers = [ - SingleByteCharSetProber(Win1251CyrillicModel), - SingleByteCharSetProber(Koi8rModel), - SingleByteCharSetProber(Latin5CyrillicModel), - SingleByteCharSetProber(MacCyrillicModel), - SingleByteCharSetProber(Ibm866Model), - SingleByteCharSetProber(Ibm855Model), - SingleByteCharSetProber(Latin7GreekModel), - SingleByteCharSetProber(Win1253GreekModel), - SingleByteCharSetProber(Latin5BulgarianModel), - SingleByteCharSetProber(Win1251BulgarianModel), - # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) - # after we retrain model. - # SingleByteCharSetProber(Latin2HungarianModel), - # SingleByteCharSetProber(Win1250HungarianModel), - SingleByteCharSetProber(TIS620ThaiModel), - SingleByteCharSetProber(Latin5TurkishModel), - ] - hebrew_prober = HebrewProber() - logical_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, - False, hebrew_prober) - visual_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, True, - hebrew_prober) - hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) - self.probers.extend([hebrew_prober, logical_hebrew_prober, - visual_hebrew_prober]) - - self.reset() diff --git a/pype/vendor/requests/packages/chardet/sjisprober.py b/pype/vendor/requests/packages/chardet/sjisprober.py deleted file mode 100644 index 9e29623bdc..0000000000 --- a/pype/vendor/requests/packages/chardet/sjisprober.py +++ /dev/null @@ -1,92 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import SJISDistributionAnalysis -from .jpcntx import SJISContextAnalysis -from .mbcssm import SJIS_SM_MODEL -from .enums import ProbingState, MachineState - - -class SJISProber(MultiByteCharSetProber): - def __init__(self): - super(SJISProber, self).__init__() - self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) - self.distribution_analyzer = SJISDistributionAnalysis() - self.context_analyzer = SJISContextAnalysis() - self.reset() - - def reset(self): - super(SJISProber, self).reset() - self.context_analyzer.reset() - - @property - def charset_name(self): - return self.context_analyzer.charset_name - - @property - def language(self): - return "Japanese" - - def feed(self, byte_str): - for i in range(len(byte_str)): - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.context_analyzer.feed(self._last_char[2 - char_len:], - char_len) - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 - - char_len], char_len) - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.context_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - context_conf = self.context_analyzer.get_confidence() - distrib_conf = self.distribution_analyzer.get_confidence() - return max(context_conf, distrib_conf) diff --git a/pype/vendor/requests/packages/chardet/universaldetector.py b/pype/vendor/requests/packages/chardet/universaldetector.py deleted file mode 100644 index b3c057e848..0000000000 --- a/pype/vendor/requests/packages/chardet/universaldetector.py +++ /dev/null @@ -1,278 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### -""" -Module containing the UniversalDetector detector class, which is the primary -class a user of ``chardet`` should use. - -:author: Mark Pilgrim (initial port to Python) -:author: Shy Shalom (original C code) -:author: Dan Blanchard (major refactoring for 3.0) -:author: Ian Cordasco -""" - - -import codecs -import logging -import re - -from .enums import InputState, LanguageFilter, ProbingState -from .escprober import EscCharSetProber -from .latin1prober import Latin1Prober -from .mbcsgroupprober import MBCSGroupProber -from .sbcsgroupprober import SBCSGroupProber - - -class UniversalDetector(object): - """ - The ``UniversalDetector`` class underlies the ``chardet.detect`` function - and coordinates all of the different charset probers. - - To get a ``dict`` containing an encoding and its confidence, you can simply - run: - - .. code:: - - u = UniversalDetector() - u.feed(some_bytes) - u.close() - detected = u.result - - """ - - MINIMUM_THRESHOLD = 0.20 - HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') - ESC_DETECTOR = re.compile(b'(\033|~{)') - WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') - ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', - 'iso-8859-2': 'Windows-1250', - 'iso-8859-5': 'Windows-1251', - 'iso-8859-6': 'Windows-1256', - 'iso-8859-7': 'Windows-1253', - 'iso-8859-8': 'Windows-1255', - 'iso-8859-9': 'Windows-1254', - 'iso-8859-13': 'Windows-1257'} - - def __init__(self, lang_filter=LanguageFilter.ALL): - self._esc_charset_prober = None - self._charset_probers = [] - self.result = None - self.done = None - self._got_data = None - self._input_state = None - self._last_char = None - self.lang_filter = lang_filter - self.logger = logging.getLogger(__name__) - self._has_win_bytes = None - self.reset() - - def reset(self): - """ - Reset the UniversalDetector and all of its probers back to their - initial states. This is called by ``__init__``, so you only need to - call this directly in between analyses of different documents. - """ - self.result = {'encoding': None, 'confidence': 0.0, 'language': None} - self.done = False - self._got_data = False - self._has_win_bytes = False - self._input_state = InputState.PURE_ASCII - self._last_char = b'' - if self._esc_charset_prober: - self._esc_charset_prober.reset() - for prober in self._charset_probers: - prober.reset() - - def feed(self, byte_str): - """ - Takes a chunk of a document and feeds it through all of the relevant - charset probers. - - After calling ``feed``, you can check the value of the ``done`` - attribute to see if you need to continue feeding the - ``UniversalDetector`` more data, or if it has made a prediction - (in the ``result`` attribute). - - .. note:: - You should always call ``close`` when you're done feeding in your - document if ``done`` is not already ``True``. - """ - if self.done: - return - - if not len(byte_str): - return - - if not isinstance(byte_str, bytearray): - byte_str = bytearray(byte_str) - - # First check for known BOMs, since these are guaranteed to be correct - if not self._got_data: - # If the data starts with BOM, we know it is UTF - if byte_str.startswith(codecs.BOM_UTF8): - # EF BB BF UTF-8 with BOM - self.result = {'encoding': "UTF-8-SIG", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith((codecs.BOM_UTF32_LE, - codecs.BOM_UTF32_BE)): - # FF FE 00 00 UTF-32, little-endian BOM - # 00 00 FE FF UTF-32, big-endian BOM - self.result = {'encoding': "UTF-32", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith(b'\xFE\xFF\x00\x00'): - # FE FF 00 00 UCS-4, unusual octet order BOM (3412) - self.result = {'encoding': "X-ISO-10646-UCS-4-3412", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith(b'\x00\x00\xFF\xFE'): - # 00 00 FF FE UCS-4, unusual octet order BOM (2143) - self.result = {'encoding': "X-ISO-10646-UCS-4-2143", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): - # FF FE UTF-16, little endian BOM - # FE FF UTF-16, big endian BOM - self.result = {'encoding': "UTF-16", - 'confidence': 1.0, - 'language': ''} - - self._got_data = True - if self.result['encoding'] is not None: - self.done = True - return - - # If none of those matched and we've only see ASCII so far, check - # for high bytes and escape sequences - if self._input_state == InputState.PURE_ASCII: - if self.HIGH_BYTE_DETECTOR.search(byte_str): - self._input_state = InputState.HIGH_BYTE - elif self._input_state == InputState.PURE_ASCII and \ - self.ESC_DETECTOR.search(self._last_char + byte_str): - self._input_state = InputState.ESC_ASCII - - self._last_char = byte_str[-1:] - - # If we've seen escape sequences, use the EscCharSetProber, which - # uses a simple state machine to check for known escape sequences in - # HZ and ISO-2022 encodings, since those are the only encodings that - # use such sequences. - if self._input_state == InputState.ESC_ASCII: - if not self._esc_charset_prober: - self._esc_charset_prober = EscCharSetProber(self.lang_filter) - if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: - self.result = {'encoding': - self._esc_charset_prober.charset_name, - 'confidence': - self._esc_charset_prober.get_confidence(), - 'language': - self._esc_charset_prober.language} - self.done = True - # If we've seen high bytes (i.e., those with values greater than 127), - # we need to do more complicated checks using all our multi-byte and - # single-byte probers that are left. The single-byte probers - # use character bigram distributions to determine the encoding, whereas - # the multi-byte probers use a combination of character unigram and - # bigram distributions. - elif self._input_state == InputState.HIGH_BYTE: - if not self._charset_probers: - self._charset_probers = [MBCSGroupProber(self.lang_filter)] - # If we're checking non-CJK encodings, use single-byte prober - if self.lang_filter & LanguageFilter.NON_CJK: - self._charset_probers.append(SBCSGroupProber()) - self._charset_probers.append(Latin1Prober()) - for prober in self._charset_probers: - if prober.feed(byte_str) == ProbingState.FOUND_IT: - self.result = {'encoding': prober.charset_name, - 'confidence': prober.get_confidence(), - 'language': prober.language} - self.done = True - break - if self.WIN_BYTE_DETECTOR.search(byte_str): - self._has_win_bytes = True - - def close(self): - """ - Stop analyzing the current document and come up with a final - prediction. - - :returns: The ``result`` attribute, a ``dict`` with the keys - `encoding`, `confidence`, and `language`. - """ - # Don't bother with checks if we're already done - if self.done: - return self.result - self.done = True - - if not self._got_data: - self.logger.debug('no data received!') - - # Default to ASCII if it is all we've seen so far - elif self._input_state == InputState.PURE_ASCII: - self.result = {'encoding': 'ascii', - 'confidence': 1.0, - 'language': ''} - - # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD - elif self._input_state == InputState.HIGH_BYTE: - prober_confidence = None - max_prober_confidence = 0.0 - max_prober = None - for prober in self._charset_probers: - if not prober: - continue - prober_confidence = prober.get_confidence() - if prober_confidence > max_prober_confidence: - max_prober_confidence = prober_confidence - max_prober = prober - if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): - charset_name = max_prober.charset_name - lower_charset_name = max_prober.charset_name.lower() - confidence = max_prober.get_confidence() - # Use Windows encoding name instead of ISO-8859 if we saw any - # extra Windows-specific bytes - if lower_charset_name.startswith('iso-8859'): - if self._has_win_bytes: - charset_name = self.ISO_WIN_MAP.get(lower_charset_name, - charset_name) - self.result = {'encoding': charset_name, - 'confidence': confidence, - 'language': max_prober.language} - - # Log all prober confidences if none met MINIMUM_THRESHOLD - if self.logger.getEffectiveLevel() == logging.DEBUG: - if self.result['encoding'] is None: - self.logger.debug('no probers hit minimum threshold') - for prober in self._charset_probers[0].probers: - if not prober: - continue - self.logger.debug('%s %s confidence = %s', - prober.charset_name, - prober.language, - prober.get_confidence()) - return self.result diff --git a/pype/vendor/requests/packages/chardet/utf8prober.py b/pype/vendor/requests/packages/chardet/utf8prober.py deleted file mode 100644 index 6c3196cc2d..0000000000 --- a/pype/vendor/requests/packages/chardet/utf8prober.py +++ /dev/null @@ -1,82 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState, MachineState -from .codingstatemachine import CodingStateMachine -from .mbcssm import UTF8_SM_MODEL - - - -class UTF8Prober(CharSetProber): - ONE_CHAR_PROB = 0.5 - - def __init__(self): - super(UTF8Prober, self).__init__() - self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) - self._num_mb_chars = None - self.reset() - - def reset(self): - super(UTF8Prober, self).reset() - self.coding_sm.reset() - self._num_mb_chars = 0 - - @property - def charset_name(self): - return "utf-8" - - @property - def language(self): - return "" - - def feed(self, byte_str): - for c in byte_str: - coding_state = self.coding_sm.next_state(c) - if coding_state == MachineState.ERROR: - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - if self.coding_sm.get_current_charlen() >= 2: - self._num_mb_chars += 1 - - if self.state == ProbingState.DETECTING: - if self.get_confidence() > self.SHORTCUT_THRESHOLD: - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - unlike = 0.99 - if self._num_mb_chars < 6: - unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars - return 1.0 - unlike - else: - return unlike diff --git a/pype/vendor/requests/packages/chardet/version.py b/pype/vendor/requests/packages/chardet/version.py deleted file mode 100644 index f29337ca4a..0000000000 --- a/pype/vendor/requests/packages/chardet/version.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -This module exists only to simplify retrieving the version number of chardet -from within setup.py and from chardet subpackages. - -:author: Dan Blanchard (dan.blanchard@gmail.com) -""" - -__version__ = "3.0.2" -VERSION = __version__.split('.') diff --git a/pype/vendor/requests/packages/idna/__init__.py b/pype/vendor/requests/packages/idna/__init__.py deleted file mode 100644 index bb67a43fa4..0000000000 --- a/pype/vendor/requests/packages/idna/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .core import * diff --git a/pype/vendor/requests/packages/idna/codec.py b/pype/vendor/requests/packages/idna/codec.py deleted file mode 100644 index 98c65ead14..0000000000 --- a/pype/vendor/requests/packages/idna/codec.py +++ /dev/null @@ -1,118 +0,0 @@ -from .core import encode, decode, alabel, ulabel, IDNAError -import codecs -import re - -_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') - -class Codec(codecs.Codec): - - def encode(self, data, errors='strict'): - - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return "", 0 - - return encode(data), len(data) - - def decode(self, data, errors='strict'): - - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return u"", 0 - - return decode(data), len(data) - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, data, errors, final): - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return ("", 0) - - labels = _unicode_dots_re.split(data) - trailing_dot = u'' - if labels: - if not labels[-1]: - trailing_dot = '.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = '.' - - result = [] - size = 0 - for label in labels: - result.append(alabel(label)) - if size: - size += 1 - size += len(label) - - # Join with U+002E - result = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, data, errors, final): - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return (u"", 0) - - # IDNA allows decoding to operate on Unicode strings, too. - if isinstance(data, unicode): - labels = _unicode_dots_re.split(data) - else: - # Must be ASCII string - data = str(data) - unicode(data, "ascii") - labels = data.split(".") - - trailing_dot = u'' - if labels: - if not labels[-1]: - trailing_dot = u'.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = u'.' - - result = [] - size = 0 - for label in labels: - result.append(ulabel(label)) - if size: - size += 1 - size += len(label) - - result = u".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - -class StreamReader(Codec, codecs.StreamReader): - pass - -def getregentry(): - return codecs.CodecInfo( - name='idna', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/pype/vendor/requests/packages/idna/compat.py b/pype/vendor/requests/packages/idna/compat.py deleted file mode 100644 index 4d47f336db..0000000000 --- a/pype/vendor/requests/packages/idna/compat.py +++ /dev/null @@ -1,12 +0,0 @@ -from .core import * -from .codec import * - -def ToASCII(label): - return encode(label) - -def ToUnicode(label): - return decode(label) - -def nameprep(s): - raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") - diff --git a/pype/vendor/requests/packages/idna/core.py b/pype/vendor/requests/packages/idna/core.py deleted file mode 100644 index b55b664568..0000000000 --- a/pype/vendor/requests/packages/idna/core.py +++ /dev/null @@ -1,387 +0,0 @@ -from . import idnadata -import bisect -import unicodedata -import re -import sys -from .intranges import intranges_contain - -_virama_combining_class = 9 -_alabel_prefix = b'xn--' -_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') - -if sys.version_info[0] == 3: - unicode = str - unichr = chr - -class IDNAError(UnicodeError): - """ Base exception for all IDNA-encoding related problems """ - pass - - -class IDNABidiError(IDNAError): - """ Exception when bidirectional requirements are not satisfied """ - pass - - -class InvalidCodepoint(IDNAError): - """ Exception when a disallowed or unallocated codepoint is used """ - pass - - -class InvalidCodepointContext(IDNAError): - """ Exception when the codepoint is not valid in the context it is used """ - pass - - -def _combining_class(cp): - return unicodedata.combining(unichr(cp)) - -def _is_script(cp, script): - return intranges_contain(ord(cp), idnadata.scripts[script]) - -def _punycode(s): - return s.encode('punycode') - -def _unot(s): - return 'U+{0:04X}'.format(s) - - -def valid_label_length(label): - - if len(label) > 63: - return False - return True - - -def valid_string_length(label, trailing_dot): - - if len(label) > (254 if trailing_dot else 253): - return False - return True - - -def check_bidi(label, check_ltr=False): - - # Bidi rules should only be applied if string contains RTL characters - bidi_label = False - for (idx, cp) in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - if direction == '': - # String likely comes from a newer version of Unicode - raise IDNABidiError('Unknown directionality in label {0} at position {1}'.format(repr(label), idx)) - if direction in ['R', 'AL', 'AN']: - bidi_label = True - break - if not bidi_label and not check_ltr: - return True - - # Bidi rule 1 - direction = unicodedata.bidirectional(label[0]) - if direction in ['R', 'AL']: - rtl = True - elif direction == 'L': - rtl = False - else: - raise IDNABidiError('First codepoint in label {0} must be directionality L, R or AL'.format(repr(label))) - - valid_ending = False - number_type = False - for (idx, cp) in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - - if rtl: - # Bidi rule 2 - if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: - raise IDNABidiError('Invalid direction for codepoint at position {0} in a right-to-left label'.format(idx)) - # Bidi rule 3 - if direction in ['R', 'AL', 'EN', 'AN']: - valid_ending = True - elif direction != 'NSM': - valid_ending = False - # Bidi rule 4 - if direction in ['AN', 'EN']: - if not number_type: - number_type = direction - else: - if number_type != direction: - raise IDNABidiError('Can not mix numeral types in a right-to-left label') - else: - # Bidi rule 5 - if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: - raise IDNABidiError('Invalid direction for codepoint at position {0} in a left-to-right label'.format(idx)) - # Bidi rule 6 - if direction in ['L', 'EN']: - valid_ending = True - elif direction != 'NSM': - valid_ending = False - - if not valid_ending: - raise IDNABidiError('Label ends with illegal codepoint directionality') - - return True - - -def check_initial_combiner(label): - - if unicodedata.category(label[0])[0] == 'M': - raise IDNAError('Label begins with an illegal combining character') - return True - - -def check_hyphen_ok(label): - - if label[2:4] == '--': - raise IDNAError('Label has disallowed hyphens in 3rd and 4th position') - if label[0] == '-' or label[-1] == '-': - raise IDNAError('Label must not start or end with a hyphen') - return True - - -def check_nfc(label): - - if unicodedata.normalize('NFC', label) != label: - raise IDNAError('Label must be in Normalization Form C') - - -def valid_contextj(label, pos): - - cp_value = ord(label[pos]) - - if cp_value == 0x200c: - - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - - ok = False - for i in range(pos-1, -1, -1): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord('T'): - continue - if joining_type in [ord('L'), ord('D')]: - ok = True - break - - if not ok: - return False - - ok = False - for i in range(pos+1, len(label)): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord('T'): - continue - if joining_type in [ord('R'), ord('D')]: - ok = True - break - return ok - - if cp_value == 0x200d: - - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - return False - - else: - - return False - - -def valid_contexto(label, pos, exception=False): - - cp_value = ord(label[pos]) - - if cp_value == 0x00b7: - if 0 < pos < len(label)-1: - if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c: - return True - return False - - elif cp_value == 0x0375: - if pos < len(label)-1 and len(label) > 1: - return _is_script(label[pos + 1], 'Greek') - return False - - elif cp_value == 0x05f3 or cp_value == 0x05f4: - if pos > 0: - return _is_script(label[pos - 1], 'Hebrew') - return False - - elif cp_value == 0x30fb: - for cp in label: - if cp == u'\u30fb': - continue - if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'): - return True - return False - - elif 0x660 <= cp_value <= 0x669: - for cp in label: - if 0x6f0 <= ord(cp) <= 0x06f9: - return False - return True - - elif 0x6f0 <= cp_value <= 0x6f9: - for cp in label: - if 0x660 <= ord(cp) <= 0x0669: - return False - return True - - -def check_label(label): - - if isinstance(label, (bytes, bytearray)): - label = label.decode('utf-8') - if len(label) == 0: - raise IDNAError('Empty Label') - - check_nfc(label) - check_hyphen_ok(label) - check_initial_combiner(label) - - for (pos, cp) in enumerate(label): - cp_value = ord(cp) - if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']): - continue - elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']): - if not valid_contextj(label, pos): - raise InvalidCodepointContext('Joiner {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label))) - elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']): - if not valid_contexto(label, pos): - raise InvalidCodepointContext('Codepoint {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label))) - else: - raise InvalidCodepoint('Codepoint {0} at position {1} of {2} not allowed'.format(_unot(cp_value), pos+1, repr(label))) - - check_bidi(label) - - -def alabel(label): - - try: - label = label.encode('ascii') - try: - ulabel(label) - except IDNAError: - raise IDNAError('The label {0} is not a valid A-label'.format(label)) - if not valid_label_length(label): - raise IDNAError('Label too long') - return label - except UnicodeEncodeError: - pass - - if not label: - raise IDNAError('No Input') - - label = unicode(label) - check_label(label) - label = _punycode(label) - label = _alabel_prefix + label - - if not valid_label_length(label): - raise IDNAError('Label too long') - - return label - - -def ulabel(label): - - if not isinstance(label, (bytes, bytearray)): - try: - label = label.encode('ascii') - except UnicodeEncodeError: - check_label(label) - return label - - label = label.lower() - if label.startswith(_alabel_prefix): - label = label[len(_alabel_prefix):] - else: - check_label(label) - return label.decode('ascii') - - label = label.decode('punycode') - check_label(label) - return label - - -def uts46_remap(domain, std3_rules=True, transitional=False): - """Re-map the characters in the string according to UTS46 processing.""" - from .uts46data import uts46data - output = u"" - try: - for pos, char in enumerate(domain): - code_point = ord(char) - uts46row = uts46data[code_point if code_point < 256 else - bisect.bisect_left(uts46data, (code_point, "Z")) - 1] - status = uts46row[1] - replacement = uts46row[2] if len(uts46row) == 3 else None - if (status == "V" or - (status == "D" and not transitional) or - (status == "3" and std3_rules and replacement is None)): - output += char - elif replacement is not None and (status == "M" or - (status == "3" and std3_rules) or - (status == "D" and transitional)): - output += replacement - elif status != "I": - raise IndexError() - return unicodedata.normalize("NFC", output) - except IndexError: - raise InvalidCodepoint( - "Codepoint {0} not allowed at position {1} in {2}".format( - _unot(code_point), pos + 1, repr(domain))) - - -def encode(s, strict=False, uts46=False, std3_rules=False, transitional=False): - - if isinstance(s, (bytes, bytearray)): - s = s.decode("ascii") - if uts46: - s = uts46_remap(s, std3_rules, transitional) - trailing_dot = False - result = [] - if strict: - labels = s.split('.') - else: - labels = _unicode_dots_re.split(s) - while labels and not labels[0]: - del labels[0] - if not labels: - raise IDNAError('Empty domain') - if labels[-1] == '': - del labels[-1] - trailing_dot = True - for label in labels: - result.append(alabel(label)) - if trailing_dot: - result.append(b'') - s = b'.'.join(result) - if not valid_string_length(s, trailing_dot): - raise IDNAError('Domain too long') - return s - - -def decode(s, strict=False, uts46=False, std3_rules=False): - - if isinstance(s, (bytes, bytearray)): - s = s.decode("ascii") - if uts46: - s = uts46_remap(s, std3_rules, False) - trailing_dot = False - result = [] - if not strict: - labels = _unicode_dots_re.split(s) - else: - labels = s.split(u'.') - while labels and not labels[0]: - del labels[0] - if not labels: - raise IDNAError('Empty domain') - if not labels[-1]: - del labels[-1] - trailing_dot = True - for label in labels: - result.append(ulabel(label)) - if trailing_dot: - result.append(u'') - return u'.'.join(result) diff --git a/pype/vendor/requests/packages/idna/idnadata.py b/pype/vendor/requests/packages/idna/idnadata.py deleted file mode 100644 index 2ff30fee29..0000000000 --- a/pype/vendor/requests/packages/idna/idnadata.py +++ /dev/null @@ -1,1584 +0,0 @@ -# This file is automatically generated by build-idnadata.py - -scripts = { - 'Greek': ( - 0x37000000374, - 0x37500000378, - 0x37a0000037e, - 0x38400000385, - 0x38600000387, - 0x3880000038b, - 0x38c0000038d, - 0x38e000003a2, - 0x3a3000003e2, - 0x3f000000400, - 0x1d2600001d2b, - 0x1d5d00001d62, - 0x1d6600001d6b, - 0x1dbf00001dc0, - 0x1f0000001f16, - 0x1f1800001f1e, - 0x1f2000001f46, - 0x1f4800001f4e, - 0x1f5000001f58, - 0x1f5900001f5a, - 0x1f5b00001f5c, - 0x1f5d00001f5e, - 0x1f5f00001f7e, - 0x1f8000001fb5, - 0x1fb600001fc5, - 0x1fc600001fd4, - 0x1fd600001fdc, - 0x1fdd00001ff0, - 0x1ff200001ff5, - 0x1ff600001fff, - 0x212600002127, - 0x101400001018b, - 0x1d2000001d246, - ), - 'Han': ( - 0x2e8000002e9a, - 0x2e9b00002ef4, - 0x2f0000002fd6, - 0x300500003006, - 0x300700003008, - 0x30210000302a, - 0x30380000303c, - 0x340000004db6, - 0x4e0000009fcd, - 0xf9000000fa6e, - 0xfa700000fada, - 0x200000002a6d7, - 0x2a7000002b735, - 0x2b7400002b81e, - 0x2f8000002fa1e, - ), - 'Hebrew': ( - 0x591000005c8, - 0x5d0000005eb, - 0x5f0000005f5, - 0xfb1d0000fb37, - 0xfb380000fb3d, - 0xfb3e0000fb3f, - 0xfb400000fb42, - 0xfb430000fb45, - 0xfb460000fb50, - ), - 'Hiragana': ( - 0x304100003097, - 0x309d000030a0, - 0x1b0010001b002, - 0x1f2000001f201, - ), - 'Katakana': ( - 0x30a1000030fb, - 0x30fd00003100, - 0x31f000003200, - 0x32d0000032ff, - 0x330000003358, - 0xff660000ff70, - 0xff710000ff9e, - 0x1b0000001b001, - ), -} -joining_types = { - 0x600: 85, - 0x601: 85, - 0x602: 85, - 0x603: 85, - 0x604: 85, - 0x608: 85, - 0x60b: 85, - 0x620: 68, - 0x621: 85, - 0x622: 82, - 0x623: 82, - 0x624: 82, - 0x625: 82, - 0x626: 68, - 0x627: 82, - 0x628: 68, - 0x629: 82, - 0x62a: 68, - 0x62b: 68, - 0x62c: 68, - 0x62d: 68, - 0x62e: 68, - 0x62f: 82, - 0x630: 82, - 0x631: 82, - 0x632: 82, - 0x633: 68, - 0x634: 68, - 0x635: 68, - 0x636: 68, - 0x637: 68, - 0x638: 68, - 0x639: 68, - 0x63a: 68, - 0x63b: 68, - 0x63c: 68, - 0x63d: 68, - 0x63e: 68, - 0x63f: 68, - 0x640: 67, - 0x641: 68, - 0x642: 68, - 0x643: 68, - 0x644: 68, - 0x645: 68, - 0x646: 68, - 0x647: 68, - 0x648: 82, - 0x649: 68, - 0x64a: 68, - 0x66e: 68, - 0x66f: 68, - 0x671: 82, - 0x672: 82, - 0x673: 82, - 0x674: 85, - 0x675: 82, - 0x676: 82, - 0x677: 82, - 0x678: 68, - 0x679: 68, - 0x67a: 68, - 0x67b: 68, - 0x67c: 68, - 0x67d: 68, - 0x67e: 68, - 0x67f: 68, - 0x680: 68, - 0x681: 68, - 0x682: 68, - 0x683: 68, - 0x684: 68, - 0x685: 68, - 0x686: 68, - 0x687: 68, - 0x688: 82, - 0x689: 82, - 0x68a: 82, - 0x68b: 82, - 0x68c: 82, - 0x68d: 82, - 0x68e: 82, - 0x68f: 82, - 0x690: 82, - 0x691: 82, - 0x692: 82, - 0x693: 82, - 0x694: 82, - 0x695: 82, - 0x696: 82, - 0x697: 82, - 0x698: 82, - 0x699: 82, - 0x69a: 68, - 0x69b: 68, - 0x69c: 68, - 0x69d: 68, - 0x69e: 68, - 0x69f: 68, - 0x6a0: 68, - 0x6a1: 68, - 0x6a2: 68, - 0x6a3: 68, - 0x6a4: 68, - 0x6a5: 68, - 0x6a6: 68, - 0x6a7: 68, - 0x6a8: 68, - 0x6a9: 68, - 0x6aa: 68, - 0x6ab: 68, - 0x6ac: 68, - 0x6ad: 68, - 0x6ae: 68, - 0x6af: 68, - 0x6b0: 68, - 0x6b1: 68, - 0x6b2: 68, - 0x6b3: 68, - 0x6b4: 68, - 0x6b5: 68, - 0x6b6: 68, - 0x6b7: 68, - 0x6b8: 68, - 0x6b9: 68, - 0x6ba: 68, - 0x6bb: 68, - 0x6bc: 68, - 0x6bd: 68, - 0x6be: 68, - 0x6bf: 68, - 0x6c0: 82, - 0x6c1: 68, - 0x6c2: 68, - 0x6c3: 82, - 0x6c4: 82, - 0x6c5: 82, - 0x6c6: 82, - 0x6c7: 82, - 0x6c8: 82, - 0x6c9: 82, - 0x6ca: 82, - 0x6cb: 82, - 0x6cc: 68, - 0x6cd: 82, - 0x6ce: 68, - 0x6cf: 82, - 0x6d0: 68, - 0x6d1: 68, - 0x6d2: 82, - 0x6d3: 82, - 0x6d5: 82, - 0x6dd: 85, - 0x6ee: 82, - 0x6ef: 82, - 0x6fa: 68, - 0x6fb: 68, - 0x6fc: 68, - 0x6ff: 68, - 0x710: 82, - 0x712: 68, - 0x713: 68, - 0x714: 68, - 0x715: 82, - 0x716: 82, - 0x717: 82, - 0x718: 82, - 0x719: 82, - 0x71a: 68, - 0x71b: 68, - 0x71c: 68, - 0x71d: 68, - 0x71e: 82, - 0x71f: 68, - 0x720: 68, - 0x721: 68, - 0x722: 68, - 0x723: 68, - 0x724: 68, - 0x725: 68, - 0x726: 68, - 0x727: 68, - 0x728: 82, - 0x729: 68, - 0x72a: 82, - 0x72b: 68, - 0x72c: 82, - 0x72d: 68, - 0x72e: 68, - 0x72f: 82, - 0x74d: 82, - 0x74e: 68, - 0x74f: 68, - 0x750: 68, - 0x751: 68, - 0x752: 68, - 0x753: 68, - 0x754: 68, - 0x755: 68, - 0x756: 68, - 0x757: 68, - 0x758: 68, - 0x759: 82, - 0x75a: 82, - 0x75b: 82, - 0x75c: 68, - 0x75d: 68, - 0x75e: 68, - 0x75f: 68, - 0x760: 68, - 0x761: 68, - 0x762: 68, - 0x763: 68, - 0x764: 68, - 0x765: 68, - 0x766: 68, - 0x767: 68, - 0x768: 68, - 0x769: 68, - 0x76a: 68, - 0x76b: 82, - 0x76c: 82, - 0x76d: 68, - 0x76e: 68, - 0x76f: 68, - 0x770: 68, - 0x771: 82, - 0x772: 68, - 0x773: 82, - 0x774: 82, - 0x775: 68, - 0x776: 68, - 0x777: 68, - 0x778: 82, - 0x779: 82, - 0x77a: 68, - 0x77b: 68, - 0x77c: 68, - 0x77d: 68, - 0x77e: 68, - 0x77f: 68, - 0x7ca: 68, - 0x7cb: 68, - 0x7cc: 68, - 0x7cd: 68, - 0x7ce: 68, - 0x7cf: 68, - 0x7d0: 68, - 0x7d1: 68, - 0x7d2: 68, - 0x7d3: 68, - 0x7d4: 68, - 0x7d5: 68, - 0x7d6: 68, - 0x7d7: 68, - 0x7d8: 68, - 0x7d9: 68, - 0x7da: 68, - 0x7db: 68, - 0x7dc: 68, - 0x7dd: 68, - 0x7de: 68, - 0x7df: 68, - 0x7e0: 68, - 0x7e1: 68, - 0x7e2: 68, - 0x7e3: 68, - 0x7e4: 68, - 0x7e5: 68, - 0x7e6: 68, - 0x7e7: 68, - 0x7e8: 68, - 0x7e9: 68, - 0x7ea: 68, - 0x7fa: 67, - 0x840: 82, - 0x841: 68, - 0x842: 68, - 0x843: 68, - 0x844: 68, - 0x845: 68, - 0x846: 82, - 0x847: 68, - 0x848: 68, - 0x849: 82, - 0x84a: 68, - 0x84b: 68, - 0x84c: 68, - 0x84d: 68, - 0x84e: 68, - 0x84f: 82, - 0x850: 68, - 0x851: 68, - 0x852: 68, - 0x853: 68, - 0x854: 82, - 0x855: 68, - 0x856: 85, - 0x857: 85, - 0x858: 85, - 0x8a0: 68, - 0x8a2: 68, - 0x8a3: 68, - 0x8a4: 68, - 0x8a5: 68, - 0x8a6: 68, - 0x8a7: 68, - 0x8a8: 68, - 0x8a9: 68, - 0x8aa: 82, - 0x8ab: 82, - 0x8ac: 82, - 0x1806: 85, - 0x1807: 68, - 0x180a: 67, - 0x180e: 85, - 0x1820: 68, - 0x1821: 68, - 0x1822: 68, - 0x1823: 68, - 0x1824: 68, - 0x1825: 68, - 0x1826: 68, - 0x1827: 68, - 0x1828: 68, - 0x1829: 68, - 0x182a: 68, - 0x182b: 68, - 0x182c: 68, - 0x182d: 68, - 0x182e: 68, - 0x182f: 68, - 0x1830: 68, - 0x1831: 68, - 0x1832: 68, - 0x1833: 68, - 0x1834: 68, - 0x1835: 68, - 0x1836: 68, - 0x1837: 68, - 0x1838: 68, - 0x1839: 68, - 0x183a: 68, - 0x183b: 68, - 0x183c: 68, - 0x183d: 68, - 0x183e: 68, - 0x183f: 68, - 0x1840: 68, - 0x1841: 68, - 0x1842: 68, - 0x1843: 68, - 0x1844: 68, - 0x1845: 68, - 0x1846: 68, - 0x1847: 68, - 0x1848: 68, - 0x1849: 68, - 0x184a: 68, - 0x184b: 68, - 0x184c: 68, - 0x184d: 68, - 0x184e: 68, - 0x184f: 68, - 0x1850: 68, - 0x1851: 68, - 0x1852: 68, - 0x1853: 68, - 0x1854: 68, - 0x1855: 68, - 0x1856: 68, - 0x1857: 68, - 0x1858: 68, - 0x1859: 68, - 0x185a: 68, - 0x185b: 68, - 0x185c: 68, - 0x185d: 68, - 0x185e: 68, - 0x185f: 68, - 0x1860: 68, - 0x1861: 68, - 0x1862: 68, - 0x1863: 68, - 0x1864: 68, - 0x1865: 68, - 0x1866: 68, - 0x1867: 68, - 0x1868: 68, - 0x1869: 68, - 0x186a: 68, - 0x186b: 68, - 0x186c: 68, - 0x186d: 68, - 0x186e: 68, - 0x186f: 68, - 0x1870: 68, - 0x1871: 68, - 0x1872: 68, - 0x1873: 68, - 0x1874: 68, - 0x1875: 68, - 0x1876: 68, - 0x1877: 68, - 0x1880: 85, - 0x1881: 85, - 0x1882: 85, - 0x1883: 85, - 0x1884: 85, - 0x1885: 85, - 0x1886: 85, - 0x1887: 68, - 0x1888: 68, - 0x1889: 68, - 0x188a: 68, - 0x188b: 68, - 0x188c: 68, - 0x188d: 68, - 0x188e: 68, - 0x188f: 68, - 0x1890: 68, - 0x1891: 68, - 0x1892: 68, - 0x1893: 68, - 0x1894: 68, - 0x1895: 68, - 0x1896: 68, - 0x1897: 68, - 0x1898: 68, - 0x1899: 68, - 0x189a: 68, - 0x189b: 68, - 0x189c: 68, - 0x189d: 68, - 0x189e: 68, - 0x189f: 68, - 0x18a0: 68, - 0x18a1: 68, - 0x18a2: 68, - 0x18a3: 68, - 0x18a4: 68, - 0x18a5: 68, - 0x18a6: 68, - 0x18a7: 68, - 0x18a8: 68, - 0x18aa: 68, - 0x200c: 85, - 0x200d: 67, - 0x2066: 85, - 0x2067: 85, - 0x2068: 85, - 0x2069: 85, - 0xa840: 68, - 0xa841: 68, - 0xa842: 68, - 0xa843: 68, - 0xa844: 68, - 0xa845: 68, - 0xa846: 68, - 0xa847: 68, - 0xa848: 68, - 0xa849: 68, - 0xa84a: 68, - 0xa84b: 68, - 0xa84c: 68, - 0xa84d: 68, - 0xa84e: 68, - 0xa84f: 68, - 0xa850: 68, - 0xa851: 68, - 0xa852: 68, - 0xa853: 68, - 0xa854: 68, - 0xa855: 68, - 0xa856: 68, - 0xa857: 68, - 0xa858: 68, - 0xa859: 68, - 0xa85a: 68, - 0xa85b: 68, - 0xa85c: 68, - 0xa85d: 68, - 0xa85e: 68, - 0xa85f: 68, - 0xa860: 68, - 0xa861: 68, - 0xa862: 68, - 0xa863: 68, - 0xa864: 68, - 0xa865: 68, - 0xa866: 68, - 0xa867: 68, - 0xa868: 68, - 0xa869: 68, - 0xa86a: 68, - 0xa86b: 68, - 0xa86c: 68, - 0xa86d: 68, - 0xa86e: 68, - 0xa86f: 68, - 0xa870: 68, - 0xa871: 68, - 0xa872: 76, - 0xa873: 85, -} -codepoint_classes = { - 'PVALID': ( - 0x2d0000002e, - 0x300000003a, - 0x610000007b, - 0xdf000000f7, - 0xf800000100, - 0x10100000102, - 0x10300000104, - 0x10500000106, - 0x10700000108, - 0x1090000010a, - 0x10b0000010c, - 0x10d0000010e, - 0x10f00000110, - 0x11100000112, - 0x11300000114, - 0x11500000116, - 0x11700000118, - 0x1190000011a, - 0x11b0000011c, - 0x11d0000011e, - 0x11f00000120, - 0x12100000122, - 0x12300000124, - 0x12500000126, - 0x12700000128, - 0x1290000012a, - 0x12b0000012c, - 0x12d0000012e, - 0x12f00000130, - 0x13100000132, - 0x13500000136, - 0x13700000139, - 0x13a0000013b, - 0x13c0000013d, - 0x13e0000013f, - 0x14200000143, - 0x14400000145, - 0x14600000147, - 0x14800000149, - 0x14b0000014c, - 0x14d0000014e, - 0x14f00000150, - 0x15100000152, - 0x15300000154, - 0x15500000156, - 0x15700000158, - 0x1590000015a, - 0x15b0000015c, - 0x15d0000015e, - 0x15f00000160, - 0x16100000162, - 0x16300000164, - 0x16500000166, - 0x16700000168, - 0x1690000016a, - 0x16b0000016c, - 0x16d0000016e, - 0x16f00000170, - 0x17100000172, - 0x17300000174, - 0x17500000176, - 0x17700000178, - 0x17a0000017b, - 0x17c0000017d, - 0x17e0000017f, - 0x18000000181, - 0x18300000184, - 0x18500000186, - 0x18800000189, - 0x18c0000018e, - 0x19200000193, - 0x19500000196, - 0x1990000019c, - 0x19e0000019f, - 0x1a1000001a2, - 0x1a3000001a4, - 0x1a5000001a6, - 0x1a8000001a9, - 0x1aa000001ac, - 0x1ad000001ae, - 0x1b0000001b1, - 0x1b4000001b5, - 0x1b6000001b7, - 0x1b9000001bc, - 0x1bd000001c4, - 0x1ce000001cf, - 0x1d0000001d1, - 0x1d2000001d3, - 0x1d4000001d5, - 0x1d6000001d7, - 0x1d8000001d9, - 0x1da000001db, - 0x1dc000001de, - 0x1df000001e0, - 0x1e1000001e2, - 0x1e3000001e4, - 0x1e5000001e6, - 0x1e7000001e8, - 0x1e9000001ea, - 0x1eb000001ec, - 0x1ed000001ee, - 0x1ef000001f1, - 0x1f5000001f6, - 0x1f9000001fa, - 0x1fb000001fc, - 0x1fd000001fe, - 0x1ff00000200, - 0x20100000202, - 0x20300000204, - 0x20500000206, - 0x20700000208, - 0x2090000020a, - 0x20b0000020c, - 0x20d0000020e, - 0x20f00000210, - 0x21100000212, - 0x21300000214, - 0x21500000216, - 0x21700000218, - 0x2190000021a, - 0x21b0000021c, - 0x21d0000021e, - 0x21f00000220, - 0x22100000222, - 0x22300000224, - 0x22500000226, - 0x22700000228, - 0x2290000022a, - 0x22b0000022c, - 0x22d0000022e, - 0x22f00000230, - 0x23100000232, - 0x2330000023a, - 0x23c0000023d, - 0x23f00000241, - 0x24200000243, - 0x24700000248, - 0x2490000024a, - 0x24b0000024c, - 0x24d0000024e, - 0x24f000002b0, - 0x2b9000002c2, - 0x2c6000002d2, - 0x2ec000002ed, - 0x2ee000002ef, - 0x30000000340, - 0x34200000343, - 0x3460000034f, - 0x35000000370, - 0x37100000372, - 0x37300000374, - 0x37700000378, - 0x37b0000037e, - 0x39000000391, - 0x3ac000003cf, - 0x3d7000003d8, - 0x3d9000003da, - 0x3db000003dc, - 0x3dd000003de, - 0x3df000003e0, - 0x3e1000003e2, - 0x3e3000003e4, - 0x3e5000003e6, - 0x3e7000003e8, - 0x3e9000003ea, - 0x3eb000003ec, - 0x3ed000003ee, - 0x3ef000003f0, - 0x3f3000003f4, - 0x3f8000003f9, - 0x3fb000003fd, - 0x43000000460, - 0x46100000462, - 0x46300000464, - 0x46500000466, - 0x46700000468, - 0x4690000046a, - 0x46b0000046c, - 0x46d0000046e, - 0x46f00000470, - 0x47100000472, - 0x47300000474, - 0x47500000476, - 0x47700000478, - 0x4790000047a, - 0x47b0000047c, - 0x47d0000047e, - 0x47f00000480, - 0x48100000482, - 0x48300000488, - 0x48b0000048c, - 0x48d0000048e, - 0x48f00000490, - 0x49100000492, - 0x49300000494, - 0x49500000496, - 0x49700000498, - 0x4990000049a, - 0x49b0000049c, - 0x49d0000049e, - 0x49f000004a0, - 0x4a1000004a2, - 0x4a3000004a4, - 0x4a5000004a6, - 0x4a7000004a8, - 0x4a9000004aa, - 0x4ab000004ac, - 0x4ad000004ae, - 0x4af000004b0, - 0x4b1000004b2, - 0x4b3000004b4, - 0x4b5000004b6, - 0x4b7000004b8, - 0x4b9000004ba, - 0x4bb000004bc, - 0x4bd000004be, - 0x4bf000004c0, - 0x4c2000004c3, - 0x4c4000004c5, - 0x4c6000004c7, - 0x4c8000004c9, - 0x4ca000004cb, - 0x4cc000004cd, - 0x4ce000004d0, - 0x4d1000004d2, - 0x4d3000004d4, - 0x4d5000004d6, - 0x4d7000004d8, - 0x4d9000004da, - 0x4db000004dc, - 0x4dd000004de, - 0x4df000004e0, - 0x4e1000004e2, - 0x4e3000004e4, - 0x4e5000004e6, - 0x4e7000004e8, - 0x4e9000004ea, - 0x4eb000004ec, - 0x4ed000004ee, - 0x4ef000004f0, - 0x4f1000004f2, - 0x4f3000004f4, - 0x4f5000004f6, - 0x4f7000004f8, - 0x4f9000004fa, - 0x4fb000004fc, - 0x4fd000004fe, - 0x4ff00000500, - 0x50100000502, - 0x50300000504, - 0x50500000506, - 0x50700000508, - 0x5090000050a, - 0x50b0000050c, - 0x50d0000050e, - 0x50f00000510, - 0x51100000512, - 0x51300000514, - 0x51500000516, - 0x51700000518, - 0x5190000051a, - 0x51b0000051c, - 0x51d0000051e, - 0x51f00000520, - 0x52100000522, - 0x52300000524, - 0x52500000526, - 0x52700000528, - 0x5590000055a, - 0x56100000587, - 0x591000005be, - 0x5bf000005c0, - 0x5c1000005c3, - 0x5c4000005c6, - 0x5c7000005c8, - 0x5d0000005eb, - 0x5f0000005f3, - 0x6100000061b, - 0x62000000640, - 0x64100000660, - 0x66e00000675, - 0x679000006d4, - 0x6d5000006dd, - 0x6df000006e9, - 0x6ea000006f0, - 0x6fa00000700, - 0x7100000074b, - 0x74d000007b2, - 0x7c0000007f6, - 0x8000000082e, - 0x8400000085c, - 0x8a0000008a1, - 0x8a2000008ad, - 0x8e4000008ff, - 0x90000000958, - 0x96000000964, - 0x96600000970, - 0x97100000978, - 0x97900000980, - 0x98100000984, - 0x9850000098d, - 0x98f00000991, - 0x993000009a9, - 0x9aa000009b1, - 0x9b2000009b3, - 0x9b6000009ba, - 0x9bc000009c5, - 0x9c7000009c9, - 0x9cb000009cf, - 0x9d7000009d8, - 0x9e0000009e4, - 0x9e6000009f2, - 0xa0100000a04, - 0xa0500000a0b, - 0xa0f00000a11, - 0xa1300000a29, - 0xa2a00000a31, - 0xa3200000a33, - 0xa3500000a36, - 0xa3800000a3a, - 0xa3c00000a3d, - 0xa3e00000a43, - 0xa4700000a49, - 0xa4b00000a4e, - 0xa5100000a52, - 0xa5c00000a5d, - 0xa6600000a76, - 0xa8100000a84, - 0xa8500000a8e, - 0xa8f00000a92, - 0xa9300000aa9, - 0xaaa00000ab1, - 0xab200000ab4, - 0xab500000aba, - 0xabc00000ac6, - 0xac700000aca, - 0xacb00000ace, - 0xad000000ad1, - 0xae000000ae4, - 0xae600000af0, - 0xb0100000b04, - 0xb0500000b0d, - 0xb0f00000b11, - 0xb1300000b29, - 0xb2a00000b31, - 0xb3200000b34, - 0xb3500000b3a, - 0xb3c00000b45, - 0xb4700000b49, - 0xb4b00000b4e, - 0xb5600000b58, - 0xb5f00000b64, - 0xb6600000b70, - 0xb7100000b72, - 0xb8200000b84, - 0xb8500000b8b, - 0xb8e00000b91, - 0xb9200000b96, - 0xb9900000b9b, - 0xb9c00000b9d, - 0xb9e00000ba0, - 0xba300000ba5, - 0xba800000bab, - 0xbae00000bba, - 0xbbe00000bc3, - 0xbc600000bc9, - 0xbca00000bce, - 0xbd000000bd1, - 0xbd700000bd8, - 0xbe600000bf0, - 0xc0100000c04, - 0xc0500000c0d, - 0xc0e00000c11, - 0xc1200000c29, - 0xc2a00000c34, - 0xc3500000c3a, - 0xc3d00000c45, - 0xc4600000c49, - 0xc4a00000c4e, - 0xc5500000c57, - 0xc5800000c5a, - 0xc6000000c64, - 0xc6600000c70, - 0xc8200000c84, - 0xc8500000c8d, - 0xc8e00000c91, - 0xc9200000ca9, - 0xcaa00000cb4, - 0xcb500000cba, - 0xcbc00000cc5, - 0xcc600000cc9, - 0xcca00000cce, - 0xcd500000cd7, - 0xcde00000cdf, - 0xce000000ce4, - 0xce600000cf0, - 0xcf100000cf3, - 0xd0200000d04, - 0xd0500000d0d, - 0xd0e00000d11, - 0xd1200000d3b, - 0xd3d00000d45, - 0xd4600000d49, - 0xd4a00000d4f, - 0xd5700000d58, - 0xd6000000d64, - 0xd6600000d70, - 0xd7a00000d80, - 0xd8200000d84, - 0xd8500000d97, - 0xd9a00000db2, - 0xdb300000dbc, - 0xdbd00000dbe, - 0xdc000000dc7, - 0xdca00000dcb, - 0xdcf00000dd5, - 0xdd600000dd7, - 0xdd800000de0, - 0xdf200000df4, - 0xe0100000e33, - 0xe3400000e3b, - 0xe4000000e4f, - 0xe5000000e5a, - 0xe8100000e83, - 0xe8400000e85, - 0xe8700000e89, - 0xe8a00000e8b, - 0xe8d00000e8e, - 0xe9400000e98, - 0xe9900000ea0, - 0xea100000ea4, - 0xea500000ea6, - 0xea700000ea8, - 0xeaa00000eac, - 0xead00000eb3, - 0xeb400000eba, - 0xebb00000ebe, - 0xec000000ec5, - 0xec600000ec7, - 0xec800000ece, - 0xed000000eda, - 0xede00000ee0, - 0xf0000000f01, - 0xf0b00000f0c, - 0xf1800000f1a, - 0xf2000000f2a, - 0xf3500000f36, - 0xf3700000f38, - 0xf3900000f3a, - 0xf3e00000f43, - 0xf4400000f48, - 0xf4900000f4d, - 0xf4e00000f52, - 0xf5300000f57, - 0xf5800000f5c, - 0xf5d00000f69, - 0xf6a00000f6d, - 0xf7100000f73, - 0xf7400000f75, - 0xf7a00000f81, - 0xf8200000f85, - 0xf8600000f93, - 0xf9400000f98, - 0xf9900000f9d, - 0xf9e00000fa2, - 0xfa300000fa7, - 0xfa800000fac, - 0xfad00000fb9, - 0xfba00000fbd, - 0xfc600000fc7, - 0x10000000104a, - 0x10500000109e, - 0x10d0000010fb, - 0x10fd00001100, - 0x120000001249, - 0x124a0000124e, - 0x125000001257, - 0x125800001259, - 0x125a0000125e, - 0x126000001289, - 0x128a0000128e, - 0x1290000012b1, - 0x12b2000012b6, - 0x12b8000012bf, - 0x12c0000012c1, - 0x12c2000012c6, - 0x12c8000012d7, - 0x12d800001311, - 0x131200001316, - 0x13180000135b, - 0x135d00001360, - 0x138000001390, - 0x13a0000013f5, - 0x14010000166d, - 0x166f00001680, - 0x16810000169b, - 0x16a0000016eb, - 0x17000000170d, - 0x170e00001715, - 0x172000001735, - 0x174000001754, - 0x17600000176d, - 0x176e00001771, - 0x177200001774, - 0x1780000017b4, - 0x17b6000017d4, - 0x17d7000017d8, - 0x17dc000017de, - 0x17e0000017ea, - 0x18100000181a, - 0x182000001878, - 0x1880000018ab, - 0x18b0000018f6, - 0x19000000191d, - 0x19200000192c, - 0x19300000193c, - 0x19460000196e, - 0x197000001975, - 0x1980000019ac, - 0x19b0000019ca, - 0x19d0000019da, - 0x1a0000001a1c, - 0x1a2000001a5f, - 0x1a6000001a7d, - 0x1a7f00001a8a, - 0x1a9000001a9a, - 0x1aa700001aa8, - 0x1b0000001b4c, - 0x1b5000001b5a, - 0x1b6b00001b74, - 0x1b8000001bf4, - 0x1c0000001c38, - 0x1c4000001c4a, - 0x1c4d00001c7e, - 0x1cd000001cd3, - 0x1cd400001cf7, - 0x1d0000001d2c, - 0x1d2f00001d30, - 0x1d3b00001d3c, - 0x1d4e00001d4f, - 0x1d6b00001d78, - 0x1d7900001d9b, - 0x1dc000001de7, - 0x1dfc00001e00, - 0x1e0100001e02, - 0x1e0300001e04, - 0x1e0500001e06, - 0x1e0700001e08, - 0x1e0900001e0a, - 0x1e0b00001e0c, - 0x1e0d00001e0e, - 0x1e0f00001e10, - 0x1e1100001e12, - 0x1e1300001e14, - 0x1e1500001e16, - 0x1e1700001e18, - 0x1e1900001e1a, - 0x1e1b00001e1c, - 0x1e1d00001e1e, - 0x1e1f00001e20, - 0x1e2100001e22, - 0x1e2300001e24, - 0x1e2500001e26, - 0x1e2700001e28, - 0x1e2900001e2a, - 0x1e2b00001e2c, - 0x1e2d00001e2e, - 0x1e2f00001e30, - 0x1e3100001e32, - 0x1e3300001e34, - 0x1e3500001e36, - 0x1e3700001e38, - 0x1e3900001e3a, - 0x1e3b00001e3c, - 0x1e3d00001e3e, - 0x1e3f00001e40, - 0x1e4100001e42, - 0x1e4300001e44, - 0x1e4500001e46, - 0x1e4700001e48, - 0x1e4900001e4a, - 0x1e4b00001e4c, - 0x1e4d00001e4e, - 0x1e4f00001e50, - 0x1e5100001e52, - 0x1e5300001e54, - 0x1e5500001e56, - 0x1e5700001e58, - 0x1e5900001e5a, - 0x1e5b00001e5c, - 0x1e5d00001e5e, - 0x1e5f00001e60, - 0x1e6100001e62, - 0x1e6300001e64, - 0x1e6500001e66, - 0x1e6700001e68, - 0x1e6900001e6a, - 0x1e6b00001e6c, - 0x1e6d00001e6e, - 0x1e6f00001e70, - 0x1e7100001e72, - 0x1e7300001e74, - 0x1e7500001e76, - 0x1e7700001e78, - 0x1e7900001e7a, - 0x1e7b00001e7c, - 0x1e7d00001e7e, - 0x1e7f00001e80, - 0x1e8100001e82, - 0x1e8300001e84, - 0x1e8500001e86, - 0x1e8700001e88, - 0x1e8900001e8a, - 0x1e8b00001e8c, - 0x1e8d00001e8e, - 0x1e8f00001e90, - 0x1e9100001e92, - 0x1e9300001e94, - 0x1e9500001e9a, - 0x1e9c00001e9e, - 0x1e9f00001ea0, - 0x1ea100001ea2, - 0x1ea300001ea4, - 0x1ea500001ea6, - 0x1ea700001ea8, - 0x1ea900001eaa, - 0x1eab00001eac, - 0x1ead00001eae, - 0x1eaf00001eb0, - 0x1eb100001eb2, - 0x1eb300001eb4, - 0x1eb500001eb6, - 0x1eb700001eb8, - 0x1eb900001eba, - 0x1ebb00001ebc, - 0x1ebd00001ebe, - 0x1ebf00001ec0, - 0x1ec100001ec2, - 0x1ec300001ec4, - 0x1ec500001ec6, - 0x1ec700001ec8, - 0x1ec900001eca, - 0x1ecb00001ecc, - 0x1ecd00001ece, - 0x1ecf00001ed0, - 0x1ed100001ed2, - 0x1ed300001ed4, - 0x1ed500001ed6, - 0x1ed700001ed8, - 0x1ed900001eda, - 0x1edb00001edc, - 0x1edd00001ede, - 0x1edf00001ee0, - 0x1ee100001ee2, - 0x1ee300001ee4, - 0x1ee500001ee6, - 0x1ee700001ee8, - 0x1ee900001eea, - 0x1eeb00001eec, - 0x1eed00001eee, - 0x1eef00001ef0, - 0x1ef100001ef2, - 0x1ef300001ef4, - 0x1ef500001ef6, - 0x1ef700001ef8, - 0x1ef900001efa, - 0x1efb00001efc, - 0x1efd00001efe, - 0x1eff00001f08, - 0x1f1000001f16, - 0x1f2000001f28, - 0x1f3000001f38, - 0x1f4000001f46, - 0x1f5000001f58, - 0x1f6000001f68, - 0x1f7000001f71, - 0x1f7200001f73, - 0x1f7400001f75, - 0x1f7600001f77, - 0x1f7800001f79, - 0x1f7a00001f7b, - 0x1f7c00001f7d, - 0x1fb000001fb2, - 0x1fb600001fb7, - 0x1fc600001fc7, - 0x1fd000001fd3, - 0x1fd600001fd8, - 0x1fe000001fe3, - 0x1fe400001fe8, - 0x1ff600001ff7, - 0x214e0000214f, - 0x218400002185, - 0x2c3000002c5f, - 0x2c6100002c62, - 0x2c6500002c67, - 0x2c6800002c69, - 0x2c6a00002c6b, - 0x2c6c00002c6d, - 0x2c7100002c72, - 0x2c7300002c75, - 0x2c7600002c7c, - 0x2c8100002c82, - 0x2c8300002c84, - 0x2c8500002c86, - 0x2c8700002c88, - 0x2c8900002c8a, - 0x2c8b00002c8c, - 0x2c8d00002c8e, - 0x2c8f00002c90, - 0x2c9100002c92, - 0x2c9300002c94, - 0x2c9500002c96, - 0x2c9700002c98, - 0x2c9900002c9a, - 0x2c9b00002c9c, - 0x2c9d00002c9e, - 0x2c9f00002ca0, - 0x2ca100002ca2, - 0x2ca300002ca4, - 0x2ca500002ca6, - 0x2ca700002ca8, - 0x2ca900002caa, - 0x2cab00002cac, - 0x2cad00002cae, - 0x2caf00002cb0, - 0x2cb100002cb2, - 0x2cb300002cb4, - 0x2cb500002cb6, - 0x2cb700002cb8, - 0x2cb900002cba, - 0x2cbb00002cbc, - 0x2cbd00002cbe, - 0x2cbf00002cc0, - 0x2cc100002cc2, - 0x2cc300002cc4, - 0x2cc500002cc6, - 0x2cc700002cc8, - 0x2cc900002cca, - 0x2ccb00002ccc, - 0x2ccd00002cce, - 0x2ccf00002cd0, - 0x2cd100002cd2, - 0x2cd300002cd4, - 0x2cd500002cd6, - 0x2cd700002cd8, - 0x2cd900002cda, - 0x2cdb00002cdc, - 0x2cdd00002cde, - 0x2cdf00002ce0, - 0x2ce100002ce2, - 0x2ce300002ce5, - 0x2cec00002ced, - 0x2cee00002cf2, - 0x2cf300002cf4, - 0x2d0000002d26, - 0x2d2700002d28, - 0x2d2d00002d2e, - 0x2d3000002d68, - 0x2d7f00002d97, - 0x2da000002da7, - 0x2da800002daf, - 0x2db000002db7, - 0x2db800002dbf, - 0x2dc000002dc7, - 0x2dc800002dcf, - 0x2dd000002dd7, - 0x2dd800002ddf, - 0x2de000002e00, - 0x2e2f00002e30, - 0x300500003008, - 0x302a0000302e, - 0x303c0000303d, - 0x304100003097, - 0x30990000309b, - 0x309d0000309f, - 0x30a1000030fb, - 0x30fc000030ff, - 0x31050000312e, - 0x31a0000031bb, - 0x31f000003200, - 0x340000004db6, - 0x4e0000009fcd, - 0xa0000000a48d, - 0xa4d00000a4fe, - 0xa5000000a60d, - 0xa6100000a62c, - 0xa6410000a642, - 0xa6430000a644, - 0xa6450000a646, - 0xa6470000a648, - 0xa6490000a64a, - 0xa64b0000a64c, - 0xa64d0000a64e, - 0xa64f0000a650, - 0xa6510000a652, - 0xa6530000a654, - 0xa6550000a656, - 0xa6570000a658, - 0xa6590000a65a, - 0xa65b0000a65c, - 0xa65d0000a65e, - 0xa65f0000a660, - 0xa6610000a662, - 0xa6630000a664, - 0xa6650000a666, - 0xa6670000a668, - 0xa6690000a66a, - 0xa66b0000a66c, - 0xa66d0000a670, - 0xa6740000a67e, - 0xa67f0000a680, - 0xa6810000a682, - 0xa6830000a684, - 0xa6850000a686, - 0xa6870000a688, - 0xa6890000a68a, - 0xa68b0000a68c, - 0xa68d0000a68e, - 0xa68f0000a690, - 0xa6910000a692, - 0xa6930000a694, - 0xa6950000a696, - 0xa6970000a698, - 0xa69f0000a6e6, - 0xa6f00000a6f2, - 0xa7170000a720, - 0xa7230000a724, - 0xa7250000a726, - 0xa7270000a728, - 0xa7290000a72a, - 0xa72b0000a72c, - 0xa72d0000a72e, - 0xa72f0000a732, - 0xa7330000a734, - 0xa7350000a736, - 0xa7370000a738, - 0xa7390000a73a, - 0xa73b0000a73c, - 0xa73d0000a73e, - 0xa73f0000a740, - 0xa7410000a742, - 0xa7430000a744, - 0xa7450000a746, - 0xa7470000a748, - 0xa7490000a74a, - 0xa74b0000a74c, - 0xa74d0000a74e, - 0xa74f0000a750, - 0xa7510000a752, - 0xa7530000a754, - 0xa7550000a756, - 0xa7570000a758, - 0xa7590000a75a, - 0xa75b0000a75c, - 0xa75d0000a75e, - 0xa75f0000a760, - 0xa7610000a762, - 0xa7630000a764, - 0xa7650000a766, - 0xa7670000a768, - 0xa7690000a76a, - 0xa76b0000a76c, - 0xa76d0000a76e, - 0xa76f0000a770, - 0xa7710000a779, - 0xa77a0000a77b, - 0xa77c0000a77d, - 0xa77f0000a780, - 0xa7810000a782, - 0xa7830000a784, - 0xa7850000a786, - 0xa7870000a789, - 0xa78c0000a78d, - 0xa78e0000a78f, - 0xa7910000a792, - 0xa7930000a794, - 0xa7a10000a7a2, - 0xa7a30000a7a4, - 0xa7a50000a7a6, - 0xa7a70000a7a8, - 0xa7a90000a7aa, - 0xa7fa0000a828, - 0xa8400000a874, - 0xa8800000a8c5, - 0xa8d00000a8da, - 0xa8e00000a8f8, - 0xa8fb0000a8fc, - 0xa9000000a92e, - 0xa9300000a954, - 0xa9800000a9c1, - 0xa9cf0000a9da, - 0xaa000000aa37, - 0xaa400000aa4e, - 0xaa500000aa5a, - 0xaa600000aa77, - 0xaa7a0000aa7c, - 0xaa800000aac3, - 0xaadb0000aade, - 0xaae00000aaf0, - 0xaaf20000aaf7, - 0xab010000ab07, - 0xab090000ab0f, - 0xab110000ab17, - 0xab200000ab27, - 0xab280000ab2f, - 0xabc00000abeb, - 0xabec0000abee, - 0xabf00000abfa, - 0xac000000d7a4, - 0xfa0e0000fa10, - 0xfa110000fa12, - 0xfa130000fa15, - 0xfa1f0000fa20, - 0xfa210000fa22, - 0xfa230000fa25, - 0xfa270000fa2a, - 0xfb1e0000fb1f, - 0xfe200000fe27, - 0xfe730000fe74, - 0x100000001000c, - 0x1000d00010027, - 0x100280001003b, - 0x1003c0001003e, - 0x1003f0001004e, - 0x100500001005e, - 0x10080000100fb, - 0x101fd000101fe, - 0x102800001029d, - 0x102a0000102d1, - 0x103000001031f, - 0x1033000010341, - 0x103420001034a, - 0x103800001039e, - 0x103a0000103c4, - 0x103c8000103d0, - 0x104280001049e, - 0x104a0000104aa, - 0x1080000010806, - 0x1080800010809, - 0x1080a00010836, - 0x1083700010839, - 0x1083c0001083d, - 0x1083f00010856, - 0x1090000010916, - 0x109200001093a, - 0x10980000109b8, - 0x109be000109c0, - 0x10a0000010a04, - 0x10a0500010a07, - 0x10a0c00010a14, - 0x10a1500010a18, - 0x10a1900010a34, - 0x10a3800010a3b, - 0x10a3f00010a40, - 0x10a6000010a7d, - 0x10b0000010b36, - 0x10b4000010b56, - 0x10b6000010b73, - 0x10c0000010c49, - 0x1100000011047, - 0x1106600011070, - 0x11080000110bb, - 0x110d0000110e9, - 0x110f0000110fa, - 0x1110000011135, - 0x1113600011140, - 0x11180000111c5, - 0x111d0000111da, - 0x11680000116b8, - 0x116c0000116ca, - 0x120000001236f, - 0x130000001342f, - 0x1680000016a39, - 0x16f0000016f45, - 0x16f5000016f7f, - 0x16f8f00016fa0, - 0x1b0000001b002, - 0x200000002a6d7, - 0x2a7000002b735, - 0x2b7400002b81e, - ), - 'CONTEXTJ': ( - 0x200c0000200e, - ), - 'CONTEXTO': ( - 0xb7000000b8, - 0x37500000376, - 0x5f3000005f5, - 0x6600000066a, - 0x6f0000006fa, - 0x30fb000030fc, - ), -} diff --git a/pype/vendor/requests/packages/idna/intranges.py b/pype/vendor/requests/packages/idna/intranges.py deleted file mode 100644 index fa8a735662..0000000000 --- a/pype/vendor/requests/packages/idna/intranges.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Given a list of integers, made up of (hopefully) a small number of long runs -of consecutive integers, compute a representation of the form -((start1, end1), (start2, end2) ...). Then answer the question "was x present -in the original list?" in time O(log(# runs)). -""" - -import bisect - -def intranges_from_list(list_): - """Represent a list of integers as a sequence of ranges: - ((start_0, end_0), (start_1, end_1), ...), such that the original - integers are exactly those x such that start_i <= x < end_i for some i. - - Ranges are encoded as single integers (start << 32 | end), not as tuples. - """ - - sorted_list = sorted(list_) - ranges = [] - last_write = -1 - for i in range(len(sorted_list)): - if i+1 < len(sorted_list): - if sorted_list[i] == sorted_list[i+1]-1: - continue - current_range = sorted_list[last_write+1:i+1] - ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) - last_write = i - - return tuple(ranges) - -def _encode_range(start, end): - return (start << 32) | end - -def _decode_range(r): - return (r >> 32), (r & ((1 << 32) - 1)) - - -def intranges_contain(int_, ranges): - """Determine if `int_` falls into one of the ranges in `ranges`.""" - tuple_ = _encode_range(int_, 0) - pos = bisect.bisect_left(ranges, tuple_) - # we could be immediately ahead of a tuple (start, end) - # with start < int_ <= end - if pos > 0: - left, right = _decode_range(ranges[pos-1]) - if left <= int_ < right: - return True - # or we could be immediately behind a tuple (int_, end) - if pos < len(ranges): - left, _ = _decode_range(ranges[pos]) - if left == int_: - return True - return False diff --git a/pype/vendor/requests/packages/idna/uts46data.py b/pype/vendor/requests/packages/idna/uts46data.py deleted file mode 100644 index 48da8408f2..0000000000 --- a/pype/vendor/requests/packages/idna/uts46data.py +++ /dev/null @@ -1,7633 +0,0 @@ -# This file is automatically generated by tools/build-uts46data.py -# vim: set fileencoding=utf-8 : - -"""IDNA Mapping Table from UTS46.""" - - -def _seg_0(): - return [ - (0x0, '3'), - (0x1, '3'), - (0x2, '3'), - (0x3, '3'), - (0x4, '3'), - (0x5, '3'), - (0x6, '3'), - (0x7, '3'), - (0x8, '3'), - (0x9, '3'), - (0xA, '3'), - (0xB, '3'), - (0xC, '3'), - (0xD, '3'), - (0xE, '3'), - (0xF, '3'), - (0x10, '3'), - (0x11, '3'), - (0x12, '3'), - (0x13, '3'), - (0x14, '3'), - (0x15, '3'), - (0x16, '3'), - (0x17, '3'), - (0x18, '3'), - (0x19, '3'), - (0x1A, '3'), - (0x1B, '3'), - (0x1C, '3'), - (0x1D, '3'), - (0x1E, '3'), - (0x1F, '3'), - (0x20, '3'), - (0x21, '3'), - (0x22, '3'), - (0x23, '3'), - (0x24, '3'), - (0x25, '3'), - (0x26, '3'), - (0x27, '3'), - (0x28, '3'), - (0x29, '3'), - (0x2A, '3'), - (0x2B, '3'), - (0x2C, '3'), - (0x2D, 'V'), - (0x2E, 'V'), - (0x2F, '3'), - (0x30, 'V'), - (0x31, 'V'), - (0x32, 'V'), - (0x33, 'V'), - (0x34, 'V'), - (0x35, 'V'), - (0x36, 'V'), - (0x37, 'V'), - (0x38, 'V'), - (0x39, 'V'), - (0x3A, '3'), - (0x3B, '3'), - (0x3C, '3'), - (0x3D, '3'), - (0x3E, '3'), - (0x3F, '3'), - (0x40, '3'), - (0x41, 'M', u'a'), - (0x42, 'M', u'b'), - (0x43, 'M', u'c'), - (0x44, 'M', u'd'), - (0x45, 'M', u'e'), - (0x46, 'M', u'f'), - (0x47, 'M', u'g'), - (0x48, 'M', u'h'), - (0x49, 'M', u'i'), - (0x4A, 'M', u'j'), - (0x4B, 'M', u'k'), - (0x4C, 'M', u'l'), - (0x4D, 'M', u'm'), - (0x4E, 'M', u'n'), - (0x4F, 'M', u'o'), - (0x50, 'M', u'p'), - (0x51, 'M', u'q'), - (0x52, 'M', u'r'), - (0x53, 'M', u's'), - (0x54, 'M', u't'), - (0x55, 'M', u'u'), - (0x56, 'M', u'v'), - (0x57, 'M', u'w'), - (0x58, 'M', u'x'), - (0x59, 'M', u'y'), - (0x5A, 'M', u'z'), - (0x5B, '3'), - (0x5C, '3'), - (0x5D, '3'), - (0x5E, '3'), - (0x5F, '3'), - (0x60, '3'), - (0x61, 'V'), - (0x62, 'V'), - (0x63, 'V'), - ] - -def _seg_1(): - return [ - (0x64, 'V'), - (0x65, 'V'), - (0x66, 'V'), - (0x67, 'V'), - (0x68, 'V'), - (0x69, 'V'), - (0x6A, 'V'), - (0x6B, 'V'), - (0x6C, 'V'), - (0x6D, 'V'), - (0x6E, 'V'), - (0x6F, 'V'), - (0x70, 'V'), - (0x71, 'V'), - (0x72, 'V'), - (0x73, 'V'), - (0x74, 'V'), - (0x75, 'V'), - (0x76, 'V'), - (0x77, 'V'), - (0x78, 'V'), - (0x79, 'V'), - (0x7A, 'V'), - (0x7B, '3'), - (0x7C, '3'), - (0x7D, '3'), - (0x7E, '3'), - (0x7F, '3'), - (0x80, 'X'), - (0x81, 'X'), - (0x82, 'X'), - (0x83, 'X'), - (0x84, 'X'), - (0x85, 'X'), - (0x86, 'X'), - (0x87, 'X'), - (0x88, 'X'), - (0x89, 'X'), - (0x8A, 'X'), - (0x8B, 'X'), - (0x8C, 'X'), - (0x8D, 'X'), - (0x8E, 'X'), - (0x8F, 'X'), - (0x90, 'X'), - (0x91, 'X'), - (0x92, 'X'), - (0x93, 'X'), - (0x94, 'X'), - (0x95, 'X'), - (0x96, 'X'), - (0x97, 'X'), - (0x98, 'X'), - (0x99, 'X'), - (0x9A, 'X'), - (0x9B, 'X'), - (0x9C, 'X'), - (0x9D, 'X'), - (0x9E, 'X'), - (0x9F, 'X'), - (0xA0, '3', u' '), - (0xA1, 'V'), - (0xA2, 'V'), - (0xA3, 'V'), - (0xA4, 'V'), - (0xA5, 'V'), - (0xA6, 'V'), - (0xA7, 'V'), - (0xA8, '3', u' ̈'), - (0xA9, 'V'), - (0xAA, 'M', u'a'), - (0xAB, 'V'), - (0xAC, 'V'), - (0xAD, 'I'), - (0xAE, 'V'), - (0xAF, '3', u' ̄'), - (0xB0, 'V'), - (0xB1, 'V'), - (0xB2, 'M', u'2'), - (0xB3, 'M', u'3'), - (0xB4, '3', u' ́'), - (0xB5, 'M', u'μ'), - (0xB6, 'V'), - (0xB7, 'V'), - (0xB8, '3', u' ̧'), - (0xB9, 'M', u'1'), - (0xBA, 'M', u'o'), - (0xBB, 'V'), - (0xBC, 'M', u'1⁄4'), - (0xBD, 'M', u'1⁄2'), - (0xBE, 'M', u'3⁄4'), - (0xBF, 'V'), - (0xC0, 'M', u'à'), - (0xC1, 'M', u'á'), - (0xC2, 'M', u'â'), - (0xC3, 'M', u'ã'), - (0xC4, 'M', u'ä'), - (0xC5, 'M', u'å'), - (0xC6, 'M', u'æ'), - (0xC7, 'M', u'ç'), - ] - -def _seg_2(): - return [ - (0xC8, 'M', u'è'), - (0xC9, 'M', u'é'), - (0xCA, 'M', u'ê'), - (0xCB, 'M', u'ë'), - (0xCC, 'M', u'ì'), - (0xCD, 'M', u'í'), - (0xCE, 'M', u'î'), - (0xCF, 'M', u'ï'), - (0xD0, 'M', u'ð'), - (0xD1, 'M', u'ñ'), - (0xD2, 'M', u'ò'), - (0xD3, 'M', u'ó'), - (0xD4, 'M', u'ô'), - (0xD5, 'M', u'õ'), - (0xD6, 'M', u'ö'), - (0xD7, 'V'), - (0xD8, 'M', u'ø'), - (0xD9, 'M', u'ù'), - (0xDA, 'M', u'ú'), - (0xDB, 'M', u'û'), - (0xDC, 'M', u'ü'), - (0xDD, 'M', u'ý'), - (0xDE, 'M', u'þ'), - (0xDF, 'D', u'ss'), - (0xE0, 'V'), - (0xE1, 'V'), - (0xE2, 'V'), - (0xE3, 'V'), - (0xE4, 'V'), - (0xE5, 'V'), - (0xE6, 'V'), - (0xE7, 'V'), - (0xE8, 'V'), - (0xE9, 'V'), - (0xEA, 'V'), - (0xEB, 'V'), - (0xEC, 'V'), - (0xED, 'V'), - (0xEE, 'V'), - (0xEF, 'V'), - (0xF0, 'V'), - (0xF1, 'V'), - (0xF2, 'V'), - (0xF3, 'V'), - (0xF4, 'V'), - (0xF5, 'V'), - (0xF6, 'V'), - (0xF7, 'V'), - (0xF8, 'V'), - (0xF9, 'V'), - (0xFA, 'V'), - (0xFB, 'V'), - (0xFC, 'V'), - (0xFD, 'V'), - (0xFE, 'V'), - (0xFF, 'V'), - (0x100, 'M', u'ā'), - (0x101, 'V'), - (0x102, 'M', u'ă'), - (0x103, 'V'), - (0x104, 'M', u'ą'), - (0x105, 'V'), - (0x106, 'M', u'ć'), - (0x107, 'V'), - (0x108, 'M', u'ĉ'), - (0x109, 'V'), - (0x10A, 'M', u'ċ'), - (0x10B, 'V'), - (0x10C, 'M', u'č'), - (0x10D, 'V'), - (0x10E, 'M', u'ď'), - (0x10F, 'V'), - (0x110, 'M', u'đ'), - (0x111, 'V'), - (0x112, 'M', u'ē'), - (0x113, 'V'), - (0x114, 'M', u'ĕ'), - (0x115, 'V'), - (0x116, 'M', u'ė'), - (0x117, 'V'), - (0x118, 'M', u'ę'), - (0x119, 'V'), - (0x11A, 'M', u'ě'), - (0x11B, 'V'), - (0x11C, 'M', u'ĝ'), - (0x11D, 'V'), - (0x11E, 'M', u'ğ'), - (0x11F, 'V'), - (0x120, 'M', u'ġ'), - (0x121, 'V'), - (0x122, 'M', u'ģ'), - (0x123, 'V'), - (0x124, 'M', u'ĥ'), - (0x125, 'V'), - (0x126, 'M', u'ħ'), - (0x127, 'V'), - (0x128, 'M', u'ĩ'), - (0x129, 'V'), - (0x12A, 'M', u'ī'), - (0x12B, 'V'), - ] - -def _seg_3(): - return [ - (0x12C, 'M', u'ĭ'), - (0x12D, 'V'), - (0x12E, 'M', u'į'), - (0x12F, 'V'), - (0x130, 'M', u'i̇'), - (0x131, 'V'), - (0x132, 'M', u'ij'), - (0x134, 'M', u'ĵ'), - (0x135, 'V'), - (0x136, 'M', u'ķ'), - (0x137, 'V'), - (0x139, 'M', u'ĺ'), - (0x13A, 'V'), - (0x13B, 'M', u'ļ'), - (0x13C, 'V'), - (0x13D, 'M', u'ľ'), - (0x13E, 'V'), - (0x13F, 'M', u'l·'), - (0x141, 'M', u'ł'), - (0x142, 'V'), - (0x143, 'M', u'ń'), - (0x144, 'V'), - (0x145, 'M', u'ņ'), - (0x146, 'V'), - (0x147, 'M', u'ň'), - (0x148, 'V'), - (0x149, 'M', u'ʼn'), - (0x14A, 'M', u'ŋ'), - (0x14B, 'V'), - (0x14C, 'M', u'ō'), - (0x14D, 'V'), - (0x14E, 'M', u'ŏ'), - (0x14F, 'V'), - (0x150, 'M', u'ő'), - (0x151, 'V'), - (0x152, 'M', u'œ'), - (0x153, 'V'), - (0x154, 'M', u'ŕ'), - (0x155, 'V'), - (0x156, 'M', u'ŗ'), - (0x157, 'V'), - (0x158, 'M', u'ř'), - (0x159, 'V'), - (0x15A, 'M', u'ś'), - (0x15B, 'V'), - (0x15C, 'M', u'ŝ'), - (0x15D, 'V'), - (0x15E, 'M', u'ş'), - (0x15F, 'V'), - (0x160, 'M', u'š'), - (0x161, 'V'), - (0x162, 'M', u'ţ'), - (0x163, 'V'), - (0x164, 'M', u'ť'), - (0x165, 'V'), - (0x166, 'M', u'ŧ'), - (0x167, 'V'), - (0x168, 'M', u'ũ'), - (0x169, 'V'), - (0x16A, 'M', u'ū'), - (0x16B, 'V'), - (0x16C, 'M', u'ŭ'), - (0x16D, 'V'), - (0x16E, 'M', u'ů'), - (0x16F, 'V'), - (0x170, 'M', u'ű'), - (0x171, 'V'), - (0x172, 'M', u'ų'), - (0x173, 'V'), - (0x174, 'M', u'ŵ'), - (0x175, 'V'), - (0x176, 'M', u'ŷ'), - (0x177, 'V'), - (0x178, 'M', u'ÿ'), - (0x179, 'M', u'ź'), - (0x17A, 'V'), - (0x17B, 'M', u'ż'), - (0x17C, 'V'), - (0x17D, 'M', u'ž'), - (0x17E, 'V'), - (0x17F, 'M', u's'), - (0x180, 'V'), - (0x181, 'M', u'ɓ'), - (0x182, 'M', u'ƃ'), - (0x183, 'V'), - (0x184, 'M', u'ƅ'), - (0x185, 'V'), - (0x186, 'M', u'ɔ'), - (0x187, 'M', u'ƈ'), - (0x188, 'V'), - (0x189, 'M', u'ɖ'), - (0x18A, 'M', u'ɗ'), - (0x18B, 'M', u'ƌ'), - (0x18C, 'V'), - (0x18E, 'M', u'ǝ'), - (0x18F, 'M', u'ə'), - (0x190, 'M', u'ɛ'), - (0x191, 'M', u'ƒ'), - (0x192, 'V'), - (0x193, 'M', u'ɠ'), - ] - -def _seg_4(): - return [ - (0x194, 'M', u'ɣ'), - (0x195, 'V'), - (0x196, 'M', u'ɩ'), - (0x197, 'M', u'ɨ'), - (0x198, 'M', u'ƙ'), - (0x199, 'V'), - (0x19C, 'M', u'ɯ'), - (0x19D, 'M', u'ɲ'), - (0x19E, 'V'), - (0x19F, 'M', u'ɵ'), - (0x1A0, 'M', u'ơ'), - (0x1A1, 'V'), - (0x1A2, 'M', u'ƣ'), - (0x1A3, 'V'), - (0x1A4, 'M', u'ƥ'), - (0x1A5, 'V'), - (0x1A6, 'M', u'ʀ'), - (0x1A7, 'M', u'ƨ'), - (0x1A8, 'V'), - (0x1A9, 'M', u'ʃ'), - (0x1AA, 'V'), - (0x1AC, 'M', u'ƭ'), - (0x1AD, 'V'), - (0x1AE, 'M', u'ʈ'), - (0x1AF, 'M', u'ư'), - (0x1B0, 'V'), - (0x1B1, 'M', u'ʊ'), - (0x1B2, 'M', u'ʋ'), - (0x1B3, 'M', u'ƴ'), - (0x1B4, 'V'), - (0x1B5, 'M', u'ƶ'), - (0x1B6, 'V'), - (0x1B7, 'M', u'ʒ'), - (0x1B8, 'M', u'ƹ'), - (0x1B9, 'V'), - (0x1BC, 'M', u'ƽ'), - (0x1BD, 'V'), - (0x1C4, 'M', u'dž'), - (0x1C7, 'M', u'lj'), - (0x1CA, 'M', u'nj'), - (0x1CD, 'M', u'ǎ'), - (0x1CE, 'V'), - (0x1CF, 'M', u'ǐ'), - (0x1D0, 'V'), - (0x1D1, 'M', u'ǒ'), - (0x1D2, 'V'), - (0x1D3, 'M', u'ǔ'), - (0x1D4, 'V'), - (0x1D5, 'M', u'ǖ'), - (0x1D6, 'V'), - (0x1D7, 'M', u'ǘ'), - (0x1D8, 'V'), - (0x1D9, 'M', u'ǚ'), - (0x1DA, 'V'), - (0x1DB, 'M', u'ǜ'), - (0x1DC, 'V'), - (0x1DE, 'M', u'ǟ'), - (0x1DF, 'V'), - (0x1E0, 'M', u'ǡ'), - (0x1E1, 'V'), - (0x1E2, 'M', u'ǣ'), - (0x1E3, 'V'), - (0x1E4, 'M', u'ǥ'), - (0x1E5, 'V'), - (0x1E6, 'M', u'ǧ'), - (0x1E7, 'V'), - (0x1E8, 'M', u'ǩ'), - (0x1E9, 'V'), - (0x1EA, 'M', u'ǫ'), - (0x1EB, 'V'), - (0x1EC, 'M', u'ǭ'), - (0x1ED, 'V'), - (0x1EE, 'M', u'ǯ'), - (0x1EF, 'V'), - (0x1F1, 'M', u'dz'), - (0x1F4, 'M', u'ǵ'), - (0x1F5, 'V'), - (0x1F6, 'M', u'ƕ'), - (0x1F7, 'M', u'ƿ'), - (0x1F8, 'M', u'ǹ'), - (0x1F9, 'V'), - (0x1FA, 'M', u'ǻ'), - (0x1FB, 'V'), - (0x1FC, 'M', u'ǽ'), - (0x1FD, 'V'), - (0x1FE, 'M', u'ǿ'), - (0x1FF, 'V'), - (0x200, 'M', u'ȁ'), - (0x201, 'V'), - (0x202, 'M', u'ȃ'), - (0x203, 'V'), - (0x204, 'M', u'ȅ'), - (0x205, 'V'), - (0x206, 'M', u'ȇ'), - (0x207, 'V'), - (0x208, 'M', u'ȉ'), - (0x209, 'V'), - (0x20A, 'M', u'ȋ'), - (0x20B, 'V'), - (0x20C, 'M', u'ȍ'), - ] - -def _seg_5(): - return [ - (0x20D, 'V'), - (0x20E, 'M', u'ȏ'), - (0x20F, 'V'), - (0x210, 'M', u'ȑ'), - (0x211, 'V'), - (0x212, 'M', u'ȓ'), - (0x213, 'V'), - (0x214, 'M', u'ȕ'), - (0x215, 'V'), - (0x216, 'M', u'ȗ'), - (0x217, 'V'), - (0x218, 'M', u'ș'), - (0x219, 'V'), - (0x21A, 'M', u'ț'), - (0x21B, 'V'), - (0x21C, 'M', u'ȝ'), - (0x21D, 'V'), - (0x21E, 'M', u'ȟ'), - (0x21F, 'V'), - (0x220, 'M', u'ƞ'), - (0x221, 'V'), - (0x222, 'M', u'ȣ'), - (0x223, 'V'), - (0x224, 'M', u'ȥ'), - (0x225, 'V'), - (0x226, 'M', u'ȧ'), - (0x227, 'V'), - (0x228, 'M', u'ȩ'), - (0x229, 'V'), - (0x22A, 'M', u'ȫ'), - (0x22B, 'V'), - (0x22C, 'M', u'ȭ'), - (0x22D, 'V'), - (0x22E, 'M', u'ȯ'), - (0x22F, 'V'), - (0x230, 'M', u'ȱ'), - (0x231, 'V'), - (0x232, 'M', u'ȳ'), - (0x233, 'V'), - (0x23A, 'M', u'ⱥ'), - (0x23B, 'M', u'ȼ'), - (0x23C, 'V'), - (0x23D, 'M', u'ƚ'), - (0x23E, 'M', u'ⱦ'), - (0x23F, 'V'), - (0x241, 'M', u'ɂ'), - (0x242, 'V'), - (0x243, 'M', u'ƀ'), - (0x244, 'M', u'ʉ'), - (0x245, 'M', u'ʌ'), - (0x246, 'M', u'ɇ'), - (0x247, 'V'), - (0x248, 'M', u'ɉ'), - (0x249, 'V'), - (0x24A, 'M', u'ɋ'), - (0x24B, 'V'), - (0x24C, 'M', u'ɍ'), - (0x24D, 'V'), - (0x24E, 'M', u'ɏ'), - (0x24F, 'V'), - (0x2B0, 'M', u'h'), - (0x2B1, 'M', u'ɦ'), - (0x2B2, 'M', u'j'), - (0x2B3, 'M', u'r'), - (0x2B4, 'M', u'ɹ'), - (0x2B5, 'M', u'ɻ'), - (0x2B6, 'M', u'ʁ'), - (0x2B7, 'M', u'w'), - (0x2B8, 'M', u'y'), - (0x2B9, 'V'), - (0x2D8, '3', u' ̆'), - (0x2D9, '3', u' ̇'), - (0x2DA, '3', u' ̊'), - (0x2DB, '3', u' ̨'), - (0x2DC, '3', u' ̃'), - (0x2DD, '3', u' ̋'), - (0x2DE, 'V'), - (0x2E0, 'M', u'ɣ'), - (0x2E1, 'M', u'l'), - (0x2E2, 'M', u's'), - (0x2E3, 'M', u'x'), - (0x2E4, 'M', u'ʕ'), - (0x2E5, 'V'), - (0x340, 'M', u'̀'), - (0x341, 'M', u'́'), - (0x342, 'V'), - (0x343, 'M', u'̓'), - (0x344, 'M', u'̈́'), - (0x345, 'M', u'ι'), - (0x346, 'V'), - (0x34F, 'I'), - (0x350, 'V'), - (0x370, 'M', u'ͱ'), - (0x371, 'V'), - (0x372, 'M', u'ͳ'), - (0x373, 'V'), - (0x374, 'M', u'ʹ'), - (0x375, 'V'), - (0x376, 'M', u'ͷ'), - (0x377, 'V'), - ] - -def _seg_6(): - return [ - (0x378, 'X'), - (0x37A, '3', u' ι'), - (0x37B, 'V'), - (0x37E, '3', u';'), - (0x37F, 'X'), - (0x384, '3', u' ́'), - (0x385, '3', u' ̈́'), - (0x386, 'M', u'ά'), - (0x387, 'M', u'·'), - (0x388, 'M', u'έ'), - (0x389, 'M', u'ή'), - (0x38A, 'M', u'ί'), - (0x38B, 'X'), - (0x38C, 'M', u'ό'), - (0x38D, 'X'), - (0x38E, 'M', u'ύ'), - (0x38F, 'M', u'ώ'), - (0x390, 'V'), - (0x391, 'M', u'α'), - (0x392, 'M', u'β'), - (0x393, 'M', u'γ'), - (0x394, 'M', u'δ'), - (0x395, 'M', u'ε'), - (0x396, 'M', u'ζ'), - (0x397, 'M', u'η'), - (0x398, 'M', u'θ'), - (0x399, 'M', u'ι'), - (0x39A, 'M', u'κ'), - (0x39B, 'M', u'λ'), - (0x39C, 'M', u'μ'), - (0x39D, 'M', u'ν'), - (0x39E, 'M', u'ξ'), - (0x39F, 'M', u'ο'), - (0x3A0, 'M', u'π'), - (0x3A1, 'M', u'ρ'), - (0x3A2, 'X'), - (0x3A3, 'M', u'σ'), - (0x3A4, 'M', u'τ'), - (0x3A5, 'M', u'υ'), - (0x3A6, 'M', u'φ'), - (0x3A7, 'M', u'χ'), - (0x3A8, 'M', u'ψ'), - (0x3A9, 'M', u'ω'), - (0x3AA, 'M', u'ϊ'), - (0x3AB, 'M', u'ϋ'), - (0x3AC, 'V'), - (0x3C2, 'D', u'σ'), - (0x3C3, 'V'), - (0x3CF, 'M', u'ϗ'), - (0x3D0, 'M', u'β'), - (0x3D1, 'M', u'θ'), - (0x3D2, 'M', u'υ'), - (0x3D3, 'M', u'ύ'), - (0x3D4, 'M', u'ϋ'), - (0x3D5, 'M', u'φ'), - (0x3D6, 'M', u'π'), - (0x3D7, 'V'), - (0x3D8, 'M', u'ϙ'), - (0x3D9, 'V'), - (0x3DA, 'M', u'ϛ'), - (0x3DB, 'V'), - (0x3DC, 'M', u'ϝ'), - (0x3DD, 'V'), - (0x3DE, 'M', u'ϟ'), - (0x3DF, 'V'), - (0x3E0, 'M', u'ϡ'), - (0x3E1, 'V'), - (0x3E2, 'M', u'ϣ'), - (0x3E3, 'V'), - (0x3E4, 'M', u'ϥ'), - (0x3E5, 'V'), - (0x3E6, 'M', u'ϧ'), - (0x3E7, 'V'), - (0x3E8, 'M', u'ϩ'), - (0x3E9, 'V'), - (0x3EA, 'M', u'ϫ'), - (0x3EB, 'V'), - (0x3EC, 'M', u'ϭ'), - (0x3ED, 'V'), - (0x3EE, 'M', u'ϯ'), - (0x3EF, 'V'), - (0x3F0, 'M', u'κ'), - (0x3F1, 'M', u'ρ'), - (0x3F2, 'M', u'σ'), - (0x3F3, 'V'), - (0x3F4, 'M', u'θ'), - (0x3F5, 'M', u'ε'), - (0x3F6, 'V'), - (0x3F7, 'M', u'ϸ'), - (0x3F8, 'V'), - (0x3F9, 'M', u'σ'), - (0x3FA, 'M', u'ϻ'), - (0x3FB, 'V'), - (0x3FD, 'M', u'ͻ'), - (0x3FE, 'M', u'ͼ'), - (0x3FF, 'M', u'ͽ'), - (0x400, 'M', u'ѐ'), - (0x401, 'M', u'ё'), - (0x402, 'M', u'ђ'), - (0x403, 'M', u'ѓ'), - ] - -def _seg_7(): - return [ - (0x404, 'M', u'є'), - (0x405, 'M', u'ѕ'), - (0x406, 'M', u'і'), - (0x407, 'M', u'ї'), - (0x408, 'M', u'ј'), - (0x409, 'M', u'љ'), - (0x40A, 'M', u'њ'), - (0x40B, 'M', u'ћ'), - (0x40C, 'M', u'ќ'), - (0x40D, 'M', u'ѝ'), - (0x40E, 'M', u'ў'), - (0x40F, 'M', u'џ'), - (0x410, 'M', u'а'), - (0x411, 'M', u'б'), - (0x412, 'M', u'в'), - (0x413, 'M', u'г'), - (0x414, 'M', u'д'), - (0x415, 'M', u'е'), - (0x416, 'M', u'ж'), - (0x417, 'M', u'з'), - (0x418, 'M', u'и'), - (0x419, 'M', u'й'), - (0x41A, 'M', u'к'), - (0x41B, 'M', u'л'), - (0x41C, 'M', u'м'), - (0x41D, 'M', u'н'), - (0x41E, 'M', u'о'), - (0x41F, 'M', u'п'), - (0x420, 'M', u'р'), - (0x421, 'M', u'с'), - (0x422, 'M', u'т'), - (0x423, 'M', u'у'), - (0x424, 'M', u'ф'), - (0x425, 'M', u'х'), - (0x426, 'M', u'ц'), - (0x427, 'M', u'ч'), - (0x428, 'M', u'ш'), - (0x429, 'M', u'щ'), - (0x42A, 'M', u'ъ'), - (0x42B, 'M', u'ы'), - (0x42C, 'M', u'ь'), - (0x42D, 'M', u'э'), - (0x42E, 'M', u'ю'), - (0x42F, 'M', u'я'), - (0x430, 'V'), - (0x460, 'M', u'ѡ'), - (0x461, 'V'), - (0x462, 'M', u'ѣ'), - (0x463, 'V'), - (0x464, 'M', u'ѥ'), - (0x465, 'V'), - (0x466, 'M', u'ѧ'), - (0x467, 'V'), - (0x468, 'M', u'ѩ'), - (0x469, 'V'), - (0x46A, 'M', u'ѫ'), - (0x46B, 'V'), - (0x46C, 'M', u'ѭ'), - (0x46D, 'V'), - (0x46E, 'M', u'ѯ'), - (0x46F, 'V'), - (0x470, 'M', u'ѱ'), - (0x471, 'V'), - (0x472, 'M', u'ѳ'), - (0x473, 'V'), - (0x474, 'M', u'ѵ'), - (0x475, 'V'), - (0x476, 'M', u'ѷ'), - (0x477, 'V'), - (0x478, 'M', u'ѹ'), - (0x479, 'V'), - (0x47A, 'M', u'ѻ'), - (0x47B, 'V'), - (0x47C, 'M', u'ѽ'), - (0x47D, 'V'), - (0x47E, 'M', u'ѿ'), - (0x47F, 'V'), - (0x480, 'M', u'ҁ'), - (0x481, 'V'), - (0x48A, 'M', u'ҋ'), - (0x48B, 'V'), - (0x48C, 'M', u'ҍ'), - (0x48D, 'V'), - (0x48E, 'M', u'ҏ'), - (0x48F, 'V'), - (0x490, 'M', u'ґ'), - (0x491, 'V'), - (0x492, 'M', u'ғ'), - (0x493, 'V'), - (0x494, 'M', u'ҕ'), - (0x495, 'V'), - (0x496, 'M', u'җ'), - (0x497, 'V'), - (0x498, 'M', u'ҙ'), - (0x499, 'V'), - (0x49A, 'M', u'қ'), - (0x49B, 'V'), - (0x49C, 'M', u'ҝ'), - (0x49D, 'V'), - (0x49E, 'M', u'ҟ'), - ] - -def _seg_8(): - return [ - (0x49F, 'V'), - (0x4A0, 'M', u'ҡ'), - (0x4A1, 'V'), - (0x4A2, 'M', u'ң'), - (0x4A3, 'V'), - (0x4A4, 'M', u'ҥ'), - (0x4A5, 'V'), - (0x4A6, 'M', u'ҧ'), - (0x4A7, 'V'), - (0x4A8, 'M', u'ҩ'), - (0x4A9, 'V'), - (0x4AA, 'M', u'ҫ'), - (0x4AB, 'V'), - (0x4AC, 'M', u'ҭ'), - (0x4AD, 'V'), - (0x4AE, 'M', u'ү'), - (0x4AF, 'V'), - (0x4B0, 'M', u'ұ'), - (0x4B1, 'V'), - (0x4B2, 'M', u'ҳ'), - (0x4B3, 'V'), - (0x4B4, 'M', u'ҵ'), - (0x4B5, 'V'), - (0x4B6, 'M', u'ҷ'), - (0x4B7, 'V'), - (0x4B8, 'M', u'ҹ'), - (0x4B9, 'V'), - (0x4BA, 'M', u'һ'), - (0x4BB, 'V'), - (0x4BC, 'M', u'ҽ'), - (0x4BD, 'V'), - (0x4BE, 'M', u'ҿ'), - (0x4BF, 'V'), - (0x4C0, 'X'), - (0x4C1, 'M', u'ӂ'), - (0x4C2, 'V'), - (0x4C3, 'M', u'ӄ'), - (0x4C4, 'V'), - (0x4C5, 'M', u'ӆ'), - (0x4C6, 'V'), - (0x4C7, 'M', u'ӈ'), - (0x4C8, 'V'), - (0x4C9, 'M', u'ӊ'), - (0x4CA, 'V'), - (0x4CB, 'M', u'ӌ'), - (0x4CC, 'V'), - (0x4CD, 'M', u'ӎ'), - (0x4CE, 'V'), - (0x4D0, 'M', u'ӑ'), - (0x4D1, 'V'), - (0x4D2, 'M', u'ӓ'), - (0x4D3, 'V'), - (0x4D4, 'M', u'ӕ'), - (0x4D5, 'V'), - (0x4D6, 'M', u'ӗ'), - (0x4D7, 'V'), - (0x4D8, 'M', u'ә'), - (0x4D9, 'V'), - (0x4DA, 'M', u'ӛ'), - (0x4DB, 'V'), - (0x4DC, 'M', u'ӝ'), - (0x4DD, 'V'), - (0x4DE, 'M', u'ӟ'), - (0x4DF, 'V'), - (0x4E0, 'M', u'ӡ'), - (0x4E1, 'V'), - (0x4E2, 'M', u'ӣ'), - (0x4E3, 'V'), - (0x4E4, 'M', u'ӥ'), - (0x4E5, 'V'), - (0x4E6, 'M', u'ӧ'), - (0x4E7, 'V'), - (0x4E8, 'M', u'ө'), - (0x4E9, 'V'), - (0x4EA, 'M', u'ӫ'), - (0x4EB, 'V'), - (0x4EC, 'M', u'ӭ'), - (0x4ED, 'V'), - (0x4EE, 'M', u'ӯ'), - (0x4EF, 'V'), - (0x4F0, 'M', u'ӱ'), - (0x4F1, 'V'), - (0x4F2, 'M', u'ӳ'), - (0x4F3, 'V'), - (0x4F4, 'M', u'ӵ'), - (0x4F5, 'V'), - (0x4F6, 'M', u'ӷ'), - (0x4F7, 'V'), - (0x4F8, 'M', u'ӹ'), - (0x4F9, 'V'), - (0x4FA, 'M', u'ӻ'), - (0x4FB, 'V'), - (0x4FC, 'M', u'ӽ'), - (0x4FD, 'V'), - (0x4FE, 'M', u'ӿ'), - (0x4FF, 'V'), - (0x500, 'M', u'ԁ'), - (0x501, 'V'), - (0x502, 'M', u'ԃ'), - (0x503, 'V'), - ] - -def _seg_9(): - return [ - (0x504, 'M', u'ԅ'), - (0x505, 'V'), - (0x506, 'M', u'ԇ'), - (0x507, 'V'), - (0x508, 'M', u'ԉ'), - (0x509, 'V'), - (0x50A, 'M', u'ԋ'), - (0x50B, 'V'), - (0x50C, 'M', u'ԍ'), - (0x50D, 'V'), - (0x50E, 'M', u'ԏ'), - (0x50F, 'V'), - (0x510, 'M', u'ԑ'), - (0x511, 'V'), - (0x512, 'M', u'ԓ'), - (0x513, 'V'), - (0x514, 'M', u'ԕ'), - (0x515, 'V'), - (0x516, 'M', u'ԗ'), - (0x517, 'V'), - (0x518, 'M', u'ԙ'), - (0x519, 'V'), - (0x51A, 'M', u'ԛ'), - (0x51B, 'V'), - (0x51C, 'M', u'ԝ'), - (0x51D, 'V'), - (0x51E, 'M', u'ԟ'), - (0x51F, 'V'), - (0x520, 'M', u'ԡ'), - (0x521, 'V'), - (0x522, 'M', u'ԣ'), - (0x523, 'V'), - (0x524, 'M', u'ԥ'), - (0x525, 'V'), - (0x526, 'M', u'ԧ'), - (0x527, 'V'), - (0x528, 'X'), - (0x531, 'M', u'ա'), - (0x532, 'M', u'բ'), - (0x533, 'M', u'գ'), - (0x534, 'M', u'դ'), - (0x535, 'M', u'ե'), - (0x536, 'M', u'զ'), - (0x537, 'M', u'է'), - (0x538, 'M', u'ը'), - (0x539, 'M', u'թ'), - (0x53A, 'M', u'ժ'), - (0x53B, 'M', u'ի'), - (0x53C, 'M', u'լ'), - (0x53D, 'M', u'խ'), - (0x53E, 'M', u'ծ'), - (0x53F, 'M', u'կ'), - (0x540, 'M', u'հ'), - (0x541, 'M', u'ձ'), - (0x542, 'M', u'ղ'), - (0x543, 'M', u'ճ'), - (0x544, 'M', u'մ'), - (0x545, 'M', u'յ'), - (0x546, 'M', u'ն'), - (0x547, 'M', u'շ'), - (0x548, 'M', u'ո'), - (0x549, 'M', u'չ'), - (0x54A, 'M', u'պ'), - (0x54B, 'M', u'ջ'), - (0x54C, 'M', u'ռ'), - (0x54D, 'M', u'ս'), - (0x54E, 'M', u'վ'), - (0x54F, 'M', u'տ'), - (0x550, 'M', u'ր'), - (0x551, 'M', u'ց'), - (0x552, 'M', u'ւ'), - (0x553, 'M', u'փ'), - (0x554, 'M', u'ք'), - (0x555, 'M', u'օ'), - (0x556, 'M', u'ֆ'), - (0x557, 'X'), - (0x559, 'V'), - (0x560, 'X'), - (0x561, 'V'), - (0x587, 'M', u'եւ'), - (0x588, 'X'), - (0x589, 'V'), - (0x58B, 'X'), - (0x58F, 'V'), - (0x590, 'X'), - (0x591, 'V'), - (0x5C8, 'X'), - (0x5D0, 'V'), - (0x5EB, 'X'), - (0x5F0, 'V'), - (0x5F5, 'X'), - (0x606, 'V'), - (0x61C, 'X'), - (0x61E, 'V'), - (0x675, 'M', u'اٴ'), - (0x676, 'M', u'وٴ'), - (0x677, 'M', u'ۇٴ'), - (0x678, 'M', u'يٴ'), - (0x679, 'V'), - (0x6DD, 'X'), - ] - -def _seg_10(): - return [ - (0x6DE, 'V'), - (0x70E, 'X'), - (0x710, 'V'), - (0x74B, 'X'), - (0x74D, 'V'), - (0x7B2, 'X'), - (0x7C0, 'V'), - (0x7FB, 'X'), - (0x800, 'V'), - (0x82E, 'X'), - (0x830, 'V'), - (0x83F, 'X'), - (0x840, 'V'), - (0x85C, 'X'), - (0x85E, 'V'), - (0x85F, 'X'), - (0x8A0, 'V'), - (0x8A1, 'X'), - (0x8A2, 'V'), - (0x8AD, 'X'), - (0x8E4, 'V'), - (0x8FF, 'X'), - (0x900, 'V'), - (0x958, 'M', u'क़'), - (0x959, 'M', u'ख़'), - (0x95A, 'M', u'ग़'), - (0x95B, 'M', u'ज़'), - (0x95C, 'M', u'ड़'), - (0x95D, 'M', u'ढ़'), - (0x95E, 'M', u'फ़'), - (0x95F, 'M', u'य़'), - (0x960, 'V'), - (0x978, 'X'), - (0x979, 'V'), - (0x980, 'X'), - (0x981, 'V'), - (0x984, 'X'), - (0x985, 'V'), - (0x98D, 'X'), - (0x98F, 'V'), - (0x991, 'X'), - (0x993, 'V'), - (0x9A9, 'X'), - (0x9AA, 'V'), - (0x9B1, 'X'), - (0x9B2, 'V'), - (0x9B3, 'X'), - (0x9B6, 'V'), - (0x9BA, 'X'), - (0x9BC, 'V'), - (0x9C5, 'X'), - (0x9C7, 'V'), - (0x9C9, 'X'), - (0x9CB, 'V'), - (0x9CF, 'X'), - (0x9D7, 'V'), - (0x9D8, 'X'), - (0x9DC, 'M', u'ড়'), - (0x9DD, 'M', u'ঢ়'), - (0x9DE, 'X'), - (0x9DF, 'M', u'য়'), - (0x9E0, 'V'), - (0x9E4, 'X'), - (0x9E6, 'V'), - (0x9FC, 'X'), - (0xA01, 'V'), - (0xA04, 'X'), - (0xA05, 'V'), - (0xA0B, 'X'), - (0xA0F, 'V'), - (0xA11, 'X'), - (0xA13, 'V'), - (0xA29, 'X'), - (0xA2A, 'V'), - (0xA31, 'X'), - (0xA32, 'V'), - (0xA33, 'M', u'ਲ਼'), - (0xA34, 'X'), - (0xA35, 'V'), - (0xA36, 'M', u'ਸ਼'), - (0xA37, 'X'), - (0xA38, 'V'), - (0xA3A, 'X'), - (0xA3C, 'V'), - (0xA3D, 'X'), - (0xA3E, 'V'), - (0xA43, 'X'), - (0xA47, 'V'), - (0xA49, 'X'), - (0xA4B, 'V'), - (0xA4E, 'X'), - (0xA51, 'V'), - (0xA52, 'X'), - (0xA59, 'M', u'ਖ਼'), - (0xA5A, 'M', u'ਗ਼'), - (0xA5B, 'M', u'ਜ਼'), - (0xA5C, 'V'), - (0xA5D, 'X'), - (0xA5E, 'M', u'ਫ਼'), - (0xA5F, 'X'), - ] - -def _seg_11(): - return [ - (0xA66, 'V'), - (0xA76, 'X'), - (0xA81, 'V'), - (0xA84, 'X'), - (0xA85, 'V'), - (0xA8E, 'X'), - (0xA8F, 'V'), - (0xA92, 'X'), - (0xA93, 'V'), - (0xAA9, 'X'), - (0xAAA, 'V'), - (0xAB1, 'X'), - (0xAB2, 'V'), - (0xAB4, 'X'), - (0xAB5, 'V'), - (0xABA, 'X'), - (0xABC, 'V'), - (0xAC6, 'X'), - (0xAC7, 'V'), - (0xACA, 'X'), - (0xACB, 'V'), - (0xACE, 'X'), - (0xAD0, 'V'), - (0xAD1, 'X'), - (0xAE0, 'V'), - (0xAE4, 'X'), - (0xAE6, 'V'), - (0xAF2, 'X'), - (0xB01, 'V'), - (0xB04, 'X'), - (0xB05, 'V'), - (0xB0D, 'X'), - (0xB0F, 'V'), - (0xB11, 'X'), - (0xB13, 'V'), - (0xB29, 'X'), - (0xB2A, 'V'), - (0xB31, 'X'), - (0xB32, 'V'), - (0xB34, 'X'), - (0xB35, 'V'), - (0xB3A, 'X'), - (0xB3C, 'V'), - (0xB45, 'X'), - (0xB47, 'V'), - (0xB49, 'X'), - (0xB4B, 'V'), - (0xB4E, 'X'), - (0xB56, 'V'), - (0xB58, 'X'), - (0xB5C, 'M', u'ଡ଼'), - (0xB5D, 'M', u'ଢ଼'), - (0xB5E, 'X'), - (0xB5F, 'V'), - (0xB64, 'X'), - (0xB66, 'V'), - (0xB78, 'X'), - (0xB82, 'V'), - (0xB84, 'X'), - (0xB85, 'V'), - (0xB8B, 'X'), - (0xB8E, 'V'), - (0xB91, 'X'), - (0xB92, 'V'), - (0xB96, 'X'), - (0xB99, 'V'), - (0xB9B, 'X'), - (0xB9C, 'V'), - (0xB9D, 'X'), - (0xB9E, 'V'), - (0xBA0, 'X'), - (0xBA3, 'V'), - (0xBA5, 'X'), - (0xBA8, 'V'), - (0xBAB, 'X'), - (0xBAE, 'V'), - (0xBBA, 'X'), - (0xBBE, 'V'), - (0xBC3, 'X'), - (0xBC6, 'V'), - (0xBC9, 'X'), - (0xBCA, 'V'), - (0xBCE, 'X'), - (0xBD0, 'V'), - (0xBD1, 'X'), - (0xBD7, 'V'), - (0xBD8, 'X'), - (0xBE6, 'V'), - (0xBFB, 'X'), - (0xC01, 'V'), - (0xC04, 'X'), - (0xC05, 'V'), - (0xC0D, 'X'), - (0xC0E, 'V'), - (0xC11, 'X'), - (0xC12, 'V'), - (0xC29, 'X'), - (0xC2A, 'V'), - (0xC34, 'X'), - (0xC35, 'V'), - ] - -def _seg_12(): - return [ - (0xC3A, 'X'), - (0xC3D, 'V'), - (0xC45, 'X'), - (0xC46, 'V'), - (0xC49, 'X'), - (0xC4A, 'V'), - (0xC4E, 'X'), - (0xC55, 'V'), - (0xC57, 'X'), - (0xC58, 'V'), - (0xC5A, 'X'), - (0xC60, 'V'), - (0xC64, 'X'), - (0xC66, 'V'), - (0xC70, 'X'), - (0xC78, 'V'), - (0xC80, 'X'), - (0xC82, 'V'), - (0xC84, 'X'), - (0xC85, 'V'), - (0xC8D, 'X'), - (0xC8E, 'V'), - (0xC91, 'X'), - (0xC92, 'V'), - (0xCA9, 'X'), - (0xCAA, 'V'), - (0xCB4, 'X'), - (0xCB5, 'V'), - (0xCBA, 'X'), - (0xCBC, 'V'), - (0xCC5, 'X'), - (0xCC6, 'V'), - (0xCC9, 'X'), - (0xCCA, 'V'), - (0xCCE, 'X'), - (0xCD5, 'V'), - (0xCD7, 'X'), - (0xCDE, 'V'), - (0xCDF, 'X'), - (0xCE0, 'V'), - (0xCE4, 'X'), - (0xCE6, 'V'), - (0xCF0, 'X'), - (0xCF1, 'V'), - (0xCF3, 'X'), - (0xD02, 'V'), - (0xD04, 'X'), - (0xD05, 'V'), - (0xD0D, 'X'), - (0xD0E, 'V'), - (0xD11, 'X'), - (0xD12, 'V'), - (0xD3B, 'X'), - (0xD3D, 'V'), - (0xD45, 'X'), - (0xD46, 'V'), - (0xD49, 'X'), - (0xD4A, 'V'), - (0xD4F, 'X'), - (0xD57, 'V'), - (0xD58, 'X'), - (0xD60, 'V'), - (0xD64, 'X'), - (0xD66, 'V'), - (0xD76, 'X'), - (0xD79, 'V'), - (0xD80, 'X'), - (0xD82, 'V'), - (0xD84, 'X'), - (0xD85, 'V'), - (0xD97, 'X'), - (0xD9A, 'V'), - (0xDB2, 'X'), - (0xDB3, 'V'), - (0xDBC, 'X'), - (0xDBD, 'V'), - (0xDBE, 'X'), - (0xDC0, 'V'), - (0xDC7, 'X'), - (0xDCA, 'V'), - (0xDCB, 'X'), - (0xDCF, 'V'), - (0xDD5, 'X'), - (0xDD6, 'V'), - (0xDD7, 'X'), - (0xDD8, 'V'), - (0xDE0, 'X'), - (0xDF2, 'V'), - (0xDF5, 'X'), - (0xE01, 'V'), - (0xE33, 'M', u'ํา'), - (0xE34, 'V'), - (0xE3B, 'X'), - (0xE3F, 'V'), - (0xE5C, 'X'), - (0xE81, 'V'), - (0xE83, 'X'), - (0xE84, 'V'), - (0xE85, 'X'), - (0xE87, 'V'), - ] - -def _seg_13(): - return [ - (0xE89, 'X'), - (0xE8A, 'V'), - (0xE8B, 'X'), - (0xE8D, 'V'), - (0xE8E, 'X'), - (0xE94, 'V'), - (0xE98, 'X'), - (0xE99, 'V'), - (0xEA0, 'X'), - (0xEA1, 'V'), - (0xEA4, 'X'), - (0xEA5, 'V'), - (0xEA6, 'X'), - (0xEA7, 'V'), - (0xEA8, 'X'), - (0xEAA, 'V'), - (0xEAC, 'X'), - (0xEAD, 'V'), - (0xEB3, 'M', u'ໍາ'), - (0xEB4, 'V'), - (0xEBA, 'X'), - (0xEBB, 'V'), - (0xEBE, 'X'), - (0xEC0, 'V'), - (0xEC5, 'X'), - (0xEC6, 'V'), - (0xEC7, 'X'), - (0xEC8, 'V'), - (0xECE, 'X'), - (0xED0, 'V'), - (0xEDA, 'X'), - (0xEDC, 'M', u'ຫນ'), - (0xEDD, 'M', u'ຫມ'), - (0xEDE, 'V'), - (0xEE0, 'X'), - (0xF00, 'V'), - (0xF0C, 'M', u'་'), - (0xF0D, 'V'), - (0xF43, 'M', u'གྷ'), - (0xF44, 'V'), - (0xF48, 'X'), - (0xF49, 'V'), - (0xF4D, 'M', u'ཌྷ'), - (0xF4E, 'V'), - (0xF52, 'M', u'དྷ'), - (0xF53, 'V'), - (0xF57, 'M', u'བྷ'), - (0xF58, 'V'), - (0xF5C, 'M', u'ཛྷ'), - (0xF5D, 'V'), - (0xF69, 'M', u'ཀྵ'), - (0xF6A, 'V'), - (0xF6D, 'X'), - (0xF71, 'V'), - (0xF73, 'M', u'ཱི'), - (0xF74, 'V'), - (0xF75, 'M', u'ཱུ'), - (0xF76, 'M', u'ྲྀ'), - (0xF77, 'M', u'ྲཱྀ'), - (0xF78, 'M', u'ླྀ'), - (0xF79, 'M', u'ླཱྀ'), - (0xF7A, 'V'), - (0xF81, 'M', u'ཱྀ'), - (0xF82, 'V'), - (0xF93, 'M', u'ྒྷ'), - (0xF94, 'V'), - (0xF98, 'X'), - (0xF99, 'V'), - (0xF9D, 'M', u'ྜྷ'), - (0xF9E, 'V'), - (0xFA2, 'M', u'ྡྷ'), - (0xFA3, 'V'), - (0xFA7, 'M', u'ྦྷ'), - (0xFA8, 'V'), - (0xFAC, 'M', u'ྫྷ'), - (0xFAD, 'V'), - (0xFB9, 'M', u'ྐྵ'), - (0xFBA, 'V'), - (0xFBD, 'X'), - (0xFBE, 'V'), - (0xFCD, 'X'), - (0xFCE, 'V'), - (0xFDB, 'X'), - (0x1000, 'V'), - (0x10A0, 'X'), - (0x10C7, 'M', u'ⴧ'), - (0x10C8, 'X'), - (0x10CD, 'M', u'ⴭ'), - (0x10CE, 'X'), - (0x10D0, 'V'), - (0x10FC, 'M', u'ნ'), - (0x10FD, 'V'), - (0x115F, 'X'), - (0x1161, 'V'), - (0x1249, 'X'), - (0x124A, 'V'), - (0x124E, 'X'), - (0x1250, 'V'), - (0x1257, 'X'), - (0x1258, 'V'), - ] - -def _seg_14(): - return [ - (0x1259, 'X'), - (0x125A, 'V'), - (0x125E, 'X'), - (0x1260, 'V'), - (0x1289, 'X'), - (0x128A, 'V'), - (0x128E, 'X'), - (0x1290, 'V'), - (0x12B1, 'X'), - (0x12B2, 'V'), - (0x12B6, 'X'), - (0x12B8, 'V'), - (0x12BF, 'X'), - (0x12C0, 'V'), - (0x12C1, 'X'), - (0x12C2, 'V'), - (0x12C6, 'X'), - (0x12C8, 'V'), - (0x12D7, 'X'), - (0x12D8, 'V'), - (0x1311, 'X'), - (0x1312, 'V'), - (0x1316, 'X'), - (0x1318, 'V'), - (0x135B, 'X'), - (0x135D, 'V'), - (0x137D, 'X'), - (0x1380, 'V'), - (0x139A, 'X'), - (0x13A0, 'V'), - (0x13F5, 'X'), - (0x1400, 'V'), - (0x1680, 'X'), - (0x1681, 'V'), - (0x169D, 'X'), - (0x16A0, 'V'), - (0x16F1, 'X'), - (0x1700, 'V'), - (0x170D, 'X'), - (0x170E, 'V'), - (0x1715, 'X'), - (0x1720, 'V'), - (0x1737, 'X'), - (0x1740, 'V'), - (0x1754, 'X'), - (0x1760, 'V'), - (0x176D, 'X'), - (0x176E, 'V'), - (0x1771, 'X'), - (0x1772, 'V'), - (0x1774, 'X'), - (0x1780, 'V'), - (0x17B4, 'X'), - (0x17B6, 'V'), - (0x17DE, 'X'), - (0x17E0, 'V'), - (0x17EA, 'X'), - (0x17F0, 'V'), - (0x17FA, 'X'), - (0x1800, 'V'), - (0x1806, 'X'), - (0x1807, 'V'), - (0x180B, 'I'), - (0x180E, 'X'), - (0x1810, 'V'), - (0x181A, 'X'), - (0x1820, 'V'), - (0x1878, 'X'), - (0x1880, 'V'), - (0x18AB, 'X'), - (0x18B0, 'V'), - (0x18F6, 'X'), - (0x1900, 'V'), - (0x191D, 'X'), - (0x1920, 'V'), - (0x192C, 'X'), - (0x1930, 'V'), - (0x193C, 'X'), - (0x1940, 'V'), - (0x1941, 'X'), - (0x1944, 'V'), - (0x196E, 'X'), - (0x1970, 'V'), - (0x1975, 'X'), - (0x1980, 'V'), - (0x19AC, 'X'), - (0x19B0, 'V'), - (0x19CA, 'X'), - (0x19D0, 'V'), - (0x19DB, 'X'), - (0x19DE, 'V'), - (0x1A1C, 'X'), - (0x1A1E, 'V'), - (0x1A5F, 'X'), - (0x1A60, 'V'), - (0x1A7D, 'X'), - (0x1A7F, 'V'), - (0x1A8A, 'X'), - (0x1A90, 'V'), - (0x1A9A, 'X'), - ] - -def _seg_15(): - return [ - (0x1AA0, 'V'), - (0x1AAE, 'X'), - (0x1B00, 'V'), - (0x1B4C, 'X'), - (0x1B50, 'V'), - (0x1B7D, 'X'), - (0x1B80, 'V'), - (0x1BF4, 'X'), - (0x1BFC, 'V'), - (0x1C38, 'X'), - (0x1C3B, 'V'), - (0x1C4A, 'X'), - (0x1C4D, 'V'), - (0x1C80, 'X'), - (0x1CC0, 'V'), - (0x1CC8, 'X'), - (0x1CD0, 'V'), - (0x1CF7, 'X'), - (0x1D00, 'V'), - (0x1D2C, 'M', u'a'), - (0x1D2D, 'M', u'æ'), - (0x1D2E, 'M', u'b'), - (0x1D2F, 'V'), - (0x1D30, 'M', u'd'), - (0x1D31, 'M', u'e'), - (0x1D32, 'M', u'ǝ'), - (0x1D33, 'M', u'g'), - (0x1D34, 'M', u'h'), - (0x1D35, 'M', u'i'), - (0x1D36, 'M', u'j'), - (0x1D37, 'M', u'k'), - (0x1D38, 'M', u'l'), - (0x1D39, 'M', u'm'), - (0x1D3A, 'M', u'n'), - (0x1D3B, 'V'), - (0x1D3C, 'M', u'o'), - (0x1D3D, 'M', u'ȣ'), - (0x1D3E, 'M', u'p'), - (0x1D3F, 'M', u'r'), - (0x1D40, 'M', u't'), - (0x1D41, 'M', u'u'), - (0x1D42, 'M', u'w'), - (0x1D43, 'M', u'a'), - (0x1D44, 'M', u'ɐ'), - (0x1D45, 'M', u'ɑ'), - (0x1D46, 'M', u'ᴂ'), - (0x1D47, 'M', u'b'), - (0x1D48, 'M', u'd'), - (0x1D49, 'M', u'e'), - (0x1D4A, 'M', u'ə'), - (0x1D4B, 'M', u'ɛ'), - (0x1D4C, 'M', u'ɜ'), - (0x1D4D, 'M', u'g'), - (0x1D4E, 'V'), - (0x1D4F, 'M', u'k'), - (0x1D50, 'M', u'm'), - (0x1D51, 'M', u'ŋ'), - (0x1D52, 'M', u'o'), - (0x1D53, 'M', u'ɔ'), - (0x1D54, 'M', u'ᴖ'), - (0x1D55, 'M', u'ᴗ'), - (0x1D56, 'M', u'p'), - (0x1D57, 'M', u't'), - (0x1D58, 'M', u'u'), - (0x1D59, 'M', u'ᴝ'), - (0x1D5A, 'M', u'ɯ'), - (0x1D5B, 'M', u'v'), - (0x1D5C, 'M', u'ᴥ'), - (0x1D5D, 'M', u'β'), - (0x1D5E, 'M', u'γ'), - (0x1D5F, 'M', u'δ'), - (0x1D60, 'M', u'φ'), - (0x1D61, 'M', u'χ'), - (0x1D62, 'M', u'i'), - (0x1D63, 'M', u'r'), - (0x1D64, 'M', u'u'), - (0x1D65, 'M', u'v'), - (0x1D66, 'M', u'β'), - (0x1D67, 'M', u'γ'), - (0x1D68, 'M', u'ρ'), - (0x1D69, 'M', u'φ'), - (0x1D6A, 'M', u'χ'), - (0x1D6B, 'V'), - (0x1D78, 'M', u'н'), - (0x1D79, 'V'), - (0x1D9B, 'M', u'ɒ'), - (0x1D9C, 'M', u'c'), - (0x1D9D, 'M', u'ɕ'), - (0x1D9E, 'M', u'ð'), - (0x1D9F, 'M', u'ɜ'), - (0x1DA0, 'M', u'f'), - (0x1DA1, 'M', u'ɟ'), - (0x1DA2, 'M', u'ɡ'), - (0x1DA3, 'M', u'ɥ'), - (0x1DA4, 'M', u'ɨ'), - (0x1DA5, 'M', u'ɩ'), - (0x1DA6, 'M', u'ɪ'), - (0x1DA7, 'M', u'ᵻ'), - (0x1DA8, 'M', u'ʝ'), - (0x1DA9, 'M', u'ɭ'), - ] - -def _seg_16(): - return [ - (0x1DAA, 'M', u'ᶅ'), - (0x1DAB, 'M', u'ʟ'), - (0x1DAC, 'M', u'ɱ'), - (0x1DAD, 'M', u'ɰ'), - (0x1DAE, 'M', u'ɲ'), - (0x1DAF, 'M', u'ɳ'), - (0x1DB0, 'M', u'ɴ'), - (0x1DB1, 'M', u'ɵ'), - (0x1DB2, 'M', u'ɸ'), - (0x1DB3, 'M', u'ʂ'), - (0x1DB4, 'M', u'ʃ'), - (0x1DB5, 'M', u'ƫ'), - (0x1DB6, 'M', u'ʉ'), - (0x1DB7, 'M', u'ʊ'), - (0x1DB8, 'M', u'ᴜ'), - (0x1DB9, 'M', u'ʋ'), - (0x1DBA, 'M', u'ʌ'), - (0x1DBB, 'M', u'z'), - (0x1DBC, 'M', u'ʐ'), - (0x1DBD, 'M', u'ʑ'), - (0x1DBE, 'M', u'ʒ'), - (0x1DBF, 'M', u'θ'), - (0x1DC0, 'V'), - (0x1DE7, 'X'), - (0x1DFC, 'V'), - (0x1E00, 'M', u'ḁ'), - (0x1E01, 'V'), - (0x1E02, 'M', u'ḃ'), - (0x1E03, 'V'), - (0x1E04, 'M', u'ḅ'), - (0x1E05, 'V'), - (0x1E06, 'M', u'ḇ'), - (0x1E07, 'V'), - (0x1E08, 'M', u'ḉ'), - (0x1E09, 'V'), - (0x1E0A, 'M', u'ḋ'), - (0x1E0B, 'V'), - (0x1E0C, 'M', u'ḍ'), - (0x1E0D, 'V'), - (0x1E0E, 'M', u'ḏ'), - (0x1E0F, 'V'), - (0x1E10, 'M', u'ḑ'), - (0x1E11, 'V'), - (0x1E12, 'M', u'ḓ'), - (0x1E13, 'V'), - (0x1E14, 'M', u'ḕ'), - (0x1E15, 'V'), - (0x1E16, 'M', u'ḗ'), - (0x1E17, 'V'), - (0x1E18, 'M', u'ḙ'), - (0x1E19, 'V'), - (0x1E1A, 'M', u'ḛ'), - (0x1E1B, 'V'), - (0x1E1C, 'M', u'ḝ'), - (0x1E1D, 'V'), - (0x1E1E, 'M', u'ḟ'), - (0x1E1F, 'V'), - (0x1E20, 'M', u'ḡ'), - (0x1E21, 'V'), - (0x1E22, 'M', u'ḣ'), - (0x1E23, 'V'), - (0x1E24, 'M', u'ḥ'), - (0x1E25, 'V'), - (0x1E26, 'M', u'ḧ'), - (0x1E27, 'V'), - (0x1E28, 'M', u'ḩ'), - (0x1E29, 'V'), - (0x1E2A, 'M', u'ḫ'), - (0x1E2B, 'V'), - (0x1E2C, 'M', u'ḭ'), - (0x1E2D, 'V'), - (0x1E2E, 'M', u'ḯ'), - (0x1E2F, 'V'), - (0x1E30, 'M', u'ḱ'), - (0x1E31, 'V'), - (0x1E32, 'M', u'ḳ'), - (0x1E33, 'V'), - (0x1E34, 'M', u'ḵ'), - (0x1E35, 'V'), - (0x1E36, 'M', u'ḷ'), - (0x1E37, 'V'), - (0x1E38, 'M', u'ḹ'), - (0x1E39, 'V'), - (0x1E3A, 'M', u'ḻ'), - (0x1E3B, 'V'), - (0x1E3C, 'M', u'ḽ'), - (0x1E3D, 'V'), - (0x1E3E, 'M', u'ḿ'), - (0x1E3F, 'V'), - (0x1E40, 'M', u'ṁ'), - (0x1E41, 'V'), - (0x1E42, 'M', u'ṃ'), - (0x1E43, 'V'), - (0x1E44, 'M', u'ṅ'), - (0x1E45, 'V'), - (0x1E46, 'M', u'ṇ'), - (0x1E47, 'V'), - (0x1E48, 'M', u'ṉ'), - (0x1E49, 'V'), - (0x1E4A, 'M', u'ṋ'), - ] - -def _seg_17(): - return [ - (0x1E4B, 'V'), - (0x1E4C, 'M', u'ṍ'), - (0x1E4D, 'V'), - (0x1E4E, 'M', u'ṏ'), - (0x1E4F, 'V'), - (0x1E50, 'M', u'ṑ'), - (0x1E51, 'V'), - (0x1E52, 'M', u'ṓ'), - (0x1E53, 'V'), - (0x1E54, 'M', u'ṕ'), - (0x1E55, 'V'), - (0x1E56, 'M', u'ṗ'), - (0x1E57, 'V'), - (0x1E58, 'M', u'ṙ'), - (0x1E59, 'V'), - (0x1E5A, 'M', u'ṛ'), - (0x1E5B, 'V'), - (0x1E5C, 'M', u'ṝ'), - (0x1E5D, 'V'), - (0x1E5E, 'M', u'ṟ'), - (0x1E5F, 'V'), - (0x1E60, 'M', u'ṡ'), - (0x1E61, 'V'), - (0x1E62, 'M', u'ṣ'), - (0x1E63, 'V'), - (0x1E64, 'M', u'ṥ'), - (0x1E65, 'V'), - (0x1E66, 'M', u'ṧ'), - (0x1E67, 'V'), - (0x1E68, 'M', u'ṩ'), - (0x1E69, 'V'), - (0x1E6A, 'M', u'ṫ'), - (0x1E6B, 'V'), - (0x1E6C, 'M', u'ṭ'), - (0x1E6D, 'V'), - (0x1E6E, 'M', u'ṯ'), - (0x1E6F, 'V'), - (0x1E70, 'M', u'ṱ'), - (0x1E71, 'V'), - (0x1E72, 'M', u'ṳ'), - (0x1E73, 'V'), - (0x1E74, 'M', u'ṵ'), - (0x1E75, 'V'), - (0x1E76, 'M', u'ṷ'), - (0x1E77, 'V'), - (0x1E78, 'M', u'ṹ'), - (0x1E79, 'V'), - (0x1E7A, 'M', u'ṻ'), - (0x1E7B, 'V'), - (0x1E7C, 'M', u'ṽ'), - (0x1E7D, 'V'), - (0x1E7E, 'M', u'ṿ'), - (0x1E7F, 'V'), - (0x1E80, 'M', u'ẁ'), - (0x1E81, 'V'), - (0x1E82, 'M', u'ẃ'), - (0x1E83, 'V'), - (0x1E84, 'M', u'ẅ'), - (0x1E85, 'V'), - (0x1E86, 'M', u'ẇ'), - (0x1E87, 'V'), - (0x1E88, 'M', u'ẉ'), - (0x1E89, 'V'), - (0x1E8A, 'M', u'ẋ'), - (0x1E8B, 'V'), - (0x1E8C, 'M', u'ẍ'), - (0x1E8D, 'V'), - (0x1E8E, 'M', u'ẏ'), - (0x1E8F, 'V'), - (0x1E90, 'M', u'ẑ'), - (0x1E91, 'V'), - (0x1E92, 'M', u'ẓ'), - (0x1E93, 'V'), - (0x1E94, 'M', u'ẕ'), - (0x1E95, 'V'), - (0x1E9A, 'M', u'aʾ'), - (0x1E9B, 'M', u'ṡ'), - (0x1E9C, 'V'), - (0x1E9E, 'M', u'ss'), - (0x1E9F, 'V'), - (0x1EA0, 'M', u'ạ'), - (0x1EA1, 'V'), - (0x1EA2, 'M', u'ả'), - (0x1EA3, 'V'), - (0x1EA4, 'M', u'ấ'), - (0x1EA5, 'V'), - (0x1EA6, 'M', u'ầ'), - (0x1EA7, 'V'), - (0x1EA8, 'M', u'ẩ'), - (0x1EA9, 'V'), - (0x1EAA, 'M', u'ẫ'), - (0x1EAB, 'V'), - (0x1EAC, 'M', u'ậ'), - (0x1EAD, 'V'), - (0x1EAE, 'M', u'ắ'), - (0x1EAF, 'V'), - (0x1EB0, 'M', u'ằ'), - (0x1EB1, 'V'), - (0x1EB2, 'M', u'ẳ'), - (0x1EB3, 'V'), - ] - -def _seg_18(): - return [ - (0x1EB4, 'M', u'ẵ'), - (0x1EB5, 'V'), - (0x1EB6, 'M', u'ặ'), - (0x1EB7, 'V'), - (0x1EB8, 'M', u'ẹ'), - (0x1EB9, 'V'), - (0x1EBA, 'M', u'ẻ'), - (0x1EBB, 'V'), - (0x1EBC, 'M', u'ẽ'), - (0x1EBD, 'V'), - (0x1EBE, 'M', u'ế'), - (0x1EBF, 'V'), - (0x1EC0, 'M', u'ề'), - (0x1EC1, 'V'), - (0x1EC2, 'M', u'ể'), - (0x1EC3, 'V'), - (0x1EC4, 'M', u'ễ'), - (0x1EC5, 'V'), - (0x1EC6, 'M', u'ệ'), - (0x1EC7, 'V'), - (0x1EC8, 'M', u'ỉ'), - (0x1EC9, 'V'), - (0x1ECA, 'M', u'ị'), - (0x1ECB, 'V'), - (0x1ECC, 'M', u'ọ'), - (0x1ECD, 'V'), - (0x1ECE, 'M', u'ỏ'), - (0x1ECF, 'V'), - (0x1ED0, 'M', u'ố'), - (0x1ED1, 'V'), - (0x1ED2, 'M', u'ồ'), - (0x1ED3, 'V'), - (0x1ED4, 'M', u'ổ'), - (0x1ED5, 'V'), - (0x1ED6, 'M', u'ỗ'), - (0x1ED7, 'V'), - (0x1ED8, 'M', u'ộ'), - (0x1ED9, 'V'), - (0x1EDA, 'M', u'ớ'), - (0x1EDB, 'V'), - (0x1EDC, 'M', u'ờ'), - (0x1EDD, 'V'), - (0x1EDE, 'M', u'ở'), - (0x1EDF, 'V'), - (0x1EE0, 'M', u'ỡ'), - (0x1EE1, 'V'), - (0x1EE2, 'M', u'ợ'), - (0x1EE3, 'V'), - (0x1EE4, 'M', u'ụ'), - (0x1EE5, 'V'), - (0x1EE6, 'M', u'ủ'), - (0x1EE7, 'V'), - (0x1EE8, 'M', u'ứ'), - (0x1EE9, 'V'), - (0x1EEA, 'M', u'ừ'), - (0x1EEB, 'V'), - (0x1EEC, 'M', u'ử'), - (0x1EED, 'V'), - (0x1EEE, 'M', u'ữ'), - (0x1EEF, 'V'), - (0x1EF0, 'M', u'ự'), - (0x1EF1, 'V'), - (0x1EF2, 'M', u'ỳ'), - (0x1EF3, 'V'), - (0x1EF4, 'M', u'ỵ'), - (0x1EF5, 'V'), - (0x1EF6, 'M', u'ỷ'), - (0x1EF7, 'V'), - (0x1EF8, 'M', u'ỹ'), - (0x1EF9, 'V'), - (0x1EFA, 'M', u'ỻ'), - (0x1EFB, 'V'), - (0x1EFC, 'M', u'ỽ'), - (0x1EFD, 'V'), - (0x1EFE, 'M', u'ỿ'), - (0x1EFF, 'V'), - (0x1F08, 'M', u'ἀ'), - (0x1F09, 'M', u'ἁ'), - (0x1F0A, 'M', u'ἂ'), - (0x1F0B, 'M', u'ἃ'), - (0x1F0C, 'M', u'ἄ'), - (0x1F0D, 'M', u'ἅ'), - (0x1F0E, 'M', u'ἆ'), - (0x1F0F, 'M', u'ἇ'), - (0x1F10, 'V'), - (0x1F16, 'X'), - (0x1F18, 'M', u'ἐ'), - (0x1F19, 'M', u'ἑ'), - (0x1F1A, 'M', u'ἒ'), - (0x1F1B, 'M', u'ἓ'), - (0x1F1C, 'M', u'ἔ'), - (0x1F1D, 'M', u'ἕ'), - (0x1F1E, 'X'), - (0x1F20, 'V'), - (0x1F28, 'M', u'ἠ'), - (0x1F29, 'M', u'ἡ'), - (0x1F2A, 'M', u'ἢ'), - (0x1F2B, 'M', u'ἣ'), - (0x1F2C, 'M', u'ἤ'), - (0x1F2D, 'M', u'ἥ'), - ] - -def _seg_19(): - return [ - (0x1F2E, 'M', u'ἦ'), - (0x1F2F, 'M', u'ἧ'), - (0x1F30, 'V'), - (0x1F38, 'M', u'ἰ'), - (0x1F39, 'M', u'ἱ'), - (0x1F3A, 'M', u'ἲ'), - (0x1F3B, 'M', u'ἳ'), - (0x1F3C, 'M', u'ἴ'), - (0x1F3D, 'M', u'ἵ'), - (0x1F3E, 'M', u'ἶ'), - (0x1F3F, 'M', u'ἷ'), - (0x1F40, 'V'), - (0x1F46, 'X'), - (0x1F48, 'M', u'ὀ'), - (0x1F49, 'M', u'ὁ'), - (0x1F4A, 'M', u'ὂ'), - (0x1F4B, 'M', u'ὃ'), - (0x1F4C, 'M', u'ὄ'), - (0x1F4D, 'M', u'ὅ'), - (0x1F4E, 'X'), - (0x1F50, 'V'), - (0x1F58, 'X'), - (0x1F59, 'M', u'ὑ'), - (0x1F5A, 'X'), - (0x1F5B, 'M', u'ὓ'), - (0x1F5C, 'X'), - (0x1F5D, 'M', u'ὕ'), - (0x1F5E, 'X'), - (0x1F5F, 'M', u'ὗ'), - (0x1F60, 'V'), - (0x1F68, 'M', u'ὠ'), - (0x1F69, 'M', u'ὡ'), - (0x1F6A, 'M', u'ὢ'), - (0x1F6B, 'M', u'ὣ'), - (0x1F6C, 'M', u'ὤ'), - (0x1F6D, 'M', u'ὥ'), - (0x1F6E, 'M', u'ὦ'), - (0x1F6F, 'M', u'ὧ'), - (0x1F70, 'V'), - (0x1F71, 'M', u'ά'), - (0x1F72, 'V'), - (0x1F73, 'M', u'έ'), - (0x1F74, 'V'), - (0x1F75, 'M', u'ή'), - (0x1F76, 'V'), - (0x1F77, 'M', u'ί'), - (0x1F78, 'V'), - (0x1F79, 'M', u'ό'), - (0x1F7A, 'V'), - (0x1F7B, 'M', u'ύ'), - (0x1F7C, 'V'), - (0x1F7D, 'M', u'ώ'), - (0x1F7E, 'X'), - (0x1F80, 'M', u'ἀι'), - (0x1F81, 'M', u'ἁι'), - (0x1F82, 'M', u'ἂι'), - (0x1F83, 'M', u'ἃι'), - (0x1F84, 'M', u'ἄι'), - (0x1F85, 'M', u'ἅι'), - (0x1F86, 'M', u'ἆι'), - (0x1F87, 'M', u'ἇι'), - (0x1F88, 'M', u'ἀι'), - (0x1F89, 'M', u'ἁι'), - (0x1F8A, 'M', u'ἂι'), - (0x1F8B, 'M', u'ἃι'), - (0x1F8C, 'M', u'ἄι'), - (0x1F8D, 'M', u'ἅι'), - (0x1F8E, 'M', u'ἆι'), - (0x1F8F, 'M', u'ἇι'), - (0x1F90, 'M', u'ἠι'), - (0x1F91, 'M', u'ἡι'), - (0x1F92, 'M', u'ἢι'), - (0x1F93, 'M', u'ἣι'), - (0x1F94, 'M', u'ἤι'), - (0x1F95, 'M', u'ἥι'), - (0x1F96, 'M', u'ἦι'), - (0x1F97, 'M', u'ἧι'), - (0x1F98, 'M', u'ἠι'), - (0x1F99, 'M', u'ἡι'), - (0x1F9A, 'M', u'ἢι'), - (0x1F9B, 'M', u'ἣι'), - (0x1F9C, 'M', u'ἤι'), - (0x1F9D, 'M', u'ἥι'), - (0x1F9E, 'M', u'ἦι'), - (0x1F9F, 'M', u'ἧι'), - (0x1FA0, 'M', u'ὠι'), - (0x1FA1, 'M', u'ὡι'), - (0x1FA2, 'M', u'ὢι'), - (0x1FA3, 'M', u'ὣι'), - (0x1FA4, 'M', u'ὤι'), - (0x1FA5, 'M', u'ὥι'), - (0x1FA6, 'M', u'ὦι'), - (0x1FA7, 'M', u'ὧι'), - (0x1FA8, 'M', u'ὠι'), - (0x1FA9, 'M', u'ὡι'), - (0x1FAA, 'M', u'ὢι'), - (0x1FAB, 'M', u'ὣι'), - (0x1FAC, 'M', u'ὤι'), - (0x1FAD, 'M', u'ὥι'), - (0x1FAE, 'M', u'ὦι'), - ] - -def _seg_20(): - return [ - (0x1FAF, 'M', u'ὧι'), - (0x1FB0, 'V'), - (0x1FB2, 'M', u'ὰι'), - (0x1FB3, 'M', u'αι'), - (0x1FB4, 'M', u'άι'), - (0x1FB5, 'X'), - (0x1FB6, 'V'), - (0x1FB7, 'M', u'ᾶι'), - (0x1FB8, 'M', u'ᾰ'), - (0x1FB9, 'M', u'ᾱ'), - (0x1FBA, 'M', u'ὰ'), - (0x1FBB, 'M', u'ά'), - (0x1FBC, 'M', u'αι'), - (0x1FBD, '3', u' ̓'), - (0x1FBE, 'M', u'ι'), - (0x1FBF, '3', u' ̓'), - (0x1FC0, '3', u' ͂'), - (0x1FC1, '3', u' ̈͂'), - (0x1FC2, 'M', u'ὴι'), - (0x1FC3, 'M', u'ηι'), - (0x1FC4, 'M', u'ήι'), - (0x1FC5, 'X'), - (0x1FC6, 'V'), - (0x1FC7, 'M', u'ῆι'), - (0x1FC8, 'M', u'ὲ'), - (0x1FC9, 'M', u'έ'), - (0x1FCA, 'M', u'ὴ'), - (0x1FCB, 'M', u'ή'), - (0x1FCC, 'M', u'ηι'), - (0x1FCD, '3', u' ̓̀'), - (0x1FCE, '3', u' ̓́'), - (0x1FCF, '3', u' ̓͂'), - (0x1FD0, 'V'), - (0x1FD3, 'M', u'ΐ'), - (0x1FD4, 'X'), - (0x1FD6, 'V'), - (0x1FD8, 'M', u'ῐ'), - (0x1FD9, 'M', u'ῑ'), - (0x1FDA, 'M', u'ὶ'), - (0x1FDB, 'M', u'ί'), - (0x1FDC, 'X'), - (0x1FDD, '3', u' ̔̀'), - (0x1FDE, '3', u' ̔́'), - (0x1FDF, '3', u' ̔͂'), - (0x1FE0, 'V'), - (0x1FE3, 'M', u'ΰ'), - (0x1FE4, 'V'), - (0x1FE8, 'M', u'ῠ'), - (0x1FE9, 'M', u'ῡ'), - (0x1FEA, 'M', u'ὺ'), - (0x1FEB, 'M', u'ύ'), - (0x1FEC, 'M', u'ῥ'), - (0x1FED, '3', u' ̈̀'), - (0x1FEE, '3', u' ̈́'), - (0x1FEF, '3', u'`'), - (0x1FF0, 'X'), - (0x1FF2, 'M', u'ὼι'), - (0x1FF3, 'M', u'ωι'), - (0x1FF4, 'M', u'ώι'), - (0x1FF5, 'X'), - (0x1FF6, 'V'), - (0x1FF7, 'M', u'ῶι'), - (0x1FF8, 'M', u'ὸ'), - (0x1FF9, 'M', u'ό'), - (0x1FFA, 'M', u'ὼ'), - (0x1FFB, 'M', u'ώ'), - (0x1FFC, 'M', u'ωι'), - (0x1FFD, '3', u' ́'), - (0x1FFE, '3', u' ̔'), - (0x1FFF, 'X'), - (0x2000, '3', u' '), - (0x200B, 'I'), - (0x200C, 'D', u''), - (0x200E, 'X'), - (0x2010, 'V'), - (0x2011, 'M', u'‐'), - (0x2012, 'V'), - (0x2017, '3', u' ̳'), - (0x2018, 'V'), - (0x2024, 'X'), - (0x2027, 'V'), - (0x2028, 'X'), - (0x202F, '3', u' '), - (0x2030, 'V'), - (0x2033, 'M', u'′′'), - (0x2034, 'M', u'′′′'), - (0x2035, 'V'), - (0x2036, 'M', u'‵‵'), - (0x2037, 'M', u'‵‵‵'), - (0x2038, 'V'), - (0x203C, '3', u'!!'), - (0x203D, 'V'), - (0x203E, '3', u' ̅'), - (0x203F, 'V'), - (0x2047, '3', u'??'), - (0x2048, '3', u'?!'), - (0x2049, '3', u'!?'), - (0x204A, 'V'), - (0x2057, 'M', u'′′′′'), - (0x2058, 'V'), - ] - -def _seg_21(): - return [ - (0x205F, '3', u' '), - (0x2060, 'I'), - (0x2061, 'X'), - (0x2064, 'I'), - (0x2065, 'X'), - (0x2070, 'M', u'0'), - (0x2071, 'M', u'i'), - (0x2072, 'X'), - (0x2074, 'M', u'4'), - (0x2075, 'M', u'5'), - (0x2076, 'M', u'6'), - (0x2077, 'M', u'7'), - (0x2078, 'M', u'8'), - (0x2079, 'M', u'9'), - (0x207A, '3', u'+'), - (0x207B, 'M', u'−'), - (0x207C, '3', u'='), - (0x207D, '3', u'('), - (0x207E, '3', u')'), - (0x207F, 'M', u'n'), - (0x2080, 'M', u'0'), - (0x2081, 'M', u'1'), - (0x2082, 'M', u'2'), - (0x2083, 'M', u'3'), - (0x2084, 'M', u'4'), - (0x2085, 'M', u'5'), - (0x2086, 'M', u'6'), - (0x2087, 'M', u'7'), - (0x2088, 'M', u'8'), - (0x2089, 'M', u'9'), - (0x208A, '3', u'+'), - (0x208B, 'M', u'−'), - (0x208C, '3', u'='), - (0x208D, '3', u'('), - (0x208E, '3', u')'), - (0x208F, 'X'), - (0x2090, 'M', u'a'), - (0x2091, 'M', u'e'), - (0x2092, 'M', u'o'), - (0x2093, 'M', u'x'), - (0x2094, 'M', u'ə'), - (0x2095, 'M', u'h'), - (0x2096, 'M', u'k'), - (0x2097, 'M', u'l'), - (0x2098, 'M', u'm'), - (0x2099, 'M', u'n'), - (0x209A, 'M', u'p'), - (0x209B, 'M', u's'), - (0x209C, 'M', u't'), - (0x209D, 'X'), - (0x20A0, 'V'), - (0x20A8, 'M', u'rs'), - (0x20A9, 'V'), - (0x20BB, 'X'), - (0x20D0, 'V'), - (0x20F1, 'X'), - (0x2100, '3', u'a/c'), - (0x2101, '3', u'a/s'), - (0x2102, 'M', u'c'), - (0x2103, 'M', u'°c'), - (0x2104, 'V'), - (0x2105, '3', u'c/o'), - (0x2106, '3', u'c/u'), - (0x2107, 'M', u'ɛ'), - (0x2108, 'V'), - (0x2109, 'M', u'°f'), - (0x210A, 'M', u'g'), - (0x210B, 'M', u'h'), - (0x210F, 'M', u'ħ'), - (0x2110, 'M', u'i'), - (0x2112, 'M', u'l'), - (0x2114, 'V'), - (0x2115, 'M', u'n'), - (0x2116, 'M', u'no'), - (0x2117, 'V'), - (0x2119, 'M', u'p'), - (0x211A, 'M', u'q'), - (0x211B, 'M', u'r'), - (0x211E, 'V'), - (0x2120, 'M', u'sm'), - (0x2121, 'M', u'tel'), - (0x2122, 'M', u'tm'), - (0x2123, 'V'), - (0x2124, 'M', u'z'), - (0x2125, 'V'), - (0x2126, 'M', u'ω'), - (0x2127, 'V'), - (0x2128, 'M', u'z'), - (0x2129, 'V'), - (0x212A, 'M', u'k'), - (0x212B, 'M', u'å'), - (0x212C, 'M', u'b'), - (0x212D, 'M', u'c'), - (0x212E, 'V'), - (0x212F, 'M', u'e'), - (0x2131, 'M', u'f'), - (0x2132, 'X'), - (0x2133, 'M', u'm'), - (0x2134, 'M', u'o'), - (0x2135, 'M', u'א'), - ] - -def _seg_22(): - return [ - (0x2136, 'M', u'ב'), - (0x2137, 'M', u'ג'), - (0x2138, 'M', u'ד'), - (0x2139, 'M', u'i'), - (0x213A, 'V'), - (0x213B, 'M', u'fax'), - (0x213C, 'M', u'π'), - (0x213D, 'M', u'γ'), - (0x213F, 'M', u'π'), - (0x2140, 'M', u'∑'), - (0x2141, 'V'), - (0x2145, 'M', u'd'), - (0x2147, 'M', u'e'), - (0x2148, 'M', u'i'), - (0x2149, 'M', u'j'), - (0x214A, 'V'), - (0x2150, 'M', u'1⁄7'), - (0x2151, 'M', u'1⁄9'), - (0x2152, 'M', u'1⁄10'), - (0x2153, 'M', u'1⁄3'), - (0x2154, 'M', u'2⁄3'), - (0x2155, 'M', u'1⁄5'), - (0x2156, 'M', u'2⁄5'), - (0x2157, 'M', u'3⁄5'), - (0x2158, 'M', u'4⁄5'), - (0x2159, 'M', u'1⁄6'), - (0x215A, 'M', u'5⁄6'), - (0x215B, 'M', u'1⁄8'), - (0x215C, 'M', u'3⁄8'), - (0x215D, 'M', u'5⁄8'), - (0x215E, 'M', u'7⁄8'), - (0x215F, 'M', u'1⁄'), - (0x2160, 'M', u'i'), - (0x2161, 'M', u'ii'), - (0x2162, 'M', u'iii'), - (0x2163, 'M', u'iv'), - (0x2164, 'M', u'v'), - (0x2165, 'M', u'vi'), - (0x2166, 'M', u'vii'), - (0x2167, 'M', u'viii'), - (0x2168, 'M', u'ix'), - (0x2169, 'M', u'x'), - (0x216A, 'M', u'xi'), - (0x216B, 'M', u'xii'), - (0x216C, 'M', u'l'), - (0x216D, 'M', u'c'), - (0x216E, 'M', u'd'), - (0x216F, 'M', u'm'), - (0x2170, 'M', u'i'), - (0x2171, 'M', u'ii'), - (0x2172, 'M', u'iii'), - (0x2173, 'M', u'iv'), - (0x2174, 'M', u'v'), - (0x2175, 'M', u'vi'), - (0x2176, 'M', u'vii'), - (0x2177, 'M', u'viii'), - (0x2178, 'M', u'ix'), - (0x2179, 'M', u'x'), - (0x217A, 'M', u'xi'), - (0x217B, 'M', u'xii'), - (0x217C, 'M', u'l'), - (0x217D, 'M', u'c'), - (0x217E, 'M', u'd'), - (0x217F, 'M', u'm'), - (0x2180, 'V'), - (0x2183, 'X'), - (0x2184, 'V'), - (0x2189, 'M', u'0⁄3'), - (0x218A, 'X'), - (0x2190, 'V'), - (0x222C, 'M', u'∫∫'), - (0x222D, 'M', u'∫∫∫'), - (0x222E, 'V'), - (0x222F, 'M', u'∮∮'), - (0x2230, 'M', u'∮∮∮'), - (0x2231, 'V'), - (0x2260, '3'), - (0x2261, 'V'), - (0x226E, '3'), - (0x2270, 'V'), - (0x2329, 'M', u'〈'), - (0x232A, 'M', u'〉'), - (0x232B, 'V'), - (0x23F4, 'X'), - (0x2400, 'V'), - (0x2427, 'X'), - (0x2440, 'V'), - (0x244B, 'X'), - (0x2460, 'M', u'1'), - (0x2461, 'M', u'2'), - (0x2462, 'M', u'3'), - (0x2463, 'M', u'4'), - (0x2464, 'M', u'5'), - (0x2465, 'M', u'6'), - (0x2466, 'M', u'7'), - (0x2467, 'M', u'8'), - (0x2468, 'M', u'9'), - (0x2469, 'M', u'10'), - (0x246A, 'M', u'11'), - (0x246B, 'M', u'12'), - ] - -def _seg_23(): - return [ - (0x246C, 'M', u'13'), - (0x246D, 'M', u'14'), - (0x246E, 'M', u'15'), - (0x246F, 'M', u'16'), - (0x2470, 'M', u'17'), - (0x2471, 'M', u'18'), - (0x2472, 'M', u'19'), - (0x2473, 'M', u'20'), - (0x2474, '3', u'(1)'), - (0x2475, '3', u'(2)'), - (0x2476, '3', u'(3)'), - (0x2477, '3', u'(4)'), - (0x2478, '3', u'(5)'), - (0x2479, '3', u'(6)'), - (0x247A, '3', u'(7)'), - (0x247B, '3', u'(8)'), - (0x247C, '3', u'(9)'), - (0x247D, '3', u'(10)'), - (0x247E, '3', u'(11)'), - (0x247F, '3', u'(12)'), - (0x2480, '3', u'(13)'), - (0x2481, '3', u'(14)'), - (0x2482, '3', u'(15)'), - (0x2483, '3', u'(16)'), - (0x2484, '3', u'(17)'), - (0x2485, '3', u'(18)'), - (0x2486, '3', u'(19)'), - (0x2487, '3', u'(20)'), - (0x2488, 'X'), - (0x249C, '3', u'(a)'), - (0x249D, '3', u'(b)'), - (0x249E, '3', u'(c)'), - (0x249F, '3', u'(d)'), - (0x24A0, '3', u'(e)'), - (0x24A1, '3', u'(f)'), - (0x24A2, '3', u'(g)'), - (0x24A3, '3', u'(h)'), - (0x24A4, '3', u'(i)'), - (0x24A5, '3', u'(j)'), - (0x24A6, '3', u'(k)'), - (0x24A7, '3', u'(l)'), - (0x24A8, '3', u'(m)'), - (0x24A9, '3', u'(n)'), - (0x24AA, '3', u'(o)'), - (0x24AB, '3', u'(p)'), - (0x24AC, '3', u'(q)'), - (0x24AD, '3', u'(r)'), - (0x24AE, '3', u'(s)'), - (0x24AF, '3', u'(t)'), - (0x24B0, '3', u'(u)'), - (0x24B1, '3', u'(v)'), - (0x24B2, '3', u'(w)'), - (0x24B3, '3', u'(x)'), - (0x24B4, '3', u'(y)'), - (0x24B5, '3', u'(z)'), - (0x24B6, 'M', u'a'), - (0x24B7, 'M', u'b'), - (0x24B8, 'M', u'c'), - (0x24B9, 'M', u'd'), - (0x24BA, 'M', u'e'), - (0x24BB, 'M', u'f'), - (0x24BC, 'M', u'g'), - (0x24BD, 'M', u'h'), - (0x24BE, 'M', u'i'), - (0x24BF, 'M', u'j'), - (0x24C0, 'M', u'k'), - (0x24C1, 'M', u'l'), - (0x24C2, 'M', u'm'), - (0x24C3, 'M', u'n'), - (0x24C4, 'M', u'o'), - (0x24C5, 'M', u'p'), - (0x24C6, 'M', u'q'), - (0x24C7, 'M', u'r'), - (0x24C8, 'M', u's'), - (0x24C9, 'M', u't'), - (0x24CA, 'M', u'u'), - (0x24CB, 'M', u'v'), - (0x24CC, 'M', u'w'), - (0x24CD, 'M', u'x'), - (0x24CE, 'M', u'y'), - (0x24CF, 'M', u'z'), - (0x24D0, 'M', u'a'), - (0x24D1, 'M', u'b'), - (0x24D2, 'M', u'c'), - (0x24D3, 'M', u'd'), - (0x24D4, 'M', u'e'), - (0x24D5, 'M', u'f'), - (0x24D6, 'M', u'g'), - (0x24D7, 'M', u'h'), - (0x24D8, 'M', u'i'), - (0x24D9, 'M', u'j'), - (0x24DA, 'M', u'k'), - (0x24DB, 'M', u'l'), - (0x24DC, 'M', u'm'), - (0x24DD, 'M', u'n'), - (0x24DE, 'M', u'o'), - (0x24DF, 'M', u'p'), - (0x24E0, 'M', u'q'), - (0x24E1, 'M', u'r'), - (0x24E2, 'M', u's'), - ] - -def _seg_24(): - return [ - (0x24E3, 'M', u't'), - (0x24E4, 'M', u'u'), - (0x24E5, 'M', u'v'), - (0x24E6, 'M', u'w'), - (0x24E7, 'M', u'x'), - (0x24E8, 'M', u'y'), - (0x24E9, 'M', u'z'), - (0x24EA, 'M', u'0'), - (0x24EB, 'V'), - (0x2700, 'X'), - (0x2701, 'V'), - (0x2A0C, 'M', u'∫∫∫∫'), - (0x2A0D, 'V'), - (0x2A74, '3', u'::='), - (0x2A75, '3', u'=='), - (0x2A76, '3', u'==='), - (0x2A77, 'V'), - (0x2ADC, 'M', u'⫝̸'), - (0x2ADD, 'V'), - (0x2B4D, 'X'), - (0x2B50, 'V'), - (0x2B5A, 'X'), - (0x2C00, 'M', u'ⰰ'), - (0x2C01, 'M', u'ⰱ'), - (0x2C02, 'M', u'ⰲ'), - (0x2C03, 'M', u'ⰳ'), - (0x2C04, 'M', u'ⰴ'), - (0x2C05, 'M', u'ⰵ'), - (0x2C06, 'M', u'ⰶ'), - (0x2C07, 'M', u'ⰷ'), - (0x2C08, 'M', u'ⰸ'), - (0x2C09, 'M', u'ⰹ'), - (0x2C0A, 'M', u'ⰺ'), - (0x2C0B, 'M', u'ⰻ'), - (0x2C0C, 'M', u'ⰼ'), - (0x2C0D, 'M', u'ⰽ'), - (0x2C0E, 'M', u'ⰾ'), - (0x2C0F, 'M', u'ⰿ'), - (0x2C10, 'M', u'ⱀ'), - (0x2C11, 'M', u'ⱁ'), - (0x2C12, 'M', u'ⱂ'), - (0x2C13, 'M', u'ⱃ'), - (0x2C14, 'M', u'ⱄ'), - (0x2C15, 'M', u'ⱅ'), - (0x2C16, 'M', u'ⱆ'), - (0x2C17, 'M', u'ⱇ'), - (0x2C18, 'M', u'ⱈ'), - (0x2C19, 'M', u'ⱉ'), - (0x2C1A, 'M', u'ⱊ'), - (0x2C1B, 'M', u'ⱋ'), - (0x2C1C, 'M', u'ⱌ'), - (0x2C1D, 'M', u'ⱍ'), - (0x2C1E, 'M', u'ⱎ'), - (0x2C1F, 'M', u'ⱏ'), - (0x2C20, 'M', u'ⱐ'), - (0x2C21, 'M', u'ⱑ'), - (0x2C22, 'M', u'ⱒ'), - (0x2C23, 'M', u'ⱓ'), - (0x2C24, 'M', u'ⱔ'), - (0x2C25, 'M', u'ⱕ'), - (0x2C26, 'M', u'ⱖ'), - (0x2C27, 'M', u'ⱗ'), - (0x2C28, 'M', u'ⱘ'), - (0x2C29, 'M', u'ⱙ'), - (0x2C2A, 'M', u'ⱚ'), - (0x2C2B, 'M', u'ⱛ'), - (0x2C2C, 'M', u'ⱜ'), - (0x2C2D, 'M', u'ⱝ'), - (0x2C2E, 'M', u'ⱞ'), - (0x2C2F, 'X'), - (0x2C30, 'V'), - (0x2C5F, 'X'), - (0x2C60, 'M', u'ⱡ'), - (0x2C61, 'V'), - (0x2C62, 'M', u'ɫ'), - (0x2C63, 'M', u'ᵽ'), - (0x2C64, 'M', u'ɽ'), - (0x2C65, 'V'), - (0x2C67, 'M', u'ⱨ'), - (0x2C68, 'V'), - (0x2C69, 'M', u'ⱪ'), - (0x2C6A, 'V'), - (0x2C6B, 'M', u'ⱬ'), - (0x2C6C, 'V'), - (0x2C6D, 'M', u'ɑ'), - (0x2C6E, 'M', u'ɱ'), - (0x2C6F, 'M', u'ɐ'), - (0x2C70, 'M', u'ɒ'), - (0x2C71, 'V'), - (0x2C72, 'M', u'ⱳ'), - (0x2C73, 'V'), - (0x2C75, 'M', u'ⱶ'), - (0x2C76, 'V'), - (0x2C7C, 'M', u'j'), - (0x2C7D, 'M', u'v'), - (0x2C7E, 'M', u'ȿ'), - (0x2C7F, 'M', u'ɀ'), - (0x2C80, 'M', u'ⲁ'), - (0x2C81, 'V'), - (0x2C82, 'M', u'ⲃ'), - ] - -def _seg_25(): - return [ - (0x2C83, 'V'), - (0x2C84, 'M', u'ⲅ'), - (0x2C85, 'V'), - (0x2C86, 'M', u'ⲇ'), - (0x2C87, 'V'), - (0x2C88, 'M', u'ⲉ'), - (0x2C89, 'V'), - (0x2C8A, 'M', u'ⲋ'), - (0x2C8B, 'V'), - (0x2C8C, 'M', u'ⲍ'), - (0x2C8D, 'V'), - (0x2C8E, 'M', u'ⲏ'), - (0x2C8F, 'V'), - (0x2C90, 'M', u'ⲑ'), - (0x2C91, 'V'), - (0x2C92, 'M', u'ⲓ'), - (0x2C93, 'V'), - (0x2C94, 'M', u'ⲕ'), - (0x2C95, 'V'), - (0x2C96, 'M', u'ⲗ'), - (0x2C97, 'V'), - (0x2C98, 'M', u'ⲙ'), - (0x2C99, 'V'), - (0x2C9A, 'M', u'ⲛ'), - (0x2C9B, 'V'), - (0x2C9C, 'M', u'ⲝ'), - (0x2C9D, 'V'), - (0x2C9E, 'M', u'ⲟ'), - (0x2C9F, 'V'), - (0x2CA0, 'M', u'ⲡ'), - (0x2CA1, 'V'), - (0x2CA2, 'M', u'ⲣ'), - (0x2CA3, 'V'), - (0x2CA4, 'M', u'ⲥ'), - (0x2CA5, 'V'), - (0x2CA6, 'M', u'ⲧ'), - (0x2CA7, 'V'), - (0x2CA8, 'M', u'ⲩ'), - (0x2CA9, 'V'), - (0x2CAA, 'M', u'ⲫ'), - (0x2CAB, 'V'), - (0x2CAC, 'M', u'ⲭ'), - (0x2CAD, 'V'), - (0x2CAE, 'M', u'ⲯ'), - (0x2CAF, 'V'), - (0x2CB0, 'M', u'ⲱ'), - (0x2CB1, 'V'), - (0x2CB2, 'M', u'ⲳ'), - (0x2CB3, 'V'), - (0x2CB4, 'M', u'ⲵ'), - (0x2CB5, 'V'), - (0x2CB6, 'M', u'ⲷ'), - (0x2CB7, 'V'), - (0x2CB8, 'M', u'ⲹ'), - (0x2CB9, 'V'), - (0x2CBA, 'M', u'ⲻ'), - (0x2CBB, 'V'), - (0x2CBC, 'M', u'ⲽ'), - (0x2CBD, 'V'), - (0x2CBE, 'M', u'ⲿ'), - (0x2CBF, 'V'), - (0x2CC0, 'M', u'ⳁ'), - (0x2CC1, 'V'), - (0x2CC2, 'M', u'ⳃ'), - (0x2CC3, 'V'), - (0x2CC4, 'M', u'ⳅ'), - (0x2CC5, 'V'), - (0x2CC6, 'M', u'ⳇ'), - (0x2CC7, 'V'), - (0x2CC8, 'M', u'ⳉ'), - (0x2CC9, 'V'), - (0x2CCA, 'M', u'ⳋ'), - (0x2CCB, 'V'), - (0x2CCC, 'M', u'ⳍ'), - (0x2CCD, 'V'), - (0x2CCE, 'M', u'ⳏ'), - (0x2CCF, 'V'), - (0x2CD0, 'M', u'ⳑ'), - (0x2CD1, 'V'), - (0x2CD2, 'M', u'ⳓ'), - (0x2CD3, 'V'), - (0x2CD4, 'M', u'ⳕ'), - (0x2CD5, 'V'), - (0x2CD6, 'M', u'ⳗ'), - (0x2CD7, 'V'), - (0x2CD8, 'M', u'ⳙ'), - (0x2CD9, 'V'), - (0x2CDA, 'M', u'ⳛ'), - (0x2CDB, 'V'), - (0x2CDC, 'M', u'ⳝ'), - (0x2CDD, 'V'), - (0x2CDE, 'M', u'ⳟ'), - (0x2CDF, 'V'), - (0x2CE0, 'M', u'ⳡ'), - (0x2CE1, 'V'), - (0x2CE2, 'M', u'ⳣ'), - (0x2CE3, 'V'), - (0x2CEB, 'M', u'ⳬ'), - (0x2CEC, 'V'), - (0x2CED, 'M', u'ⳮ'), - ] - -def _seg_26(): - return [ - (0x2CEE, 'V'), - (0x2CF2, 'M', u'ⳳ'), - (0x2CF3, 'V'), - (0x2CF4, 'X'), - (0x2CF9, 'V'), - (0x2D26, 'X'), - (0x2D27, 'V'), - (0x2D28, 'X'), - (0x2D2D, 'V'), - (0x2D2E, 'X'), - (0x2D30, 'V'), - (0x2D68, 'X'), - (0x2D6F, 'M', u'ⵡ'), - (0x2D70, 'V'), - (0x2D71, 'X'), - (0x2D7F, 'V'), - (0x2D97, 'X'), - (0x2DA0, 'V'), - (0x2DA7, 'X'), - (0x2DA8, 'V'), - (0x2DAF, 'X'), - (0x2DB0, 'V'), - (0x2DB7, 'X'), - (0x2DB8, 'V'), - (0x2DBF, 'X'), - (0x2DC0, 'V'), - (0x2DC7, 'X'), - (0x2DC8, 'V'), - (0x2DCF, 'X'), - (0x2DD0, 'V'), - (0x2DD7, 'X'), - (0x2DD8, 'V'), - (0x2DDF, 'X'), - (0x2DE0, 'V'), - (0x2E3C, 'X'), - (0x2E80, 'V'), - (0x2E9A, 'X'), - (0x2E9B, 'V'), - (0x2E9F, 'M', u'母'), - (0x2EA0, 'V'), - (0x2EF3, 'M', u'龟'), - (0x2EF4, 'X'), - (0x2F00, 'M', u'一'), - (0x2F01, 'M', u'丨'), - (0x2F02, 'M', u'丶'), - (0x2F03, 'M', u'丿'), - (0x2F04, 'M', u'乙'), - (0x2F05, 'M', u'亅'), - (0x2F06, 'M', u'二'), - (0x2F07, 'M', u'亠'), - (0x2F08, 'M', u'人'), - (0x2F09, 'M', u'儿'), - (0x2F0A, 'M', u'入'), - (0x2F0B, 'M', u'八'), - (0x2F0C, 'M', u'冂'), - (0x2F0D, 'M', u'冖'), - (0x2F0E, 'M', u'冫'), - (0x2F0F, 'M', u'几'), - (0x2F10, 'M', u'凵'), - (0x2F11, 'M', u'刀'), - (0x2F12, 'M', u'力'), - (0x2F13, 'M', u'勹'), - (0x2F14, 'M', u'匕'), - (0x2F15, 'M', u'匚'), - (0x2F16, 'M', u'匸'), - (0x2F17, 'M', u'十'), - (0x2F18, 'M', u'卜'), - (0x2F19, 'M', u'卩'), - (0x2F1A, 'M', u'厂'), - (0x2F1B, 'M', u'厶'), - (0x2F1C, 'M', u'又'), - (0x2F1D, 'M', u'口'), - (0x2F1E, 'M', u'囗'), - (0x2F1F, 'M', u'土'), - (0x2F20, 'M', u'士'), - (0x2F21, 'M', u'夂'), - (0x2F22, 'M', u'夊'), - (0x2F23, 'M', u'夕'), - (0x2F24, 'M', u'大'), - (0x2F25, 'M', u'女'), - (0x2F26, 'M', u'子'), - (0x2F27, 'M', u'宀'), - (0x2F28, 'M', u'寸'), - (0x2F29, 'M', u'小'), - (0x2F2A, 'M', u'尢'), - (0x2F2B, 'M', u'尸'), - (0x2F2C, 'M', u'屮'), - (0x2F2D, 'M', u'山'), - (0x2F2E, 'M', u'巛'), - (0x2F2F, 'M', u'工'), - (0x2F30, 'M', u'己'), - (0x2F31, 'M', u'巾'), - (0x2F32, 'M', u'干'), - (0x2F33, 'M', u'幺'), - (0x2F34, 'M', u'广'), - (0x2F35, 'M', u'廴'), - (0x2F36, 'M', u'廾'), - (0x2F37, 'M', u'弋'), - (0x2F38, 'M', u'弓'), - (0x2F39, 'M', u'彐'), - ] - -def _seg_27(): - return [ - (0x2F3A, 'M', u'彡'), - (0x2F3B, 'M', u'彳'), - (0x2F3C, 'M', u'心'), - (0x2F3D, 'M', u'戈'), - (0x2F3E, 'M', u'戶'), - (0x2F3F, 'M', u'手'), - (0x2F40, 'M', u'支'), - (0x2F41, 'M', u'攴'), - (0x2F42, 'M', u'文'), - (0x2F43, 'M', u'斗'), - (0x2F44, 'M', u'斤'), - (0x2F45, 'M', u'方'), - (0x2F46, 'M', u'无'), - (0x2F47, 'M', u'日'), - (0x2F48, 'M', u'曰'), - (0x2F49, 'M', u'月'), - (0x2F4A, 'M', u'木'), - (0x2F4B, 'M', u'欠'), - (0x2F4C, 'M', u'止'), - (0x2F4D, 'M', u'歹'), - (0x2F4E, 'M', u'殳'), - (0x2F4F, 'M', u'毋'), - (0x2F50, 'M', u'比'), - (0x2F51, 'M', u'毛'), - (0x2F52, 'M', u'氏'), - (0x2F53, 'M', u'气'), - (0x2F54, 'M', u'水'), - (0x2F55, 'M', u'火'), - (0x2F56, 'M', u'爪'), - (0x2F57, 'M', u'父'), - (0x2F58, 'M', u'爻'), - (0x2F59, 'M', u'爿'), - (0x2F5A, 'M', u'片'), - (0x2F5B, 'M', u'牙'), - (0x2F5C, 'M', u'牛'), - (0x2F5D, 'M', u'犬'), - (0x2F5E, 'M', u'玄'), - (0x2F5F, 'M', u'玉'), - (0x2F60, 'M', u'瓜'), - (0x2F61, 'M', u'瓦'), - (0x2F62, 'M', u'甘'), - (0x2F63, 'M', u'生'), - (0x2F64, 'M', u'用'), - (0x2F65, 'M', u'田'), - (0x2F66, 'M', u'疋'), - (0x2F67, 'M', u'疒'), - (0x2F68, 'M', u'癶'), - (0x2F69, 'M', u'白'), - (0x2F6A, 'M', u'皮'), - (0x2F6B, 'M', u'皿'), - (0x2F6C, 'M', u'目'), - (0x2F6D, 'M', u'矛'), - (0x2F6E, 'M', u'矢'), - (0x2F6F, 'M', u'石'), - (0x2F70, 'M', u'示'), - (0x2F71, 'M', u'禸'), - (0x2F72, 'M', u'禾'), - (0x2F73, 'M', u'穴'), - (0x2F74, 'M', u'立'), - (0x2F75, 'M', u'竹'), - (0x2F76, 'M', u'米'), - (0x2F77, 'M', u'糸'), - (0x2F78, 'M', u'缶'), - (0x2F79, 'M', u'网'), - (0x2F7A, 'M', u'羊'), - (0x2F7B, 'M', u'羽'), - (0x2F7C, 'M', u'老'), - (0x2F7D, 'M', u'而'), - (0x2F7E, 'M', u'耒'), - (0x2F7F, 'M', u'耳'), - (0x2F80, 'M', u'聿'), - (0x2F81, 'M', u'肉'), - (0x2F82, 'M', u'臣'), - (0x2F83, 'M', u'自'), - (0x2F84, 'M', u'至'), - (0x2F85, 'M', u'臼'), - (0x2F86, 'M', u'舌'), - (0x2F87, 'M', u'舛'), - (0x2F88, 'M', u'舟'), - (0x2F89, 'M', u'艮'), - (0x2F8A, 'M', u'色'), - (0x2F8B, 'M', u'艸'), - (0x2F8C, 'M', u'虍'), - (0x2F8D, 'M', u'虫'), - (0x2F8E, 'M', u'血'), - (0x2F8F, 'M', u'行'), - (0x2F90, 'M', u'衣'), - (0x2F91, 'M', u'襾'), - (0x2F92, 'M', u'見'), - (0x2F93, 'M', u'角'), - (0x2F94, 'M', u'言'), - (0x2F95, 'M', u'谷'), - (0x2F96, 'M', u'豆'), - (0x2F97, 'M', u'豕'), - (0x2F98, 'M', u'豸'), - (0x2F99, 'M', u'貝'), - (0x2F9A, 'M', u'赤'), - (0x2F9B, 'M', u'走'), - (0x2F9C, 'M', u'足'), - (0x2F9D, 'M', u'身'), - ] - -def _seg_28(): - return [ - (0x2F9E, 'M', u'車'), - (0x2F9F, 'M', u'辛'), - (0x2FA0, 'M', u'辰'), - (0x2FA1, 'M', u'辵'), - (0x2FA2, 'M', u'邑'), - (0x2FA3, 'M', u'酉'), - (0x2FA4, 'M', u'釆'), - (0x2FA5, 'M', u'里'), - (0x2FA6, 'M', u'金'), - (0x2FA7, 'M', u'長'), - (0x2FA8, 'M', u'門'), - (0x2FA9, 'M', u'阜'), - (0x2FAA, 'M', u'隶'), - (0x2FAB, 'M', u'隹'), - (0x2FAC, 'M', u'雨'), - (0x2FAD, 'M', u'靑'), - (0x2FAE, 'M', u'非'), - (0x2FAF, 'M', u'面'), - (0x2FB0, 'M', u'革'), - (0x2FB1, 'M', u'韋'), - (0x2FB2, 'M', u'韭'), - (0x2FB3, 'M', u'音'), - (0x2FB4, 'M', u'頁'), - (0x2FB5, 'M', u'風'), - (0x2FB6, 'M', u'飛'), - (0x2FB7, 'M', u'食'), - (0x2FB8, 'M', u'首'), - (0x2FB9, 'M', u'香'), - (0x2FBA, 'M', u'馬'), - (0x2FBB, 'M', u'骨'), - (0x2FBC, 'M', u'高'), - (0x2FBD, 'M', u'髟'), - (0x2FBE, 'M', u'鬥'), - (0x2FBF, 'M', u'鬯'), - (0x2FC0, 'M', u'鬲'), - (0x2FC1, 'M', u'鬼'), - (0x2FC2, 'M', u'魚'), - (0x2FC3, 'M', u'鳥'), - (0x2FC4, 'M', u'鹵'), - (0x2FC5, 'M', u'鹿'), - (0x2FC6, 'M', u'麥'), - (0x2FC7, 'M', u'麻'), - (0x2FC8, 'M', u'黃'), - (0x2FC9, 'M', u'黍'), - (0x2FCA, 'M', u'黑'), - (0x2FCB, 'M', u'黹'), - (0x2FCC, 'M', u'黽'), - (0x2FCD, 'M', u'鼎'), - (0x2FCE, 'M', u'鼓'), - (0x2FCF, 'M', u'鼠'), - (0x2FD0, 'M', u'鼻'), - (0x2FD1, 'M', u'齊'), - (0x2FD2, 'M', u'齒'), - (0x2FD3, 'M', u'龍'), - (0x2FD4, 'M', u'龜'), - (0x2FD5, 'M', u'龠'), - (0x2FD6, 'X'), - (0x3000, '3', u' '), - (0x3001, 'V'), - (0x3002, 'M', u'.'), - (0x3003, 'V'), - (0x3036, 'M', u'〒'), - (0x3037, 'V'), - (0x3038, 'M', u'十'), - (0x3039, 'M', u'卄'), - (0x303A, 'M', u'卅'), - (0x303B, 'V'), - (0x3040, 'X'), - (0x3041, 'V'), - (0x3097, 'X'), - (0x3099, 'V'), - (0x309B, '3', u' ゙'), - (0x309C, '3', u' ゚'), - (0x309D, 'V'), - (0x309F, 'M', u'より'), - (0x30A0, 'V'), - (0x30FF, 'M', u'コト'), - (0x3100, 'X'), - (0x3105, 'V'), - (0x312E, 'X'), - (0x3131, 'M', u'ᄀ'), - (0x3132, 'M', u'ᄁ'), - (0x3133, 'M', u'ᆪ'), - (0x3134, 'M', u'ᄂ'), - (0x3135, 'M', u'ᆬ'), - (0x3136, 'M', u'ᆭ'), - (0x3137, 'M', u'ᄃ'), - (0x3138, 'M', u'ᄄ'), - (0x3139, 'M', u'ᄅ'), - (0x313A, 'M', u'ᆰ'), - (0x313B, 'M', u'ᆱ'), - (0x313C, 'M', u'ᆲ'), - (0x313D, 'M', u'ᆳ'), - (0x313E, 'M', u'ᆴ'), - (0x313F, 'M', u'ᆵ'), - (0x3140, 'M', u'ᄚ'), - (0x3141, 'M', u'ᄆ'), - (0x3142, 'M', u'ᄇ'), - (0x3143, 'M', u'ᄈ'), - (0x3144, 'M', u'ᄡ'), - ] - -def _seg_29(): - return [ - (0x3145, 'M', u'ᄉ'), - (0x3146, 'M', u'ᄊ'), - (0x3147, 'M', u'ᄋ'), - (0x3148, 'M', u'ᄌ'), - (0x3149, 'M', u'ᄍ'), - (0x314A, 'M', u'ᄎ'), - (0x314B, 'M', u'ᄏ'), - (0x314C, 'M', u'ᄐ'), - (0x314D, 'M', u'ᄑ'), - (0x314E, 'M', u'ᄒ'), - (0x314F, 'M', u'ᅡ'), - (0x3150, 'M', u'ᅢ'), - (0x3151, 'M', u'ᅣ'), - (0x3152, 'M', u'ᅤ'), - (0x3153, 'M', u'ᅥ'), - (0x3154, 'M', u'ᅦ'), - (0x3155, 'M', u'ᅧ'), - (0x3156, 'M', u'ᅨ'), - (0x3157, 'M', u'ᅩ'), - (0x3158, 'M', u'ᅪ'), - (0x3159, 'M', u'ᅫ'), - (0x315A, 'M', u'ᅬ'), - (0x315B, 'M', u'ᅭ'), - (0x315C, 'M', u'ᅮ'), - (0x315D, 'M', u'ᅯ'), - (0x315E, 'M', u'ᅰ'), - (0x315F, 'M', u'ᅱ'), - (0x3160, 'M', u'ᅲ'), - (0x3161, 'M', u'ᅳ'), - (0x3162, 'M', u'ᅴ'), - (0x3163, 'M', u'ᅵ'), - (0x3164, 'X'), - (0x3165, 'M', u'ᄔ'), - (0x3166, 'M', u'ᄕ'), - (0x3167, 'M', u'ᇇ'), - (0x3168, 'M', u'ᇈ'), - (0x3169, 'M', u'ᇌ'), - (0x316A, 'M', u'ᇎ'), - (0x316B, 'M', u'ᇓ'), - (0x316C, 'M', u'ᇗ'), - (0x316D, 'M', u'ᇙ'), - (0x316E, 'M', u'ᄜ'), - (0x316F, 'M', u'ᇝ'), - (0x3170, 'M', u'ᇟ'), - (0x3171, 'M', u'ᄝ'), - (0x3172, 'M', u'ᄞ'), - (0x3173, 'M', u'ᄠ'), - (0x3174, 'M', u'ᄢ'), - (0x3175, 'M', u'ᄣ'), - (0x3176, 'M', u'ᄧ'), - (0x3177, 'M', u'ᄩ'), - (0x3178, 'M', u'ᄫ'), - (0x3179, 'M', u'ᄬ'), - (0x317A, 'M', u'ᄭ'), - (0x317B, 'M', u'ᄮ'), - (0x317C, 'M', u'ᄯ'), - (0x317D, 'M', u'ᄲ'), - (0x317E, 'M', u'ᄶ'), - (0x317F, 'M', u'ᅀ'), - (0x3180, 'M', u'ᅇ'), - (0x3181, 'M', u'ᅌ'), - (0x3182, 'M', u'ᇱ'), - (0x3183, 'M', u'ᇲ'), - (0x3184, 'M', u'ᅗ'), - (0x3185, 'M', u'ᅘ'), - (0x3186, 'M', u'ᅙ'), - (0x3187, 'M', u'ᆄ'), - (0x3188, 'M', u'ᆅ'), - (0x3189, 'M', u'ᆈ'), - (0x318A, 'M', u'ᆑ'), - (0x318B, 'M', u'ᆒ'), - (0x318C, 'M', u'ᆔ'), - (0x318D, 'M', u'ᆞ'), - (0x318E, 'M', u'ᆡ'), - (0x318F, 'X'), - (0x3190, 'V'), - (0x3192, 'M', u'一'), - (0x3193, 'M', u'二'), - (0x3194, 'M', u'三'), - (0x3195, 'M', u'四'), - (0x3196, 'M', u'上'), - (0x3197, 'M', u'中'), - (0x3198, 'M', u'下'), - (0x3199, 'M', u'甲'), - (0x319A, 'M', u'乙'), - (0x319B, 'M', u'丙'), - (0x319C, 'M', u'丁'), - (0x319D, 'M', u'天'), - (0x319E, 'M', u'地'), - (0x319F, 'M', u'人'), - (0x31A0, 'V'), - (0x31BB, 'X'), - (0x31C0, 'V'), - (0x31E4, 'X'), - (0x31F0, 'V'), - (0x3200, '3', u'(ᄀ)'), - (0x3201, '3', u'(ᄂ)'), - (0x3202, '3', u'(ᄃ)'), - (0x3203, '3', u'(ᄅ)'), - (0x3204, '3', u'(ᄆ)'), - ] - -def _seg_30(): - return [ - (0x3205, '3', u'(ᄇ)'), - (0x3206, '3', u'(ᄉ)'), - (0x3207, '3', u'(ᄋ)'), - (0x3208, '3', u'(ᄌ)'), - (0x3209, '3', u'(ᄎ)'), - (0x320A, '3', u'(ᄏ)'), - (0x320B, '3', u'(ᄐ)'), - (0x320C, '3', u'(ᄑ)'), - (0x320D, '3', u'(ᄒ)'), - (0x320E, '3', u'(가)'), - (0x320F, '3', u'(나)'), - (0x3210, '3', u'(다)'), - (0x3211, '3', u'(라)'), - (0x3212, '3', u'(마)'), - (0x3213, '3', u'(바)'), - (0x3214, '3', u'(사)'), - (0x3215, '3', u'(아)'), - (0x3216, '3', u'(자)'), - (0x3217, '3', u'(차)'), - (0x3218, '3', u'(카)'), - (0x3219, '3', u'(타)'), - (0x321A, '3', u'(파)'), - (0x321B, '3', u'(하)'), - (0x321C, '3', u'(주)'), - (0x321D, '3', u'(오전)'), - (0x321E, '3', u'(오후)'), - (0x321F, 'X'), - (0x3220, '3', u'(一)'), - (0x3221, '3', u'(二)'), - (0x3222, '3', u'(三)'), - (0x3223, '3', u'(四)'), - (0x3224, '3', u'(五)'), - (0x3225, '3', u'(六)'), - (0x3226, '3', u'(七)'), - (0x3227, '3', u'(八)'), - (0x3228, '3', u'(九)'), - (0x3229, '3', u'(十)'), - (0x322A, '3', u'(月)'), - (0x322B, '3', u'(火)'), - (0x322C, '3', u'(水)'), - (0x322D, '3', u'(木)'), - (0x322E, '3', u'(金)'), - (0x322F, '3', u'(土)'), - (0x3230, '3', u'(日)'), - (0x3231, '3', u'(株)'), - (0x3232, '3', u'(有)'), - (0x3233, '3', u'(社)'), - (0x3234, '3', u'(名)'), - (0x3235, '3', u'(特)'), - (0x3236, '3', u'(財)'), - (0x3237, '3', u'(祝)'), - (0x3238, '3', u'(労)'), - (0x3239, '3', u'(代)'), - (0x323A, '3', u'(呼)'), - (0x323B, '3', u'(学)'), - (0x323C, '3', u'(監)'), - (0x323D, '3', u'(企)'), - (0x323E, '3', u'(資)'), - (0x323F, '3', u'(協)'), - (0x3240, '3', u'(祭)'), - (0x3241, '3', u'(休)'), - (0x3242, '3', u'(自)'), - (0x3243, '3', u'(至)'), - (0x3244, 'M', u'問'), - (0x3245, 'M', u'幼'), - (0x3246, 'M', u'文'), - (0x3247, 'M', u'箏'), - (0x3248, 'V'), - (0x3250, 'M', u'pte'), - (0x3251, 'M', u'21'), - (0x3252, 'M', u'22'), - (0x3253, 'M', u'23'), - (0x3254, 'M', u'24'), - (0x3255, 'M', u'25'), - (0x3256, 'M', u'26'), - (0x3257, 'M', u'27'), - (0x3258, 'M', u'28'), - (0x3259, 'M', u'29'), - (0x325A, 'M', u'30'), - (0x325B, 'M', u'31'), - (0x325C, 'M', u'32'), - (0x325D, 'M', u'33'), - (0x325E, 'M', u'34'), - (0x325F, 'M', u'35'), - (0x3260, 'M', u'ᄀ'), - (0x3261, 'M', u'ᄂ'), - (0x3262, 'M', u'ᄃ'), - (0x3263, 'M', u'ᄅ'), - (0x3264, 'M', u'ᄆ'), - (0x3265, 'M', u'ᄇ'), - (0x3266, 'M', u'ᄉ'), - (0x3267, 'M', u'ᄋ'), - (0x3268, 'M', u'ᄌ'), - (0x3269, 'M', u'ᄎ'), - (0x326A, 'M', u'ᄏ'), - (0x326B, 'M', u'ᄐ'), - (0x326C, 'M', u'ᄑ'), - (0x326D, 'M', u'ᄒ'), - (0x326E, 'M', u'가'), - (0x326F, 'M', u'나'), - ] - -def _seg_31(): - return [ - (0x3270, 'M', u'다'), - (0x3271, 'M', u'라'), - (0x3272, 'M', u'마'), - (0x3273, 'M', u'바'), - (0x3274, 'M', u'사'), - (0x3275, 'M', u'아'), - (0x3276, 'M', u'자'), - (0x3277, 'M', u'차'), - (0x3278, 'M', u'카'), - (0x3279, 'M', u'타'), - (0x327A, 'M', u'파'), - (0x327B, 'M', u'하'), - (0x327C, 'M', u'참고'), - (0x327D, 'M', u'주의'), - (0x327E, 'M', u'우'), - (0x327F, 'V'), - (0x3280, 'M', u'一'), - (0x3281, 'M', u'二'), - (0x3282, 'M', u'三'), - (0x3283, 'M', u'四'), - (0x3284, 'M', u'五'), - (0x3285, 'M', u'六'), - (0x3286, 'M', u'七'), - (0x3287, 'M', u'八'), - (0x3288, 'M', u'九'), - (0x3289, 'M', u'十'), - (0x328A, 'M', u'月'), - (0x328B, 'M', u'火'), - (0x328C, 'M', u'水'), - (0x328D, 'M', u'木'), - (0x328E, 'M', u'金'), - (0x328F, 'M', u'土'), - (0x3290, 'M', u'日'), - (0x3291, 'M', u'株'), - (0x3292, 'M', u'有'), - (0x3293, 'M', u'社'), - (0x3294, 'M', u'名'), - (0x3295, 'M', u'特'), - (0x3296, 'M', u'財'), - (0x3297, 'M', u'祝'), - (0x3298, 'M', u'労'), - (0x3299, 'M', u'秘'), - (0x329A, 'M', u'男'), - (0x329B, 'M', u'女'), - (0x329C, 'M', u'適'), - (0x329D, 'M', u'優'), - (0x329E, 'M', u'印'), - (0x329F, 'M', u'注'), - (0x32A0, 'M', u'項'), - (0x32A1, 'M', u'休'), - (0x32A2, 'M', u'写'), - (0x32A3, 'M', u'正'), - (0x32A4, 'M', u'上'), - (0x32A5, 'M', u'中'), - (0x32A6, 'M', u'下'), - (0x32A7, 'M', u'左'), - (0x32A8, 'M', u'右'), - (0x32A9, 'M', u'医'), - (0x32AA, 'M', u'宗'), - (0x32AB, 'M', u'学'), - (0x32AC, 'M', u'監'), - (0x32AD, 'M', u'企'), - (0x32AE, 'M', u'資'), - (0x32AF, 'M', u'協'), - (0x32B0, 'M', u'夜'), - (0x32B1, 'M', u'36'), - (0x32B2, 'M', u'37'), - (0x32B3, 'M', u'38'), - (0x32B4, 'M', u'39'), - (0x32B5, 'M', u'40'), - (0x32B6, 'M', u'41'), - (0x32B7, 'M', u'42'), - (0x32B8, 'M', u'43'), - (0x32B9, 'M', u'44'), - (0x32BA, 'M', u'45'), - (0x32BB, 'M', u'46'), - (0x32BC, 'M', u'47'), - (0x32BD, 'M', u'48'), - (0x32BE, 'M', u'49'), - (0x32BF, 'M', u'50'), - (0x32C0, 'M', u'1月'), - (0x32C1, 'M', u'2月'), - (0x32C2, 'M', u'3月'), - (0x32C3, 'M', u'4月'), - (0x32C4, 'M', u'5月'), - (0x32C5, 'M', u'6月'), - (0x32C6, 'M', u'7月'), - (0x32C7, 'M', u'8月'), - (0x32C8, 'M', u'9月'), - (0x32C9, 'M', u'10月'), - (0x32CA, 'M', u'11月'), - (0x32CB, 'M', u'12月'), - (0x32CC, 'M', u'hg'), - (0x32CD, 'M', u'erg'), - (0x32CE, 'M', u'ev'), - (0x32CF, 'M', u'ltd'), - (0x32D0, 'M', u'ア'), - (0x32D1, 'M', u'イ'), - (0x32D2, 'M', u'ウ'), - (0x32D3, 'M', u'エ'), - ] - -def _seg_32(): - return [ - (0x32D4, 'M', u'オ'), - (0x32D5, 'M', u'カ'), - (0x32D6, 'M', u'キ'), - (0x32D7, 'M', u'ク'), - (0x32D8, 'M', u'ケ'), - (0x32D9, 'M', u'コ'), - (0x32DA, 'M', u'サ'), - (0x32DB, 'M', u'シ'), - (0x32DC, 'M', u'ス'), - (0x32DD, 'M', u'セ'), - (0x32DE, 'M', u'ソ'), - (0x32DF, 'M', u'タ'), - (0x32E0, 'M', u'チ'), - (0x32E1, 'M', u'ツ'), - (0x32E2, 'M', u'テ'), - (0x32E3, 'M', u'ト'), - (0x32E4, 'M', u'ナ'), - (0x32E5, 'M', u'ニ'), - (0x32E6, 'M', u'ヌ'), - (0x32E7, 'M', u'ネ'), - (0x32E8, 'M', u'ノ'), - (0x32E9, 'M', u'ハ'), - (0x32EA, 'M', u'ヒ'), - (0x32EB, 'M', u'フ'), - (0x32EC, 'M', u'ヘ'), - (0x32ED, 'M', u'ホ'), - (0x32EE, 'M', u'マ'), - (0x32EF, 'M', u'ミ'), - (0x32F0, 'M', u'ム'), - (0x32F1, 'M', u'メ'), - (0x32F2, 'M', u'モ'), - (0x32F3, 'M', u'ヤ'), - (0x32F4, 'M', u'ユ'), - (0x32F5, 'M', u'ヨ'), - (0x32F6, 'M', u'ラ'), - (0x32F7, 'M', u'リ'), - (0x32F8, 'M', u'ル'), - (0x32F9, 'M', u'レ'), - (0x32FA, 'M', u'ロ'), - (0x32FB, 'M', u'ワ'), - (0x32FC, 'M', u'ヰ'), - (0x32FD, 'M', u'ヱ'), - (0x32FE, 'M', u'ヲ'), - (0x32FF, 'X'), - (0x3300, 'M', u'アパート'), - (0x3301, 'M', u'アルファ'), - (0x3302, 'M', u'アンペア'), - (0x3303, 'M', u'アール'), - (0x3304, 'M', u'イニング'), - (0x3305, 'M', u'インチ'), - (0x3306, 'M', u'ウォン'), - (0x3307, 'M', u'エスクード'), - (0x3308, 'M', u'エーカー'), - (0x3309, 'M', u'オンス'), - (0x330A, 'M', u'オーム'), - (0x330B, 'M', u'カイリ'), - (0x330C, 'M', u'カラット'), - (0x330D, 'M', u'カロリー'), - (0x330E, 'M', u'ガロン'), - (0x330F, 'M', u'ガンマ'), - (0x3310, 'M', u'ギガ'), - (0x3311, 'M', u'ギニー'), - (0x3312, 'M', u'キュリー'), - (0x3313, 'M', u'ギルダー'), - (0x3314, 'M', u'キロ'), - (0x3315, 'M', u'キログラム'), - (0x3316, 'M', u'キロメートル'), - (0x3317, 'M', u'キロワット'), - (0x3318, 'M', u'グラム'), - (0x3319, 'M', u'グラムトン'), - (0x331A, 'M', u'クルゼイロ'), - (0x331B, 'M', u'クローネ'), - (0x331C, 'M', u'ケース'), - (0x331D, 'M', u'コルナ'), - (0x331E, 'M', u'コーポ'), - (0x331F, 'M', u'サイクル'), - (0x3320, 'M', u'サンチーム'), - (0x3321, 'M', u'シリング'), - (0x3322, 'M', u'センチ'), - (0x3323, 'M', u'セント'), - (0x3324, 'M', u'ダース'), - (0x3325, 'M', u'デシ'), - (0x3326, 'M', u'ドル'), - (0x3327, 'M', u'トン'), - (0x3328, 'M', u'ナノ'), - (0x3329, 'M', u'ノット'), - (0x332A, 'M', u'ハイツ'), - (0x332B, 'M', u'パーセント'), - (0x332C, 'M', u'パーツ'), - (0x332D, 'M', u'バーレル'), - (0x332E, 'M', u'ピアストル'), - (0x332F, 'M', u'ピクル'), - (0x3330, 'M', u'ピコ'), - (0x3331, 'M', u'ビル'), - (0x3332, 'M', u'ファラッド'), - (0x3333, 'M', u'フィート'), - (0x3334, 'M', u'ブッシェル'), - (0x3335, 'M', u'フラン'), - (0x3336, 'M', u'ヘクタール'), - (0x3337, 'M', u'ペソ'), - ] - -def _seg_33(): - return [ - (0x3338, 'M', u'ペニヒ'), - (0x3339, 'M', u'ヘルツ'), - (0x333A, 'M', u'ペンス'), - (0x333B, 'M', u'ページ'), - (0x333C, 'M', u'ベータ'), - (0x333D, 'M', u'ポイント'), - (0x333E, 'M', u'ボルト'), - (0x333F, 'M', u'ホン'), - (0x3340, 'M', u'ポンド'), - (0x3341, 'M', u'ホール'), - (0x3342, 'M', u'ホーン'), - (0x3343, 'M', u'マイクロ'), - (0x3344, 'M', u'マイル'), - (0x3345, 'M', u'マッハ'), - (0x3346, 'M', u'マルク'), - (0x3347, 'M', u'マンション'), - (0x3348, 'M', u'ミクロン'), - (0x3349, 'M', u'ミリ'), - (0x334A, 'M', u'ミリバール'), - (0x334B, 'M', u'メガ'), - (0x334C, 'M', u'メガトン'), - (0x334D, 'M', u'メートル'), - (0x334E, 'M', u'ヤード'), - (0x334F, 'M', u'ヤール'), - (0x3350, 'M', u'ユアン'), - (0x3351, 'M', u'リットル'), - (0x3352, 'M', u'リラ'), - (0x3353, 'M', u'ルピー'), - (0x3354, 'M', u'ルーブル'), - (0x3355, 'M', u'レム'), - (0x3356, 'M', u'レントゲン'), - (0x3357, 'M', u'ワット'), - (0x3358, 'M', u'0点'), - (0x3359, 'M', u'1点'), - (0x335A, 'M', u'2点'), - (0x335B, 'M', u'3点'), - (0x335C, 'M', u'4点'), - (0x335D, 'M', u'5点'), - (0x335E, 'M', u'6点'), - (0x335F, 'M', u'7点'), - (0x3360, 'M', u'8点'), - (0x3361, 'M', u'9点'), - (0x3362, 'M', u'10点'), - (0x3363, 'M', u'11点'), - (0x3364, 'M', u'12点'), - (0x3365, 'M', u'13点'), - (0x3366, 'M', u'14点'), - (0x3367, 'M', u'15点'), - (0x3368, 'M', u'16点'), - (0x3369, 'M', u'17点'), - (0x336A, 'M', u'18点'), - (0x336B, 'M', u'19点'), - (0x336C, 'M', u'20点'), - (0x336D, 'M', u'21点'), - (0x336E, 'M', u'22点'), - (0x336F, 'M', u'23点'), - (0x3370, 'M', u'24点'), - (0x3371, 'M', u'hpa'), - (0x3372, 'M', u'da'), - (0x3373, 'M', u'au'), - (0x3374, 'M', u'bar'), - (0x3375, 'M', u'ov'), - (0x3376, 'M', u'pc'), - (0x3377, 'M', u'dm'), - (0x3378, 'M', u'dm2'), - (0x3379, 'M', u'dm3'), - (0x337A, 'M', u'iu'), - (0x337B, 'M', u'平成'), - (0x337C, 'M', u'昭和'), - (0x337D, 'M', u'大正'), - (0x337E, 'M', u'明治'), - (0x337F, 'M', u'株式会社'), - (0x3380, 'M', u'pa'), - (0x3381, 'M', u'na'), - (0x3382, 'M', u'μa'), - (0x3383, 'M', u'ma'), - (0x3384, 'M', u'ka'), - (0x3385, 'M', u'kb'), - (0x3386, 'M', u'mb'), - (0x3387, 'M', u'gb'), - (0x3388, 'M', u'cal'), - (0x3389, 'M', u'kcal'), - (0x338A, 'M', u'pf'), - (0x338B, 'M', u'nf'), - (0x338C, 'M', u'μf'), - (0x338D, 'M', u'μg'), - (0x338E, 'M', u'mg'), - (0x338F, 'M', u'kg'), - (0x3390, 'M', u'hz'), - (0x3391, 'M', u'khz'), - (0x3392, 'M', u'mhz'), - (0x3393, 'M', u'ghz'), - (0x3394, 'M', u'thz'), - (0x3395, 'M', u'μl'), - (0x3396, 'M', u'ml'), - (0x3397, 'M', u'dl'), - (0x3398, 'M', u'kl'), - (0x3399, 'M', u'fm'), - (0x339A, 'M', u'nm'), - (0x339B, 'M', u'μm'), - ] - -def _seg_34(): - return [ - (0x339C, 'M', u'mm'), - (0x339D, 'M', u'cm'), - (0x339E, 'M', u'km'), - (0x339F, 'M', u'mm2'), - (0x33A0, 'M', u'cm2'), - (0x33A1, 'M', u'm2'), - (0x33A2, 'M', u'km2'), - (0x33A3, 'M', u'mm3'), - (0x33A4, 'M', u'cm3'), - (0x33A5, 'M', u'm3'), - (0x33A6, 'M', u'km3'), - (0x33A7, 'M', u'm∕s'), - (0x33A8, 'M', u'm∕s2'), - (0x33A9, 'M', u'pa'), - (0x33AA, 'M', u'kpa'), - (0x33AB, 'M', u'mpa'), - (0x33AC, 'M', u'gpa'), - (0x33AD, 'M', u'rad'), - (0x33AE, 'M', u'rad∕s'), - (0x33AF, 'M', u'rad∕s2'), - (0x33B0, 'M', u'ps'), - (0x33B1, 'M', u'ns'), - (0x33B2, 'M', u'μs'), - (0x33B3, 'M', u'ms'), - (0x33B4, 'M', u'pv'), - (0x33B5, 'M', u'nv'), - (0x33B6, 'M', u'μv'), - (0x33B7, 'M', u'mv'), - (0x33B8, 'M', u'kv'), - (0x33B9, 'M', u'mv'), - (0x33BA, 'M', u'pw'), - (0x33BB, 'M', u'nw'), - (0x33BC, 'M', u'μw'), - (0x33BD, 'M', u'mw'), - (0x33BE, 'M', u'kw'), - (0x33BF, 'M', u'mw'), - (0x33C0, 'M', u'kω'), - (0x33C1, 'M', u'mω'), - (0x33C2, 'X'), - (0x33C3, 'M', u'bq'), - (0x33C4, 'M', u'cc'), - (0x33C5, 'M', u'cd'), - (0x33C6, 'M', u'c∕kg'), - (0x33C7, 'X'), - (0x33C8, 'M', u'db'), - (0x33C9, 'M', u'gy'), - (0x33CA, 'M', u'ha'), - (0x33CB, 'M', u'hp'), - (0x33CC, 'M', u'in'), - (0x33CD, 'M', u'kk'), - (0x33CE, 'M', u'km'), - (0x33CF, 'M', u'kt'), - (0x33D0, 'M', u'lm'), - (0x33D1, 'M', u'ln'), - (0x33D2, 'M', u'log'), - (0x33D3, 'M', u'lx'), - (0x33D4, 'M', u'mb'), - (0x33D5, 'M', u'mil'), - (0x33D6, 'M', u'mol'), - (0x33D7, 'M', u'ph'), - (0x33D8, 'X'), - (0x33D9, 'M', u'ppm'), - (0x33DA, 'M', u'pr'), - (0x33DB, 'M', u'sr'), - (0x33DC, 'M', u'sv'), - (0x33DD, 'M', u'wb'), - (0x33DE, 'M', u'v∕m'), - (0x33DF, 'M', u'a∕m'), - (0x33E0, 'M', u'1日'), - (0x33E1, 'M', u'2日'), - (0x33E2, 'M', u'3日'), - (0x33E3, 'M', u'4日'), - (0x33E4, 'M', u'5日'), - (0x33E5, 'M', u'6日'), - (0x33E6, 'M', u'7日'), - (0x33E7, 'M', u'8日'), - (0x33E8, 'M', u'9日'), - (0x33E9, 'M', u'10日'), - (0x33EA, 'M', u'11日'), - (0x33EB, 'M', u'12日'), - (0x33EC, 'M', u'13日'), - (0x33ED, 'M', u'14日'), - (0x33EE, 'M', u'15日'), - (0x33EF, 'M', u'16日'), - (0x33F0, 'M', u'17日'), - (0x33F1, 'M', u'18日'), - (0x33F2, 'M', u'19日'), - (0x33F3, 'M', u'20日'), - (0x33F4, 'M', u'21日'), - (0x33F5, 'M', u'22日'), - (0x33F6, 'M', u'23日'), - (0x33F7, 'M', u'24日'), - (0x33F8, 'M', u'25日'), - (0x33F9, 'M', u'26日'), - (0x33FA, 'M', u'27日'), - (0x33FB, 'M', u'28日'), - (0x33FC, 'M', u'29日'), - (0x33FD, 'M', u'30日'), - (0x33FE, 'M', u'31日'), - (0x33FF, 'M', u'gal'), - ] - -def _seg_35(): - return [ - (0x3400, 'V'), - (0x4DB6, 'X'), - (0x4DC0, 'V'), - (0x9FCD, 'X'), - (0xA000, 'V'), - (0xA48D, 'X'), - (0xA490, 'V'), - (0xA4C7, 'X'), - (0xA4D0, 'V'), - (0xA62C, 'X'), - (0xA640, 'M', u'ꙁ'), - (0xA641, 'V'), - (0xA642, 'M', u'ꙃ'), - (0xA643, 'V'), - (0xA644, 'M', u'ꙅ'), - (0xA645, 'V'), - (0xA646, 'M', u'ꙇ'), - (0xA647, 'V'), - (0xA648, 'M', u'ꙉ'), - (0xA649, 'V'), - (0xA64A, 'M', u'ꙋ'), - (0xA64B, 'V'), - (0xA64C, 'M', u'ꙍ'), - (0xA64D, 'V'), - (0xA64E, 'M', u'ꙏ'), - (0xA64F, 'V'), - (0xA650, 'M', u'ꙑ'), - (0xA651, 'V'), - (0xA652, 'M', u'ꙓ'), - (0xA653, 'V'), - (0xA654, 'M', u'ꙕ'), - (0xA655, 'V'), - (0xA656, 'M', u'ꙗ'), - (0xA657, 'V'), - (0xA658, 'M', u'ꙙ'), - (0xA659, 'V'), - (0xA65A, 'M', u'ꙛ'), - (0xA65B, 'V'), - (0xA65C, 'M', u'ꙝ'), - (0xA65D, 'V'), - (0xA65E, 'M', u'ꙟ'), - (0xA65F, 'V'), - (0xA660, 'M', u'ꙡ'), - (0xA661, 'V'), - (0xA662, 'M', u'ꙣ'), - (0xA663, 'V'), - (0xA664, 'M', u'ꙥ'), - (0xA665, 'V'), - (0xA666, 'M', u'ꙧ'), - (0xA667, 'V'), - (0xA668, 'M', u'ꙩ'), - (0xA669, 'V'), - (0xA66A, 'M', u'ꙫ'), - (0xA66B, 'V'), - (0xA66C, 'M', u'ꙭ'), - (0xA66D, 'V'), - (0xA680, 'M', u'ꚁ'), - (0xA681, 'V'), - (0xA682, 'M', u'ꚃ'), - (0xA683, 'V'), - (0xA684, 'M', u'ꚅ'), - (0xA685, 'V'), - (0xA686, 'M', u'ꚇ'), - (0xA687, 'V'), - (0xA688, 'M', u'ꚉ'), - (0xA689, 'V'), - (0xA68A, 'M', u'ꚋ'), - (0xA68B, 'V'), - (0xA68C, 'M', u'ꚍ'), - (0xA68D, 'V'), - (0xA68E, 'M', u'ꚏ'), - (0xA68F, 'V'), - (0xA690, 'M', u'ꚑ'), - (0xA691, 'V'), - (0xA692, 'M', u'ꚓ'), - (0xA693, 'V'), - (0xA694, 'M', u'ꚕ'), - (0xA695, 'V'), - (0xA696, 'M', u'ꚗ'), - (0xA697, 'V'), - (0xA698, 'X'), - (0xA69F, 'V'), - (0xA6F8, 'X'), - (0xA700, 'V'), - (0xA722, 'M', u'ꜣ'), - (0xA723, 'V'), - (0xA724, 'M', u'ꜥ'), - (0xA725, 'V'), - (0xA726, 'M', u'ꜧ'), - (0xA727, 'V'), - (0xA728, 'M', u'ꜩ'), - (0xA729, 'V'), - (0xA72A, 'M', u'ꜫ'), - (0xA72B, 'V'), - (0xA72C, 'M', u'ꜭ'), - (0xA72D, 'V'), - (0xA72E, 'M', u'ꜯ'), - (0xA72F, 'V'), - (0xA732, 'M', u'ꜳ'), - (0xA733, 'V'), - ] - -def _seg_36(): - return [ - (0xA734, 'M', u'ꜵ'), - (0xA735, 'V'), - (0xA736, 'M', u'ꜷ'), - (0xA737, 'V'), - (0xA738, 'M', u'ꜹ'), - (0xA739, 'V'), - (0xA73A, 'M', u'ꜻ'), - (0xA73B, 'V'), - (0xA73C, 'M', u'ꜽ'), - (0xA73D, 'V'), - (0xA73E, 'M', u'ꜿ'), - (0xA73F, 'V'), - (0xA740, 'M', u'ꝁ'), - (0xA741, 'V'), - (0xA742, 'M', u'ꝃ'), - (0xA743, 'V'), - (0xA744, 'M', u'ꝅ'), - (0xA745, 'V'), - (0xA746, 'M', u'ꝇ'), - (0xA747, 'V'), - (0xA748, 'M', u'ꝉ'), - (0xA749, 'V'), - (0xA74A, 'M', u'ꝋ'), - (0xA74B, 'V'), - (0xA74C, 'M', u'ꝍ'), - (0xA74D, 'V'), - (0xA74E, 'M', u'ꝏ'), - (0xA74F, 'V'), - (0xA750, 'M', u'ꝑ'), - (0xA751, 'V'), - (0xA752, 'M', u'ꝓ'), - (0xA753, 'V'), - (0xA754, 'M', u'ꝕ'), - (0xA755, 'V'), - (0xA756, 'M', u'ꝗ'), - (0xA757, 'V'), - (0xA758, 'M', u'ꝙ'), - (0xA759, 'V'), - (0xA75A, 'M', u'ꝛ'), - (0xA75B, 'V'), - (0xA75C, 'M', u'ꝝ'), - (0xA75D, 'V'), - (0xA75E, 'M', u'ꝟ'), - (0xA75F, 'V'), - (0xA760, 'M', u'ꝡ'), - (0xA761, 'V'), - (0xA762, 'M', u'ꝣ'), - (0xA763, 'V'), - (0xA764, 'M', u'ꝥ'), - (0xA765, 'V'), - (0xA766, 'M', u'ꝧ'), - (0xA767, 'V'), - (0xA768, 'M', u'ꝩ'), - (0xA769, 'V'), - (0xA76A, 'M', u'ꝫ'), - (0xA76B, 'V'), - (0xA76C, 'M', u'ꝭ'), - (0xA76D, 'V'), - (0xA76E, 'M', u'ꝯ'), - (0xA76F, 'V'), - (0xA770, 'M', u'ꝯ'), - (0xA771, 'V'), - (0xA779, 'M', u'ꝺ'), - (0xA77A, 'V'), - (0xA77B, 'M', u'ꝼ'), - (0xA77C, 'V'), - (0xA77D, 'M', u'ᵹ'), - (0xA77E, 'M', u'ꝿ'), - (0xA77F, 'V'), - (0xA780, 'M', u'ꞁ'), - (0xA781, 'V'), - (0xA782, 'M', u'ꞃ'), - (0xA783, 'V'), - (0xA784, 'M', u'ꞅ'), - (0xA785, 'V'), - (0xA786, 'M', u'ꞇ'), - (0xA787, 'V'), - (0xA78B, 'M', u'ꞌ'), - (0xA78C, 'V'), - (0xA78D, 'M', u'ɥ'), - (0xA78E, 'V'), - (0xA78F, 'X'), - (0xA790, 'M', u'ꞑ'), - (0xA791, 'V'), - (0xA792, 'M', u'ꞓ'), - (0xA793, 'V'), - (0xA794, 'X'), - (0xA7A0, 'M', u'ꞡ'), - (0xA7A1, 'V'), - (0xA7A2, 'M', u'ꞣ'), - (0xA7A3, 'V'), - (0xA7A4, 'M', u'ꞥ'), - (0xA7A5, 'V'), - (0xA7A6, 'M', u'ꞧ'), - (0xA7A7, 'V'), - (0xA7A8, 'M', u'ꞩ'), - (0xA7A9, 'V'), - (0xA7AA, 'M', u'ɦ'), - (0xA7AB, 'X'), - (0xA7F8, 'M', u'ħ'), - ] - -def _seg_37(): - return [ - (0xA7F9, 'M', u'œ'), - (0xA7FA, 'V'), - (0xA82C, 'X'), - (0xA830, 'V'), - (0xA83A, 'X'), - (0xA840, 'V'), - (0xA878, 'X'), - (0xA880, 'V'), - (0xA8C5, 'X'), - (0xA8CE, 'V'), - (0xA8DA, 'X'), - (0xA8E0, 'V'), - (0xA8FC, 'X'), - (0xA900, 'V'), - (0xA954, 'X'), - (0xA95F, 'V'), - (0xA97D, 'X'), - (0xA980, 'V'), - (0xA9CE, 'X'), - (0xA9CF, 'V'), - (0xA9DA, 'X'), - (0xA9DE, 'V'), - (0xA9E0, 'X'), - (0xAA00, 'V'), - (0xAA37, 'X'), - (0xAA40, 'V'), - (0xAA4E, 'X'), - (0xAA50, 'V'), - (0xAA5A, 'X'), - (0xAA5C, 'V'), - (0xAA7C, 'X'), - (0xAA80, 'V'), - (0xAAC3, 'X'), - (0xAADB, 'V'), - (0xAAF7, 'X'), - (0xAB01, 'V'), - (0xAB07, 'X'), - (0xAB09, 'V'), - (0xAB0F, 'X'), - (0xAB11, 'V'), - (0xAB17, 'X'), - (0xAB20, 'V'), - (0xAB27, 'X'), - (0xAB28, 'V'), - (0xAB2F, 'X'), - (0xABC0, 'V'), - (0xABEE, 'X'), - (0xABF0, 'V'), - (0xABFA, 'X'), - (0xAC00, 'V'), - (0xD7A4, 'X'), - (0xD7B0, 'V'), - (0xD7C7, 'X'), - (0xD7CB, 'V'), - (0xD7FC, 'X'), - (0xF900, 'M', u'豈'), - (0xF901, 'M', u'更'), - (0xF902, 'M', u'車'), - (0xF903, 'M', u'賈'), - (0xF904, 'M', u'滑'), - (0xF905, 'M', u'串'), - (0xF906, 'M', u'句'), - (0xF907, 'M', u'龜'), - (0xF909, 'M', u'契'), - (0xF90A, 'M', u'金'), - (0xF90B, 'M', u'喇'), - (0xF90C, 'M', u'奈'), - (0xF90D, 'M', u'懶'), - (0xF90E, 'M', u'癩'), - (0xF90F, 'M', u'羅'), - (0xF910, 'M', u'蘿'), - (0xF911, 'M', u'螺'), - (0xF912, 'M', u'裸'), - (0xF913, 'M', u'邏'), - (0xF914, 'M', u'樂'), - (0xF915, 'M', u'洛'), - (0xF916, 'M', u'烙'), - (0xF917, 'M', u'珞'), - (0xF918, 'M', u'落'), - (0xF919, 'M', u'酪'), - (0xF91A, 'M', u'駱'), - (0xF91B, 'M', u'亂'), - (0xF91C, 'M', u'卵'), - (0xF91D, 'M', u'欄'), - (0xF91E, 'M', u'爛'), - (0xF91F, 'M', u'蘭'), - (0xF920, 'M', u'鸞'), - (0xF921, 'M', u'嵐'), - (0xF922, 'M', u'濫'), - (0xF923, 'M', u'藍'), - (0xF924, 'M', u'襤'), - (0xF925, 'M', u'拉'), - (0xF926, 'M', u'臘'), - (0xF927, 'M', u'蠟'), - (0xF928, 'M', u'廊'), - (0xF929, 'M', u'朗'), - (0xF92A, 'M', u'浪'), - (0xF92B, 'M', u'狼'), - (0xF92C, 'M', u'郎'), - (0xF92D, 'M', u'來'), - ] - -def _seg_38(): - return [ - (0xF92E, 'M', u'冷'), - (0xF92F, 'M', u'勞'), - (0xF930, 'M', u'擄'), - (0xF931, 'M', u'櫓'), - (0xF932, 'M', u'爐'), - (0xF933, 'M', u'盧'), - (0xF934, 'M', u'老'), - (0xF935, 'M', u'蘆'), - (0xF936, 'M', u'虜'), - (0xF937, 'M', u'路'), - (0xF938, 'M', u'露'), - (0xF939, 'M', u'魯'), - (0xF93A, 'M', u'鷺'), - (0xF93B, 'M', u'碌'), - (0xF93C, 'M', u'祿'), - (0xF93D, 'M', u'綠'), - (0xF93E, 'M', u'菉'), - (0xF93F, 'M', u'錄'), - (0xF940, 'M', u'鹿'), - (0xF941, 'M', u'論'), - (0xF942, 'M', u'壟'), - (0xF943, 'M', u'弄'), - (0xF944, 'M', u'籠'), - (0xF945, 'M', u'聾'), - (0xF946, 'M', u'牢'), - (0xF947, 'M', u'磊'), - (0xF948, 'M', u'賂'), - (0xF949, 'M', u'雷'), - (0xF94A, 'M', u'壘'), - (0xF94B, 'M', u'屢'), - (0xF94C, 'M', u'樓'), - (0xF94D, 'M', u'淚'), - (0xF94E, 'M', u'漏'), - (0xF94F, 'M', u'累'), - (0xF950, 'M', u'縷'), - (0xF951, 'M', u'陋'), - (0xF952, 'M', u'勒'), - (0xF953, 'M', u'肋'), - (0xF954, 'M', u'凜'), - (0xF955, 'M', u'凌'), - (0xF956, 'M', u'稜'), - (0xF957, 'M', u'綾'), - (0xF958, 'M', u'菱'), - (0xF959, 'M', u'陵'), - (0xF95A, 'M', u'讀'), - (0xF95B, 'M', u'拏'), - (0xF95C, 'M', u'樂'), - (0xF95D, 'M', u'諾'), - (0xF95E, 'M', u'丹'), - (0xF95F, 'M', u'寧'), - (0xF960, 'M', u'怒'), - (0xF961, 'M', u'率'), - (0xF962, 'M', u'異'), - (0xF963, 'M', u'北'), - (0xF964, 'M', u'磻'), - (0xF965, 'M', u'便'), - (0xF966, 'M', u'復'), - (0xF967, 'M', u'不'), - (0xF968, 'M', u'泌'), - (0xF969, 'M', u'數'), - (0xF96A, 'M', u'索'), - (0xF96B, 'M', u'參'), - (0xF96C, 'M', u'塞'), - (0xF96D, 'M', u'省'), - (0xF96E, 'M', u'葉'), - (0xF96F, 'M', u'說'), - (0xF970, 'M', u'殺'), - (0xF971, 'M', u'辰'), - (0xF972, 'M', u'沈'), - (0xF973, 'M', u'拾'), - (0xF974, 'M', u'若'), - (0xF975, 'M', u'掠'), - (0xF976, 'M', u'略'), - (0xF977, 'M', u'亮'), - (0xF978, 'M', u'兩'), - (0xF979, 'M', u'凉'), - (0xF97A, 'M', u'梁'), - (0xF97B, 'M', u'糧'), - (0xF97C, 'M', u'良'), - (0xF97D, 'M', u'諒'), - (0xF97E, 'M', u'量'), - (0xF97F, 'M', u'勵'), - (0xF980, 'M', u'呂'), - (0xF981, 'M', u'女'), - (0xF982, 'M', u'廬'), - (0xF983, 'M', u'旅'), - (0xF984, 'M', u'濾'), - (0xF985, 'M', u'礪'), - (0xF986, 'M', u'閭'), - (0xF987, 'M', u'驪'), - (0xF988, 'M', u'麗'), - (0xF989, 'M', u'黎'), - (0xF98A, 'M', u'力'), - (0xF98B, 'M', u'曆'), - (0xF98C, 'M', u'歷'), - (0xF98D, 'M', u'轢'), - (0xF98E, 'M', u'年'), - (0xF98F, 'M', u'憐'), - (0xF990, 'M', u'戀'), - (0xF991, 'M', u'撚'), - ] - -def _seg_39(): - return [ - (0xF992, 'M', u'漣'), - (0xF993, 'M', u'煉'), - (0xF994, 'M', u'璉'), - (0xF995, 'M', u'秊'), - (0xF996, 'M', u'練'), - (0xF997, 'M', u'聯'), - (0xF998, 'M', u'輦'), - (0xF999, 'M', u'蓮'), - (0xF99A, 'M', u'連'), - (0xF99B, 'M', u'鍊'), - (0xF99C, 'M', u'列'), - (0xF99D, 'M', u'劣'), - (0xF99E, 'M', u'咽'), - (0xF99F, 'M', u'烈'), - (0xF9A0, 'M', u'裂'), - (0xF9A1, 'M', u'說'), - (0xF9A2, 'M', u'廉'), - (0xF9A3, 'M', u'念'), - (0xF9A4, 'M', u'捻'), - (0xF9A5, 'M', u'殮'), - (0xF9A6, 'M', u'簾'), - (0xF9A7, 'M', u'獵'), - (0xF9A8, 'M', u'令'), - (0xF9A9, 'M', u'囹'), - (0xF9AA, 'M', u'寧'), - (0xF9AB, 'M', u'嶺'), - (0xF9AC, 'M', u'怜'), - (0xF9AD, 'M', u'玲'), - (0xF9AE, 'M', u'瑩'), - (0xF9AF, 'M', u'羚'), - (0xF9B0, 'M', u'聆'), - (0xF9B1, 'M', u'鈴'), - (0xF9B2, 'M', u'零'), - (0xF9B3, 'M', u'靈'), - (0xF9B4, 'M', u'領'), - (0xF9B5, 'M', u'例'), - (0xF9B6, 'M', u'禮'), - (0xF9B7, 'M', u'醴'), - (0xF9B8, 'M', u'隸'), - (0xF9B9, 'M', u'惡'), - (0xF9BA, 'M', u'了'), - (0xF9BB, 'M', u'僚'), - (0xF9BC, 'M', u'寮'), - (0xF9BD, 'M', u'尿'), - (0xF9BE, 'M', u'料'), - (0xF9BF, 'M', u'樂'), - (0xF9C0, 'M', u'燎'), - (0xF9C1, 'M', u'療'), - (0xF9C2, 'M', u'蓼'), - (0xF9C3, 'M', u'遼'), - (0xF9C4, 'M', u'龍'), - (0xF9C5, 'M', u'暈'), - (0xF9C6, 'M', u'阮'), - (0xF9C7, 'M', u'劉'), - (0xF9C8, 'M', u'杻'), - (0xF9C9, 'M', u'柳'), - (0xF9CA, 'M', u'流'), - (0xF9CB, 'M', u'溜'), - (0xF9CC, 'M', u'琉'), - (0xF9CD, 'M', u'留'), - (0xF9CE, 'M', u'硫'), - (0xF9CF, 'M', u'紐'), - (0xF9D0, 'M', u'類'), - (0xF9D1, 'M', u'六'), - (0xF9D2, 'M', u'戮'), - (0xF9D3, 'M', u'陸'), - (0xF9D4, 'M', u'倫'), - (0xF9D5, 'M', u'崙'), - (0xF9D6, 'M', u'淪'), - (0xF9D7, 'M', u'輪'), - (0xF9D8, 'M', u'律'), - (0xF9D9, 'M', u'慄'), - (0xF9DA, 'M', u'栗'), - (0xF9DB, 'M', u'率'), - (0xF9DC, 'M', u'隆'), - (0xF9DD, 'M', u'利'), - (0xF9DE, 'M', u'吏'), - (0xF9DF, 'M', u'履'), - (0xF9E0, 'M', u'易'), - (0xF9E1, 'M', u'李'), - (0xF9E2, 'M', u'梨'), - (0xF9E3, 'M', u'泥'), - (0xF9E4, 'M', u'理'), - (0xF9E5, 'M', u'痢'), - (0xF9E6, 'M', u'罹'), - (0xF9E7, 'M', u'裏'), - (0xF9E8, 'M', u'裡'), - (0xF9E9, 'M', u'里'), - (0xF9EA, 'M', u'離'), - (0xF9EB, 'M', u'匿'), - (0xF9EC, 'M', u'溺'), - (0xF9ED, 'M', u'吝'), - (0xF9EE, 'M', u'燐'), - (0xF9EF, 'M', u'璘'), - (0xF9F0, 'M', u'藺'), - (0xF9F1, 'M', u'隣'), - (0xF9F2, 'M', u'鱗'), - (0xF9F3, 'M', u'麟'), - (0xF9F4, 'M', u'林'), - (0xF9F5, 'M', u'淋'), - ] - -def _seg_40(): - return [ - (0xF9F6, 'M', u'臨'), - (0xF9F7, 'M', u'立'), - (0xF9F8, 'M', u'笠'), - (0xF9F9, 'M', u'粒'), - (0xF9FA, 'M', u'狀'), - (0xF9FB, 'M', u'炙'), - (0xF9FC, 'M', u'識'), - (0xF9FD, 'M', u'什'), - (0xF9FE, 'M', u'茶'), - (0xF9FF, 'M', u'刺'), - (0xFA00, 'M', u'切'), - (0xFA01, 'M', u'度'), - (0xFA02, 'M', u'拓'), - (0xFA03, 'M', u'糖'), - (0xFA04, 'M', u'宅'), - (0xFA05, 'M', u'洞'), - (0xFA06, 'M', u'暴'), - (0xFA07, 'M', u'輻'), - (0xFA08, 'M', u'行'), - (0xFA09, 'M', u'降'), - (0xFA0A, 'M', u'見'), - (0xFA0B, 'M', u'廓'), - (0xFA0C, 'M', u'兀'), - (0xFA0D, 'M', u'嗀'), - (0xFA0E, 'V'), - (0xFA10, 'M', u'塚'), - (0xFA11, 'V'), - (0xFA12, 'M', u'晴'), - (0xFA13, 'V'), - (0xFA15, 'M', u'凞'), - (0xFA16, 'M', u'猪'), - (0xFA17, 'M', u'益'), - (0xFA18, 'M', u'礼'), - (0xFA19, 'M', u'神'), - (0xFA1A, 'M', u'祥'), - (0xFA1B, 'M', u'福'), - (0xFA1C, 'M', u'靖'), - (0xFA1D, 'M', u'精'), - (0xFA1E, 'M', u'羽'), - (0xFA1F, 'V'), - (0xFA20, 'M', u'蘒'), - (0xFA21, 'V'), - (0xFA22, 'M', u'諸'), - (0xFA23, 'V'), - (0xFA25, 'M', u'逸'), - (0xFA26, 'M', u'都'), - (0xFA27, 'V'), - (0xFA2A, 'M', u'飯'), - (0xFA2B, 'M', u'飼'), - (0xFA2C, 'M', u'館'), - (0xFA2D, 'M', u'鶴'), - (0xFA2E, 'M', u'郞'), - (0xFA2F, 'M', u'隷'), - (0xFA30, 'M', u'侮'), - (0xFA31, 'M', u'僧'), - (0xFA32, 'M', u'免'), - (0xFA33, 'M', u'勉'), - (0xFA34, 'M', u'勤'), - (0xFA35, 'M', u'卑'), - (0xFA36, 'M', u'喝'), - (0xFA37, 'M', u'嘆'), - (0xFA38, 'M', u'器'), - (0xFA39, 'M', u'塀'), - (0xFA3A, 'M', u'墨'), - (0xFA3B, 'M', u'層'), - (0xFA3C, 'M', u'屮'), - (0xFA3D, 'M', u'悔'), - (0xFA3E, 'M', u'慨'), - (0xFA3F, 'M', u'憎'), - (0xFA40, 'M', u'懲'), - (0xFA41, 'M', u'敏'), - (0xFA42, 'M', u'既'), - (0xFA43, 'M', u'暑'), - (0xFA44, 'M', u'梅'), - (0xFA45, 'M', u'海'), - (0xFA46, 'M', u'渚'), - (0xFA47, 'M', u'漢'), - (0xFA48, 'M', u'煮'), - (0xFA49, 'M', u'爫'), - (0xFA4A, 'M', u'琢'), - (0xFA4B, 'M', u'碑'), - (0xFA4C, 'M', u'社'), - (0xFA4D, 'M', u'祉'), - (0xFA4E, 'M', u'祈'), - (0xFA4F, 'M', u'祐'), - (0xFA50, 'M', u'祖'), - (0xFA51, 'M', u'祝'), - (0xFA52, 'M', u'禍'), - (0xFA53, 'M', u'禎'), - (0xFA54, 'M', u'穀'), - (0xFA55, 'M', u'突'), - (0xFA56, 'M', u'節'), - (0xFA57, 'M', u'練'), - (0xFA58, 'M', u'縉'), - (0xFA59, 'M', u'繁'), - (0xFA5A, 'M', u'署'), - (0xFA5B, 'M', u'者'), - (0xFA5C, 'M', u'臭'), - (0xFA5D, 'M', u'艹'), - (0xFA5F, 'M', u'著'), - ] - -def _seg_41(): - return [ - (0xFA60, 'M', u'褐'), - (0xFA61, 'M', u'視'), - (0xFA62, 'M', u'謁'), - (0xFA63, 'M', u'謹'), - (0xFA64, 'M', u'賓'), - (0xFA65, 'M', u'贈'), - (0xFA66, 'M', u'辶'), - (0xFA67, 'M', u'逸'), - (0xFA68, 'M', u'難'), - (0xFA69, 'M', u'響'), - (0xFA6A, 'M', u'頻'), - (0xFA6B, 'M', u'恵'), - (0xFA6C, 'M', u'𤋮'), - (0xFA6D, 'M', u'舘'), - (0xFA6E, 'X'), - (0xFA70, 'M', u'並'), - (0xFA71, 'M', u'况'), - (0xFA72, 'M', u'全'), - (0xFA73, 'M', u'侀'), - (0xFA74, 'M', u'充'), - (0xFA75, 'M', u'冀'), - (0xFA76, 'M', u'勇'), - (0xFA77, 'M', u'勺'), - (0xFA78, 'M', u'喝'), - (0xFA79, 'M', u'啕'), - (0xFA7A, 'M', u'喙'), - (0xFA7B, 'M', u'嗢'), - (0xFA7C, 'M', u'塚'), - (0xFA7D, 'M', u'墳'), - (0xFA7E, 'M', u'奄'), - (0xFA7F, 'M', u'奔'), - (0xFA80, 'M', u'婢'), - (0xFA81, 'M', u'嬨'), - (0xFA82, 'M', u'廒'), - (0xFA83, 'M', u'廙'), - (0xFA84, 'M', u'彩'), - (0xFA85, 'M', u'徭'), - (0xFA86, 'M', u'惘'), - (0xFA87, 'M', u'慎'), - (0xFA88, 'M', u'愈'), - (0xFA89, 'M', u'憎'), - (0xFA8A, 'M', u'慠'), - (0xFA8B, 'M', u'懲'), - (0xFA8C, 'M', u'戴'), - (0xFA8D, 'M', u'揄'), - (0xFA8E, 'M', u'搜'), - (0xFA8F, 'M', u'摒'), - (0xFA90, 'M', u'敖'), - (0xFA91, 'M', u'晴'), - (0xFA92, 'M', u'朗'), - (0xFA93, 'M', u'望'), - (0xFA94, 'M', u'杖'), - (0xFA95, 'M', u'歹'), - (0xFA96, 'M', u'殺'), - (0xFA97, 'M', u'流'), - (0xFA98, 'M', u'滛'), - (0xFA99, 'M', u'滋'), - (0xFA9A, 'M', u'漢'), - (0xFA9B, 'M', u'瀞'), - (0xFA9C, 'M', u'煮'), - (0xFA9D, 'M', u'瞧'), - (0xFA9E, 'M', u'爵'), - (0xFA9F, 'M', u'犯'), - (0xFAA0, 'M', u'猪'), - (0xFAA1, 'M', u'瑱'), - (0xFAA2, 'M', u'甆'), - (0xFAA3, 'M', u'画'), - (0xFAA4, 'M', u'瘝'), - (0xFAA5, 'M', u'瘟'), - (0xFAA6, 'M', u'益'), - (0xFAA7, 'M', u'盛'), - (0xFAA8, 'M', u'直'), - (0xFAA9, 'M', u'睊'), - (0xFAAA, 'M', u'着'), - (0xFAAB, 'M', u'磌'), - (0xFAAC, 'M', u'窱'), - (0xFAAD, 'M', u'節'), - (0xFAAE, 'M', u'类'), - (0xFAAF, 'M', u'絛'), - (0xFAB0, 'M', u'練'), - (0xFAB1, 'M', u'缾'), - (0xFAB2, 'M', u'者'), - (0xFAB3, 'M', u'荒'), - (0xFAB4, 'M', u'華'), - (0xFAB5, 'M', u'蝹'), - (0xFAB6, 'M', u'襁'), - (0xFAB7, 'M', u'覆'), - (0xFAB8, 'M', u'視'), - (0xFAB9, 'M', u'調'), - (0xFABA, 'M', u'諸'), - (0xFABB, 'M', u'請'), - (0xFABC, 'M', u'謁'), - (0xFABD, 'M', u'諾'), - (0xFABE, 'M', u'諭'), - (0xFABF, 'M', u'謹'), - (0xFAC0, 'M', u'變'), - (0xFAC1, 'M', u'贈'), - (0xFAC2, 'M', u'輸'), - (0xFAC3, 'M', u'遲'), - (0xFAC4, 'M', u'醙'), - ] - -def _seg_42(): - return [ - (0xFAC5, 'M', u'鉶'), - (0xFAC6, 'M', u'陼'), - (0xFAC7, 'M', u'難'), - (0xFAC8, 'M', u'靖'), - (0xFAC9, 'M', u'韛'), - (0xFACA, 'M', u'響'), - (0xFACB, 'M', u'頋'), - (0xFACC, 'M', u'頻'), - (0xFACD, 'M', u'鬒'), - (0xFACE, 'M', u'龜'), - (0xFACF, 'M', u'𢡊'), - (0xFAD0, 'M', u'𢡄'), - (0xFAD1, 'M', u'𣏕'), - (0xFAD2, 'M', u'㮝'), - (0xFAD3, 'M', u'䀘'), - (0xFAD4, 'M', u'䀹'), - (0xFAD5, 'M', u'𥉉'), - (0xFAD6, 'M', u'𥳐'), - (0xFAD7, 'M', u'𧻓'), - (0xFAD8, 'M', u'齃'), - (0xFAD9, 'M', u'龎'), - (0xFADA, 'X'), - (0xFB00, 'M', u'ff'), - (0xFB01, 'M', u'fi'), - (0xFB02, 'M', u'fl'), - (0xFB03, 'M', u'ffi'), - (0xFB04, 'M', u'ffl'), - (0xFB05, 'M', u'st'), - (0xFB07, 'X'), - (0xFB13, 'M', u'մն'), - (0xFB14, 'M', u'մե'), - (0xFB15, 'M', u'մի'), - (0xFB16, 'M', u'վն'), - (0xFB17, 'M', u'մխ'), - (0xFB18, 'X'), - (0xFB1D, 'M', u'יִ'), - (0xFB1E, 'V'), - (0xFB1F, 'M', u'ײַ'), - (0xFB20, 'M', u'ע'), - (0xFB21, 'M', u'א'), - (0xFB22, 'M', u'ד'), - (0xFB23, 'M', u'ה'), - (0xFB24, 'M', u'כ'), - (0xFB25, 'M', u'ל'), - (0xFB26, 'M', u'ם'), - (0xFB27, 'M', u'ר'), - (0xFB28, 'M', u'ת'), - (0xFB29, '3', u'+'), - (0xFB2A, 'M', u'שׁ'), - (0xFB2B, 'M', u'שׂ'), - (0xFB2C, 'M', u'שּׁ'), - (0xFB2D, 'M', u'שּׂ'), - (0xFB2E, 'M', u'אַ'), - (0xFB2F, 'M', u'אָ'), - (0xFB30, 'M', u'אּ'), - (0xFB31, 'M', u'בּ'), - (0xFB32, 'M', u'גּ'), - (0xFB33, 'M', u'דּ'), - (0xFB34, 'M', u'הּ'), - (0xFB35, 'M', u'וּ'), - (0xFB36, 'M', u'זּ'), - (0xFB37, 'X'), - (0xFB38, 'M', u'טּ'), - (0xFB39, 'M', u'יּ'), - (0xFB3A, 'M', u'ךּ'), - (0xFB3B, 'M', u'כּ'), - (0xFB3C, 'M', u'לּ'), - (0xFB3D, 'X'), - (0xFB3E, 'M', u'מּ'), - (0xFB3F, 'X'), - (0xFB40, 'M', u'נּ'), - (0xFB41, 'M', u'סּ'), - (0xFB42, 'X'), - (0xFB43, 'M', u'ףּ'), - (0xFB44, 'M', u'פּ'), - (0xFB45, 'X'), - (0xFB46, 'M', u'צּ'), - (0xFB47, 'M', u'קּ'), - (0xFB48, 'M', u'רּ'), - (0xFB49, 'M', u'שּ'), - (0xFB4A, 'M', u'תּ'), - (0xFB4B, 'M', u'וֹ'), - (0xFB4C, 'M', u'בֿ'), - (0xFB4D, 'M', u'כֿ'), - (0xFB4E, 'M', u'פֿ'), - (0xFB4F, 'M', u'אל'), - (0xFB50, 'M', u'ٱ'), - (0xFB52, 'M', u'ٻ'), - (0xFB56, 'M', u'پ'), - (0xFB5A, 'M', u'ڀ'), - (0xFB5E, 'M', u'ٺ'), - (0xFB62, 'M', u'ٿ'), - (0xFB66, 'M', u'ٹ'), - (0xFB6A, 'M', u'ڤ'), - (0xFB6E, 'M', u'ڦ'), - (0xFB72, 'M', u'ڄ'), - (0xFB76, 'M', u'ڃ'), - (0xFB7A, 'M', u'چ'), - (0xFB7E, 'M', u'ڇ'), - (0xFB82, 'M', u'ڍ'), - ] - -def _seg_43(): - return [ - (0xFB84, 'M', u'ڌ'), - (0xFB86, 'M', u'ڎ'), - (0xFB88, 'M', u'ڈ'), - (0xFB8A, 'M', u'ژ'), - (0xFB8C, 'M', u'ڑ'), - (0xFB8E, 'M', u'ک'), - (0xFB92, 'M', u'گ'), - (0xFB96, 'M', u'ڳ'), - (0xFB9A, 'M', u'ڱ'), - (0xFB9E, 'M', u'ں'), - (0xFBA0, 'M', u'ڻ'), - (0xFBA4, 'M', u'ۀ'), - (0xFBA6, 'M', u'ہ'), - (0xFBAA, 'M', u'ھ'), - (0xFBAE, 'M', u'ے'), - (0xFBB0, 'M', u'ۓ'), - (0xFBB2, 'V'), - (0xFBC2, 'X'), - (0xFBD3, 'M', u'ڭ'), - (0xFBD7, 'M', u'ۇ'), - (0xFBD9, 'M', u'ۆ'), - (0xFBDB, 'M', u'ۈ'), - (0xFBDD, 'M', u'ۇٴ'), - (0xFBDE, 'M', u'ۋ'), - (0xFBE0, 'M', u'ۅ'), - (0xFBE2, 'M', u'ۉ'), - (0xFBE4, 'M', u'ې'), - (0xFBE8, 'M', u'ى'), - (0xFBEA, 'M', u'ئا'), - (0xFBEC, 'M', u'ئە'), - (0xFBEE, 'M', u'ئو'), - (0xFBF0, 'M', u'ئۇ'), - (0xFBF2, 'M', u'ئۆ'), - (0xFBF4, 'M', u'ئۈ'), - (0xFBF6, 'M', u'ئې'), - (0xFBF9, 'M', u'ئى'), - (0xFBFC, 'M', u'ی'), - (0xFC00, 'M', u'ئج'), - (0xFC01, 'M', u'ئح'), - (0xFC02, 'M', u'ئم'), - (0xFC03, 'M', u'ئى'), - (0xFC04, 'M', u'ئي'), - (0xFC05, 'M', u'بج'), - (0xFC06, 'M', u'بح'), - (0xFC07, 'M', u'بخ'), - (0xFC08, 'M', u'بم'), - (0xFC09, 'M', u'بى'), - (0xFC0A, 'M', u'بي'), - (0xFC0B, 'M', u'تج'), - (0xFC0C, 'M', u'تح'), - (0xFC0D, 'M', u'تخ'), - (0xFC0E, 'M', u'تم'), - (0xFC0F, 'M', u'تى'), - (0xFC10, 'M', u'تي'), - (0xFC11, 'M', u'ثج'), - (0xFC12, 'M', u'ثم'), - (0xFC13, 'M', u'ثى'), - (0xFC14, 'M', u'ثي'), - (0xFC15, 'M', u'جح'), - (0xFC16, 'M', u'جم'), - (0xFC17, 'M', u'حج'), - (0xFC18, 'M', u'حم'), - (0xFC19, 'M', u'خج'), - (0xFC1A, 'M', u'خح'), - (0xFC1B, 'M', u'خم'), - (0xFC1C, 'M', u'سج'), - (0xFC1D, 'M', u'سح'), - (0xFC1E, 'M', u'سخ'), - (0xFC1F, 'M', u'سم'), - (0xFC20, 'M', u'صح'), - (0xFC21, 'M', u'صم'), - (0xFC22, 'M', u'ضج'), - (0xFC23, 'M', u'ضح'), - (0xFC24, 'M', u'ضخ'), - (0xFC25, 'M', u'ضم'), - (0xFC26, 'M', u'طح'), - (0xFC27, 'M', u'طم'), - (0xFC28, 'M', u'ظم'), - (0xFC29, 'M', u'عج'), - (0xFC2A, 'M', u'عم'), - (0xFC2B, 'M', u'غج'), - (0xFC2C, 'M', u'غم'), - (0xFC2D, 'M', u'فج'), - (0xFC2E, 'M', u'فح'), - (0xFC2F, 'M', u'فخ'), - (0xFC30, 'M', u'فم'), - (0xFC31, 'M', u'فى'), - (0xFC32, 'M', u'في'), - (0xFC33, 'M', u'قح'), - (0xFC34, 'M', u'قم'), - (0xFC35, 'M', u'قى'), - (0xFC36, 'M', u'قي'), - (0xFC37, 'M', u'كا'), - (0xFC38, 'M', u'كج'), - (0xFC39, 'M', u'كح'), - (0xFC3A, 'M', u'كخ'), - (0xFC3B, 'M', u'كل'), - (0xFC3C, 'M', u'كم'), - (0xFC3D, 'M', u'كى'), - (0xFC3E, 'M', u'كي'), - ] - -def _seg_44(): - return [ - (0xFC3F, 'M', u'لج'), - (0xFC40, 'M', u'لح'), - (0xFC41, 'M', u'لخ'), - (0xFC42, 'M', u'لم'), - (0xFC43, 'M', u'لى'), - (0xFC44, 'M', u'لي'), - (0xFC45, 'M', u'مج'), - (0xFC46, 'M', u'مح'), - (0xFC47, 'M', u'مخ'), - (0xFC48, 'M', u'مم'), - (0xFC49, 'M', u'مى'), - (0xFC4A, 'M', u'مي'), - (0xFC4B, 'M', u'نج'), - (0xFC4C, 'M', u'نح'), - (0xFC4D, 'M', u'نخ'), - (0xFC4E, 'M', u'نم'), - (0xFC4F, 'M', u'نى'), - (0xFC50, 'M', u'ني'), - (0xFC51, 'M', u'هج'), - (0xFC52, 'M', u'هم'), - (0xFC53, 'M', u'هى'), - (0xFC54, 'M', u'هي'), - (0xFC55, 'M', u'يج'), - (0xFC56, 'M', u'يح'), - (0xFC57, 'M', u'يخ'), - (0xFC58, 'M', u'يم'), - (0xFC59, 'M', u'يى'), - (0xFC5A, 'M', u'يي'), - (0xFC5B, 'M', u'ذٰ'), - (0xFC5C, 'M', u'رٰ'), - (0xFC5D, 'M', u'ىٰ'), - (0xFC5E, '3', u' ٌّ'), - (0xFC5F, '3', u' ٍّ'), - (0xFC60, '3', u' َّ'), - (0xFC61, '3', u' ُّ'), - (0xFC62, '3', u' ِّ'), - (0xFC63, '3', u' ّٰ'), - (0xFC64, 'M', u'ئر'), - (0xFC65, 'M', u'ئز'), - (0xFC66, 'M', u'ئم'), - (0xFC67, 'M', u'ئن'), - (0xFC68, 'M', u'ئى'), - (0xFC69, 'M', u'ئي'), - (0xFC6A, 'M', u'بر'), - (0xFC6B, 'M', u'بز'), - (0xFC6C, 'M', u'بم'), - (0xFC6D, 'M', u'بن'), - (0xFC6E, 'M', u'بى'), - (0xFC6F, 'M', u'بي'), - (0xFC70, 'M', u'تر'), - (0xFC71, 'M', u'تز'), - (0xFC72, 'M', u'تم'), - (0xFC73, 'M', u'تن'), - (0xFC74, 'M', u'تى'), - (0xFC75, 'M', u'تي'), - (0xFC76, 'M', u'ثر'), - (0xFC77, 'M', u'ثز'), - (0xFC78, 'M', u'ثم'), - (0xFC79, 'M', u'ثن'), - (0xFC7A, 'M', u'ثى'), - (0xFC7B, 'M', u'ثي'), - (0xFC7C, 'M', u'فى'), - (0xFC7D, 'M', u'في'), - (0xFC7E, 'M', u'قى'), - (0xFC7F, 'M', u'قي'), - (0xFC80, 'M', u'كا'), - (0xFC81, 'M', u'كل'), - (0xFC82, 'M', u'كم'), - (0xFC83, 'M', u'كى'), - (0xFC84, 'M', u'كي'), - (0xFC85, 'M', u'لم'), - (0xFC86, 'M', u'لى'), - (0xFC87, 'M', u'لي'), - (0xFC88, 'M', u'ما'), - (0xFC89, 'M', u'مم'), - (0xFC8A, 'M', u'نر'), - (0xFC8B, 'M', u'نز'), - (0xFC8C, 'M', u'نم'), - (0xFC8D, 'M', u'نن'), - (0xFC8E, 'M', u'نى'), - (0xFC8F, 'M', u'ني'), - (0xFC90, 'M', u'ىٰ'), - (0xFC91, 'M', u'ير'), - (0xFC92, 'M', u'يز'), - (0xFC93, 'M', u'يم'), - (0xFC94, 'M', u'ين'), - (0xFC95, 'M', u'يى'), - (0xFC96, 'M', u'يي'), - (0xFC97, 'M', u'ئج'), - (0xFC98, 'M', u'ئح'), - (0xFC99, 'M', u'ئخ'), - (0xFC9A, 'M', u'ئم'), - (0xFC9B, 'M', u'ئه'), - (0xFC9C, 'M', u'بج'), - (0xFC9D, 'M', u'بح'), - (0xFC9E, 'M', u'بخ'), - (0xFC9F, 'M', u'بم'), - (0xFCA0, 'M', u'به'), - (0xFCA1, 'M', u'تج'), - (0xFCA2, 'M', u'تح'), - ] - -def _seg_45(): - return [ - (0xFCA3, 'M', u'تخ'), - (0xFCA4, 'M', u'تم'), - (0xFCA5, 'M', u'ته'), - (0xFCA6, 'M', u'ثم'), - (0xFCA7, 'M', u'جح'), - (0xFCA8, 'M', u'جم'), - (0xFCA9, 'M', u'حج'), - (0xFCAA, 'M', u'حم'), - (0xFCAB, 'M', u'خج'), - (0xFCAC, 'M', u'خم'), - (0xFCAD, 'M', u'سج'), - (0xFCAE, 'M', u'سح'), - (0xFCAF, 'M', u'سخ'), - (0xFCB0, 'M', u'سم'), - (0xFCB1, 'M', u'صح'), - (0xFCB2, 'M', u'صخ'), - (0xFCB3, 'M', u'صم'), - (0xFCB4, 'M', u'ضج'), - (0xFCB5, 'M', u'ضح'), - (0xFCB6, 'M', u'ضخ'), - (0xFCB7, 'M', u'ضم'), - (0xFCB8, 'M', u'طح'), - (0xFCB9, 'M', u'ظم'), - (0xFCBA, 'M', u'عج'), - (0xFCBB, 'M', u'عم'), - (0xFCBC, 'M', u'غج'), - (0xFCBD, 'M', u'غم'), - (0xFCBE, 'M', u'فج'), - (0xFCBF, 'M', u'فح'), - (0xFCC0, 'M', u'فخ'), - (0xFCC1, 'M', u'فم'), - (0xFCC2, 'M', u'قح'), - (0xFCC3, 'M', u'قم'), - (0xFCC4, 'M', u'كج'), - (0xFCC5, 'M', u'كح'), - (0xFCC6, 'M', u'كخ'), - (0xFCC7, 'M', u'كل'), - (0xFCC8, 'M', u'كم'), - (0xFCC9, 'M', u'لج'), - (0xFCCA, 'M', u'لح'), - (0xFCCB, 'M', u'لخ'), - (0xFCCC, 'M', u'لم'), - (0xFCCD, 'M', u'له'), - (0xFCCE, 'M', u'مج'), - (0xFCCF, 'M', u'مح'), - (0xFCD0, 'M', u'مخ'), - (0xFCD1, 'M', u'مم'), - (0xFCD2, 'M', u'نج'), - (0xFCD3, 'M', u'نح'), - (0xFCD4, 'M', u'نخ'), - (0xFCD5, 'M', u'نم'), - (0xFCD6, 'M', u'نه'), - (0xFCD7, 'M', u'هج'), - (0xFCD8, 'M', u'هم'), - (0xFCD9, 'M', u'هٰ'), - (0xFCDA, 'M', u'يج'), - (0xFCDB, 'M', u'يح'), - (0xFCDC, 'M', u'يخ'), - (0xFCDD, 'M', u'يم'), - (0xFCDE, 'M', u'يه'), - (0xFCDF, 'M', u'ئم'), - (0xFCE0, 'M', u'ئه'), - (0xFCE1, 'M', u'بم'), - (0xFCE2, 'M', u'به'), - (0xFCE3, 'M', u'تم'), - (0xFCE4, 'M', u'ته'), - (0xFCE5, 'M', u'ثم'), - (0xFCE6, 'M', u'ثه'), - (0xFCE7, 'M', u'سم'), - (0xFCE8, 'M', u'سه'), - (0xFCE9, 'M', u'شم'), - (0xFCEA, 'M', u'شه'), - (0xFCEB, 'M', u'كل'), - (0xFCEC, 'M', u'كم'), - (0xFCED, 'M', u'لم'), - (0xFCEE, 'M', u'نم'), - (0xFCEF, 'M', u'نه'), - (0xFCF0, 'M', u'يم'), - (0xFCF1, 'M', u'يه'), - (0xFCF2, 'M', u'ـَّ'), - (0xFCF3, 'M', u'ـُّ'), - (0xFCF4, 'M', u'ـِّ'), - (0xFCF5, 'M', u'طى'), - (0xFCF6, 'M', u'طي'), - (0xFCF7, 'M', u'عى'), - (0xFCF8, 'M', u'عي'), - (0xFCF9, 'M', u'غى'), - (0xFCFA, 'M', u'غي'), - (0xFCFB, 'M', u'سى'), - (0xFCFC, 'M', u'سي'), - (0xFCFD, 'M', u'شى'), - (0xFCFE, 'M', u'شي'), - (0xFCFF, 'M', u'حى'), - (0xFD00, 'M', u'حي'), - (0xFD01, 'M', u'جى'), - (0xFD02, 'M', u'جي'), - (0xFD03, 'M', u'خى'), - (0xFD04, 'M', u'خي'), - (0xFD05, 'M', u'صى'), - (0xFD06, 'M', u'صي'), - ] - -def _seg_46(): - return [ - (0xFD07, 'M', u'ضى'), - (0xFD08, 'M', u'ضي'), - (0xFD09, 'M', u'شج'), - (0xFD0A, 'M', u'شح'), - (0xFD0B, 'M', u'شخ'), - (0xFD0C, 'M', u'شم'), - (0xFD0D, 'M', u'شر'), - (0xFD0E, 'M', u'سر'), - (0xFD0F, 'M', u'صر'), - (0xFD10, 'M', u'ضر'), - (0xFD11, 'M', u'طى'), - (0xFD12, 'M', u'طي'), - (0xFD13, 'M', u'عى'), - (0xFD14, 'M', u'عي'), - (0xFD15, 'M', u'غى'), - (0xFD16, 'M', u'غي'), - (0xFD17, 'M', u'سى'), - (0xFD18, 'M', u'سي'), - (0xFD19, 'M', u'شى'), - (0xFD1A, 'M', u'شي'), - (0xFD1B, 'M', u'حى'), - (0xFD1C, 'M', u'حي'), - (0xFD1D, 'M', u'جى'), - (0xFD1E, 'M', u'جي'), - (0xFD1F, 'M', u'خى'), - (0xFD20, 'M', u'خي'), - (0xFD21, 'M', u'صى'), - (0xFD22, 'M', u'صي'), - (0xFD23, 'M', u'ضى'), - (0xFD24, 'M', u'ضي'), - (0xFD25, 'M', u'شج'), - (0xFD26, 'M', u'شح'), - (0xFD27, 'M', u'شخ'), - (0xFD28, 'M', u'شم'), - (0xFD29, 'M', u'شر'), - (0xFD2A, 'M', u'سر'), - (0xFD2B, 'M', u'صر'), - (0xFD2C, 'M', u'ضر'), - (0xFD2D, 'M', u'شج'), - (0xFD2E, 'M', u'شح'), - (0xFD2F, 'M', u'شخ'), - (0xFD30, 'M', u'شم'), - (0xFD31, 'M', u'سه'), - (0xFD32, 'M', u'شه'), - (0xFD33, 'M', u'طم'), - (0xFD34, 'M', u'سج'), - (0xFD35, 'M', u'سح'), - (0xFD36, 'M', u'سخ'), - (0xFD37, 'M', u'شج'), - (0xFD38, 'M', u'شح'), - (0xFD39, 'M', u'شخ'), - (0xFD3A, 'M', u'طم'), - (0xFD3B, 'M', u'ظم'), - (0xFD3C, 'M', u'اً'), - (0xFD3E, 'V'), - (0xFD40, 'X'), - (0xFD50, 'M', u'تجم'), - (0xFD51, 'M', u'تحج'), - (0xFD53, 'M', u'تحم'), - (0xFD54, 'M', u'تخم'), - (0xFD55, 'M', u'تمج'), - (0xFD56, 'M', u'تمح'), - (0xFD57, 'M', u'تمخ'), - (0xFD58, 'M', u'جمح'), - (0xFD5A, 'M', u'حمي'), - (0xFD5B, 'M', u'حمى'), - (0xFD5C, 'M', u'سحج'), - (0xFD5D, 'M', u'سجح'), - (0xFD5E, 'M', u'سجى'), - (0xFD5F, 'M', u'سمح'), - (0xFD61, 'M', u'سمج'), - (0xFD62, 'M', u'سمم'), - (0xFD64, 'M', u'صحح'), - (0xFD66, 'M', u'صمم'), - (0xFD67, 'M', u'شحم'), - (0xFD69, 'M', u'شجي'), - (0xFD6A, 'M', u'شمخ'), - (0xFD6C, 'M', u'شمم'), - (0xFD6E, 'M', u'ضحى'), - (0xFD6F, 'M', u'ضخم'), - (0xFD71, 'M', u'طمح'), - (0xFD73, 'M', u'طمم'), - (0xFD74, 'M', u'طمي'), - (0xFD75, 'M', u'عجم'), - (0xFD76, 'M', u'عمم'), - (0xFD78, 'M', u'عمى'), - (0xFD79, 'M', u'غمم'), - (0xFD7A, 'M', u'غمي'), - (0xFD7B, 'M', u'غمى'), - (0xFD7C, 'M', u'فخم'), - (0xFD7E, 'M', u'قمح'), - (0xFD7F, 'M', u'قمم'), - (0xFD80, 'M', u'لحم'), - (0xFD81, 'M', u'لحي'), - (0xFD82, 'M', u'لحى'), - (0xFD83, 'M', u'لجج'), - (0xFD85, 'M', u'لخم'), - (0xFD87, 'M', u'لمح'), - (0xFD89, 'M', u'محج'), - (0xFD8A, 'M', u'محم'), - ] - -def _seg_47(): - return [ - (0xFD8B, 'M', u'محي'), - (0xFD8C, 'M', u'مجح'), - (0xFD8D, 'M', u'مجم'), - (0xFD8E, 'M', u'مخج'), - (0xFD8F, 'M', u'مخم'), - (0xFD90, 'X'), - (0xFD92, 'M', u'مجخ'), - (0xFD93, 'M', u'همج'), - (0xFD94, 'M', u'همم'), - (0xFD95, 'M', u'نحم'), - (0xFD96, 'M', u'نحى'), - (0xFD97, 'M', u'نجم'), - (0xFD99, 'M', u'نجى'), - (0xFD9A, 'M', u'نمي'), - (0xFD9B, 'M', u'نمى'), - (0xFD9C, 'M', u'يمم'), - (0xFD9E, 'M', u'بخي'), - (0xFD9F, 'M', u'تجي'), - (0xFDA0, 'M', u'تجى'), - (0xFDA1, 'M', u'تخي'), - (0xFDA2, 'M', u'تخى'), - (0xFDA3, 'M', u'تمي'), - (0xFDA4, 'M', u'تمى'), - (0xFDA5, 'M', u'جمي'), - (0xFDA6, 'M', u'جحى'), - (0xFDA7, 'M', u'جمى'), - (0xFDA8, 'M', u'سخى'), - (0xFDA9, 'M', u'صحي'), - (0xFDAA, 'M', u'شحي'), - (0xFDAB, 'M', u'ضحي'), - (0xFDAC, 'M', u'لجي'), - (0xFDAD, 'M', u'لمي'), - (0xFDAE, 'M', u'يحي'), - (0xFDAF, 'M', u'يجي'), - (0xFDB0, 'M', u'يمي'), - (0xFDB1, 'M', u'ممي'), - (0xFDB2, 'M', u'قمي'), - (0xFDB3, 'M', u'نحي'), - (0xFDB4, 'M', u'قمح'), - (0xFDB5, 'M', u'لحم'), - (0xFDB6, 'M', u'عمي'), - (0xFDB7, 'M', u'كمي'), - (0xFDB8, 'M', u'نجح'), - (0xFDB9, 'M', u'مخي'), - (0xFDBA, 'M', u'لجم'), - (0xFDBB, 'M', u'كمم'), - (0xFDBC, 'M', u'لجم'), - (0xFDBD, 'M', u'نجح'), - (0xFDBE, 'M', u'جحي'), - (0xFDBF, 'M', u'حجي'), - (0xFDC0, 'M', u'مجي'), - (0xFDC1, 'M', u'فمي'), - (0xFDC2, 'M', u'بحي'), - (0xFDC3, 'M', u'كمم'), - (0xFDC4, 'M', u'عجم'), - (0xFDC5, 'M', u'صمم'), - (0xFDC6, 'M', u'سخي'), - (0xFDC7, 'M', u'نجي'), - (0xFDC8, 'X'), - (0xFDF0, 'M', u'صلے'), - (0xFDF1, 'M', u'قلے'), - (0xFDF2, 'M', u'الله'), - (0xFDF3, 'M', u'اكبر'), - (0xFDF4, 'M', u'محمد'), - (0xFDF5, 'M', u'صلعم'), - (0xFDF6, 'M', u'رسول'), - (0xFDF7, 'M', u'عليه'), - (0xFDF8, 'M', u'وسلم'), - (0xFDF9, 'M', u'صلى'), - (0xFDFA, '3', u'صلى الله عليه وسلم'), - (0xFDFB, '3', u'جل جلاله'), - (0xFDFC, 'M', u'ریال'), - (0xFDFD, 'V'), - (0xFDFE, 'X'), - (0xFE00, 'I'), - (0xFE10, '3', u','), - (0xFE11, 'M', u'、'), - (0xFE12, 'X'), - (0xFE13, '3', u':'), - (0xFE14, '3', u';'), - (0xFE15, '3', u'!'), - (0xFE16, '3', u'?'), - (0xFE17, 'M', u'〖'), - (0xFE18, 'M', u'〗'), - (0xFE19, 'X'), - (0xFE20, 'V'), - (0xFE27, 'X'), - (0xFE31, 'M', u'—'), - (0xFE32, 'M', u'–'), - (0xFE33, '3', u'_'), - (0xFE35, '3', u'('), - (0xFE36, '3', u')'), - (0xFE37, '3', u'{'), - (0xFE38, '3', u'}'), - (0xFE39, 'M', u'〔'), - (0xFE3A, 'M', u'〕'), - (0xFE3B, 'M', u'【'), - (0xFE3C, 'M', u'】'), - (0xFE3D, 'M', u'《'), - (0xFE3E, 'M', u'》'), - ] - -def _seg_48(): - return [ - (0xFE3F, 'M', u'〈'), - (0xFE40, 'M', u'〉'), - (0xFE41, 'M', u'「'), - (0xFE42, 'M', u'」'), - (0xFE43, 'M', u'『'), - (0xFE44, 'M', u'』'), - (0xFE45, 'V'), - (0xFE47, '3', u'['), - (0xFE48, '3', u']'), - (0xFE49, '3', u' ̅'), - (0xFE4D, '3', u'_'), - (0xFE50, '3', u','), - (0xFE51, 'M', u'、'), - (0xFE52, 'X'), - (0xFE54, '3', u';'), - (0xFE55, '3', u':'), - (0xFE56, '3', u'?'), - (0xFE57, '3', u'!'), - (0xFE58, 'M', u'—'), - (0xFE59, '3', u'('), - (0xFE5A, '3', u')'), - (0xFE5B, '3', u'{'), - (0xFE5C, '3', u'}'), - (0xFE5D, 'M', u'〔'), - (0xFE5E, 'M', u'〕'), - (0xFE5F, '3', u'#'), - (0xFE60, '3', u'&'), - (0xFE61, '3', u'*'), - (0xFE62, '3', u'+'), - (0xFE63, 'M', u'-'), - (0xFE64, '3', u'<'), - (0xFE65, '3', u'>'), - (0xFE66, '3', u'='), - (0xFE67, 'X'), - (0xFE68, '3', u'\\'), - (0xFE69, '3', u'$'), - (0xFE6A, '3', u'%'), - (0xFE6B, '3', u'@'), - (0xFE6C, 'X'), - (0xFE70, '3', u' ً'), - (0xFE71, 'M', u'ـً'), - (0xFE72, '3', u' ٌ'), - (0xFE73, 'V'), - (0xFE74, '3', u' ٍ'), - (0xFE75, 'X'), - (0xFE76, '3', u' َ'), - (0xFE77, 'M', u'ـَ'), - (0xFE78, '3', u' ُ'), - (0xFE79, 'M', u'ـُ'), - (0xFE7A, '3', u' ِ'), - (0xFE7B, 'M', u'ـِ'), - (0xFE7C, '3', u' ّ'), - (0xFE7D, 'M', u'ـّ'), - (0xFE7E, '3', u' ْ'), - (0xFE7F, 'M', u'ـْ'), - (0xFE80, 'M', u'ء'), - (0xFE81, 'M', u'آ'), - (0xFE83, 'M', u'أ'), - (0xFE85, 'M', u'ؤ'), - (0xFE87, 'M', u'إ'), - (0xFE89, 'M', u'ئ'), - (0xFE8D, 'M', u'ا'), - (0xFE8F, 'M', u'ب'), - (0xFE93, 'M', u'ة'), - (0xFE95, 'M', u'ت'), - (0xFE99, 'M', u'ث'), - (0xFE9D, 'M', u'ج'), - (0xFEA1, 'M', u'ح'), - (0xFEA5, 'M', u'خ'), - (0xFEA9, 'M', u'د'), - (0xFEAB, 'M', u'ذ'), - (0xFEAD, 'M', u'ر'), - (0xFEAF, 'M', u'ز'), - (0xFEB1, 'M', u'س'), - (0xFEB5, 'M', u'ش'), - (0xFEB9, 'M', u'ص'), - (0xFEBD, 'M', u'ض'), - (0xFEC1, 'M', u'ط'), - (0xFEC5, 'M', u'ظ'), - (0xFEC9, 'M', u'ع'), - (0xFECD, 'M', u'غ'), - (0xFED1, 'M', u'ف'), - (0xFED5, 'M', u'ق'), - (0xFED9, 'M', u'ك'), - (0xFEDD, 'M', u'ل'), - (0xFEE1, 'M', u'م'), - (0xFEE5, 'M', u'ن'), - (0xFEE9, 'M', u'ه'), - (0xFEED, 'M', u'و'), - (0xFEEF, 'M', u'ى'), - (0xFEF1, 'M', u'ي'), - (0xFEF5, 'M', u'لآ'), - (0xFEF7, 'M', u'لأ'), - (0xFEF9, 'M', u'لإ'), - (0xFEFB, 'M', u'لا'), - (0xFEFD, 'X'), - (0xFEFF, 'I'), - (0xFF00, 'X'), - (0xFF01, '3', u'!'), - (0xFF02, '3', u'"'), - ] - -def _seg_49(): - return [ - (0xFF03, '3', u'#'), - (0xFF04, '3', u'$'), - (0xFF05, '3', u'%'), - (0xFF06, '3', u'&'), - (0xFF07, '3', u'\''), - (0xFF08, '3', u'('), - (0xFF09, '3', u')'), - (0xFF0A, '3', u'*'), - (0xFF0B, '3', u'+'), - (0xFF0C, '3', u','), - (0xFF0D, 'M', u'-'), - (0xFF0E, 'M', u'.'), - (0xFF0F, '3', u'/'), - (0xFF10, 'M', u'0'), - (0xFF11, 'M', u'1'), - (0xFF12, 'M', u'2'), - (0xFF13, 'M', u'3'), - (0xFF14, 'M', u'4'), - (0xFF15, 'M', u'5'), - (0xFF16, 'M', u'6'), - (0xFF17, 'M', u'7'), - (0xFF18, 'M', u'8'), - (0xFF19, 'M', u'9'), - (0xFF1A, '3', u':'), - (0xFF1B, '3', u';'), - (0xFF1C, '3', u'<'), - (0xFF1D, '3', u'='), - (0xFF1E, '3', u'>'), - (0xFF1F, '3', u'?'), - (0xFF20, '3', u'@'), - (0xFF21, 'M', u'a'), - (0xFF22, 'M', u'b'), - (0xFF23, 'M', u'c'), - (0xFF24, 'M', u'd'), - (0xFF25, 'M', u'e'), - (0xFF26, 'M', u'f'), - (0xFF27, 'M', u'g'), - (0xFF28, 'M', u'h'), - (0xFF29, 'M', u'i'), - (0xFF2A, 'M', u'j'), - (0xFF2B, 'M', u'k'), - (0xFF2C, 'M', u'l'), - (0xFF2D, 'M', u'm'), - (0xFF2E, 'M', u'n'), - (0xFF2F, 'M', u'o'), - (0xFF30, 'M', u'p'), - (0xFF31, 'M', u'q'), - (0xFF32, 'M', u'r'), - (0xFF33, 'M', u's'), - (0xFF34, 'M', u't'), - (0xFF35, 'M', u'u'), - (0xFF36, 'M', u'v'), - (0xFF37, 'M', u'w'), - (0xFF38, 'M', u'x'), - (0xFF39, 'M', u'y'), - (0xFF3A, 'M', u'z'), - (0xFF3B, '3', u'['), - (0xFF3C, '3', u'\\'), - (0xFF3D, '3', u']'), - (0xFF3E, '3', u'^'), - (0xFF3F, '3', u'_'), - (0xFF40, '3', u'`'), - (0xFF41, 'M', u'a'), - (0xFF42, 'M', u'b'), - (0xFF43, 'M', u'c'), - (0xFF44, 'M', u'd'), - (0xFF45, 'M', u'e'), - (0xFF46, 'M', u'f'), - (0xFF47, 'M', u'g'), - (0xFF48, 'M', u'h'), - (0xFF49, 'M', u'i'), - (0xFF4A, 'M', u'j'), - (0xFF4B, 'M', u'k'), - (0xFF4C, 'M', u'l'), - (0xFF4D, 'M', u'm'), - (0xFF4E, 'M', u'n'), - (0xFF4F, 'M', u'o'), - (0xFF50, 'M', u'p'), - (0xFF51, 'M', u'q'), - (0xFF52, 'M', u'r'), - (0xFF53, 'M', u's'), - (0xFF54, 'M', u't'), - (0xFF55, 'M', u'u'), - (0xFF56, 'M', u'v'), - (0xFF57, 'M', u'w'), - (0xFF58, 'M', u'x'), - (0xFF59, 'M', u'y'), - (0xFF5A, 'M', u'z'), - (0xFF5B, '3', u'{'), - (0xFF5C, '3', u'|'), - (0xFF5D, '3', u'}'), - (0xFF5E, '3', u'~'), - (0xFF5F, 'M', u'⦅'), - (0xFF60, 'M', u'⦆'), - (0xFF61, 'M', u'.'), - (0xFF62, 'M', u'「'), - (0xFF63, 'M', u'」'), - (0xFF64, 'M', u'、'), - (0xFF65, 'M', u'・'), - (0xFF66, 'M', u'ヲ'), - ] - -def _seg_50(): - return [ - (0xFF67, 'M', u'ァ'), - (0xFF68, 'M', u'ィ'), - (0xFF69, 'M', u'ゥ'), - (0xFF6A, 'M', u'ェ'), - (0xFF6B, 'M', u'ォ'), - (0xFF6C, 'M', u'ャ'), - (0xFF6D, 'M', u'ュ'), - (0xFF6E, 'M', u'ョ'), - (0xFF6F, 'M', u'ッ'), - (0xFF70, 'M', u'ー'), - (0xFF71, 'M', u'ア'), - (0xFF72, 'M', u'イ'), - (0xFF73, 'M', u'ウ'), - (0xFF74, 'M', u'エ'), - (0xFF75, 'M', u'オ'), - (0xFF76, 'M', u'カ'), - (0xFF77, 'M', u'キ'), - (0xFF78, 'M', u'ク'), - (0xFF79, 'M', u'ケ'), - (0xFF7A, 'M', u'コ'), - (0xFF7B, 'M', u'サ'), - (0xFF7C, 'M', u'シ'), - (0xFF7D, 'M', u'ス'), - (0xFF7E, 'M', u'セ'), - (0xFF7F, 'M', u'ソ'), - (0xFF80, 'M', u'タ'), - (0xFF81, 'M', u'チ'), - (0xFF82, 'M', u'ツ'), - (0xFF83, 'M', u'テ'), - (0xFF84, 'M', u'ト'), - (0xFF85, 'M', u'ナ'), - (0xFF86, 'M', u'ニ'), - (0xFF87, 'M', u'ヌ'), - (0xFF88, 'M', u'ネ'), - (0xFF89, 'M', u'ノ'), - (0xFF8A, 'M', u'ハ'), - (0xFF8B, 'M', u'ヒ'), - (0xFF8C, 'M', u'フ'), - (0xFF8D, 'M', u'ヘ'), - (0xFF8E, 'M', u'ホ'), - (0xFF8F, 'M', u'マ'), - (0xFF90, 'M', u'ミ'), - (0xFF91, 'M', u'ム'), - (0xFF92, 'M', u'メ'), - (0xFF93, 'M', u'モ'), - (0xFF94, 'M', u'ヤ'), - (0xFF95, 'M', u'ユ'), - (0xFF96, 'M', u'ヨ'), - (0xFF97, 'M', u'ラ'), - (0xFF98, 'M', u'リ'), - (0xFF99, 'M', u'ル'), - (0xFF9A, 'M', u'レ'), - (0xFF9B, 'M', u'ロ'), - (0xFF9C, 'M', u'ワ'), - (0xFF9D, 'M', u'ン'), - (0xFF9E, 'M', u'゙'), - (0xFF9F, 'M', u'゚'), - (0xFFA0, 'X'), - (0xFFA1, 'M', u'ᄀ'), - (0xFFA2, 'M', u'ᄁ'), - (0xFFA3, 'M', u'ᆪ'), - (0xFFA4, 'M', u'ᄂ'), - (0xFFA5, 'M', u'ᆬ'), - (0xFFA6, 'M', u'ᆭ'), - (0xFFA7, 'M', u'ᄃ'), - (0xFFA8, 'M', u'ᄄ'), - (0xFFA9, 'M', u'ᄅ'), - (0xFFAA, 'M', u'ᆰ'), - (0xFFAB, 'M', u'ᆱ'), - (0xFFAC, 'M', u'ᆲ'), - (0xFFAD, 'M', u'ᆳ'), - (0xFFAE, 'M', u'ᆴ'), - (0xFFAF, 'M', u'ᆵ'), - (0xFFB0, 'M', u'ᄚ'), - (0xFFB1, 'M', u'ᄆ'), - (0xFFB2, 'M', u'ᄇ'), - (0xFFB3, 'M', u'ᄈ'), - (0xFFB4, 'M', u'ᄡ'), - (0xFFB5, 'M', u'ᄉ'), - (0xFFB6, 'M', u'ᄊ'), - (0xFFB7, 'M', u'ᄋ'), - (0xFFB8, 'M', u'ᄌ'), - (0xFFB9, 'M', u'ᄍ'), - (0xFFBA, 'M', u'ᄎ'), - (0xFFBB, 'M', u'ᄏ'), - (0xFFBC, 'M', u'ᄐ'), - (0xFFBD, 'M', u'ᄑ'), - (0xFFBE, 'M', u'ᄒ'), - (0xFFBF, 'X'), - (0xFFC2, 'M', u'ᅡ'), - (0xFFC3, 'M', u'ᅢ'), - (0xFFC4, 'M', u'ᅣ'), - (0xFFC5, 'M', u'ᅤ'), - (0xFFC6, 'M', u'ᅥ'), - (0xFFC7, 'M', u'ᅦ'), - (0xFFC8, 'X'), - (0xFFCA, 'M', u'ᅧ'), - (0xFFCB, 'M', u'ᅨ'), - (0xFFCC, 'M', u'ᅩ'), - (0xFFCD, 'M', u'ᅪ'), - ] - -def _seg_51(): - return [ - (0xFFCE, 'M', u'ᅫ'), - (0xFFCF, 'M', u'ᅬ'), - (0xFFD0, 'X'), - (0xFFD2, 'M', u'ᅭ'), - (0xFFD3, 'M', u'ᅮ'), - (0xFFD4, 'M', u'ᅯ'), - (0xFFD5, 'M', u'ᅰ'), - (0xFFD6, 'M', u'ᅱ'), - (0xFFD7, 'M', u'ᅲ'), - (0xFFD8, 'X'), - (0xFFDA, 'M', u'ᅳ'), - (0xFFDB, 'M', u'ᅴ'), - (0xFFDC, 'M', u'ᅵ'), - (0xFFDD, 'X'), - (0xFFE0, 'M', u'¢'), - (0xFFE1, 'M', u'£'), - (0xFFE2, 'M', u'¬'), - (0xFFE3, '3', u' ̄'), - (0xFFE4, 'M', u'¦'), - (0xFFE5, 'M', u'¥'), - (0xFFE6, 'M', u'₩'), - (0xFFE7, 'X'), - (0xFFE8, 'M', u'│'), - (0xFFE9, 'M', u'←'), - (0xFFEA, 'M', u'↑'), - (0xFFEB, 'M', u'→'), - (0xFFEC, 'M', u'↓'), - (0xFFED, 'M', u'■'), - (0xFFEE, 'M', u'○'), - (0xFFEF, 'X'), - (0x10000, 'V'), - (0x1000C, 'X'), - (0x1000D, 'V'), - (0x10027, 'X'), - (0x10028, 'V'), - (0x1003B, 'X'), - (0x1003C, 'V'), - (0x1003E, 'X'), - (0x1003F, 'V'), - (0x1004E, 'X'), - (0x10050, 'V'), - (0x1005E, 'X'), - (0x10080, 'V'), - (0x100FB, 'X'), - (0x10100, 'V'), - (0x10103, 'X'), - (0x10107, 'V'), - (0x10134, 'X'), - (0x10137, 'V'), - (0x1018B, 'X'), - (0x10190, 'V'), - (0x1019C, 'X'), - (0x101D0, 'V'), - (0x101FE, 'X'), - (0x10280, 'V'), - (0x1029D, 'X'), - (0x102A0, 'V'), - (0x102D1, 'X'), - (0x10300, 'V'), - (0x1031F, 'X'), - (0x10320, 'V'), - (0x10324, 'X'), - (0x10330, 'V'), - (0x1034B, 'X'), - (0x10380, 'V'), - (0x1039E, 'X'), - (0x1039F, 'V'), - (0x103C4, 'X'), - (0x103C8, 'V'), - (0x103D6, 'X'), - (0x10400, 'M', u'𐐨'), - (0x10401, 'M', u'𐐩'), - (0x10402, 'M', u'𐐪'), - (0x10403, 'M', u'𐐫'), - (0x10404, 'M', u'𐐬'), - (0x10405, 'M', u'𐐭'), - (0x10406, 'M', u'𐐮'), - (0x10407, 'M', u'𐐯'), - (0x10408, 'M', u'𐐰'), - (0x10409, 'M', u'𐐱'), - (0x1040A, 'M', u'𐐲'), - (0x1040B, 'M', u'𐐳'), - (0x1040C, 'M', u'𐐴'), - (0x1040D, 'M', u'𐐵'), - (0x1040E, 'M', u'𐐶'), - (0x1040F, 'M', u'𐐷'), - (0x10410, 'M', u'𐐸'), - (0x10411, 'M', u'𐐹'), - (0x10412, 'M', u'𐐺'), - (0x10413, 'M', u'𐐻'), - (0x10414, 'M', u'𐐼'), - (0x10415, 'M', u'𐐽'), - (0x10416, 'M', u'𐐾'), - (0x10417, 'M', u'𐐿'), - (0x10418, 'M', u'𐑀'), - (0x10419, 'M', u'𐑁'), - (0x1041A, 'M', u'𐑂'), - (0x1041B, 'M', u'𐑃'), - (0x1041C, 'M', u'𐑄'), - (0x1041D, 'M', u'𐑅'), - ] - -def _seg_52(): - return [ - (0x1041E, 'M', u'𐑆'), - (0x1041F, 'M', u'𐑇'), - (0x10420, 'M', u'𐑈'), - (0x10421, 'M', u'𐑉'), - (0x10422, 'M', u'𐑊'), - (0x10423, 'M', u'𐑋'), - (0x10424, 'M', u'𐑌'), - (0x10425, 'M', u'𐑍'), - (0x10426, 'M', u'𐑎'), - (0x10427, 'M', u'𐑏'), - (0x10428, 'V'), - (0x1049E, 'X'), - (0x104A0, 'V'), - (0x104AA, 'X'), - (0x10800, 'V'), - (0x10806, 'X'), - (0x10808, 'V'), - (0x10809, 'X'), - (0x1080A, 'V'), - (0x10836, 'X'), - (0x10837, 'V'), - (0x10839, 'X'), - (0x1083C, 'V'), - (0x1083D, 'X'), - (0x1083F, 'V'), - (0x10856, 'X'), - (0x10857, 'V'), - (0x10860, 'X'), - (0x10900, 'V'), - (0x1091C, 'X'), - (0x1091F, 'V'), - (0x1093A, 'X'), - (0x1093F, 'V'), - (0x10940, 'X'), - (0x10980, 'V'), - (0x109B8, 'X'), - (0x109BE, 'V'), - (0x109C0, 'X'), - (0x10A00, 'V'), - (0x10A04, 'X'), - (0x10A05, 'V'), - (0x10A07, 'X'), - (0x10A0C, 'V'), - (0x10A14, 'X'), - (0x10A15, 'V'), - (0x10A18, 'X'), - (0x10A19, 'V'), - (0x10A34, 'X'), - (0x10A38, 'V'), - (0x10A3B, 'X'), - (0x10A3F, 'V'), - (0x10A48, 'X'), - (0x10A50, 'V'), - (0x10A59, 'X'), - (0x10A60, 'V'), - (0x10A80, 'X'), - (0x10B00, 'V'), - (0x10B36, 'X'), - (0x10B39, 'V'), - (0x10B56, 'X'), - (0x10B58, 'V'), - (0x10B73, 'X'), - (0x10B78, 'V'), - (0x10B80, 'X'), - (0x10C00, 'V'), - (0x10C49, 'X'), - (0x10E60, 'V'), - (0x10E7F, 'X'), - (0x11000, 'V'), - (0x1104E, 'X'), - (0x11052, 'V'), - (0x11070, 'X'), - (0x11080, 'V'), - (0x110BD, 'X'), - (0x110BE, 'V'), - (0x110C2, 'X'), - (0x110D0, 'V'), - (0x110E9, 'X'), - (0x110F0, 'V'), - (0x110FA, 'X'), - (0x11100, 'V'), - (0x11135, 'X'), - (0x11136, 'V'), - (0x11144, 'X'), - (0x11180, 'V'), - (0x111C9, 'X'), - (0x111D0, 'V'), - (0x111DA, 'X'), - (0x11680, 'V'), - (0x116B8, 'X'), - (0x116C0, 'V'), - (0x116CA, 'X'), - (0x12000, 'V'), - (0x1236F, 'X'), - (0x12400, 'V'), - (0x12463, 'X'), - (0x12470, 'V'), - (0x12474, 'X'), - (0x13000, 'V'), - (0x1342F, 'X'), - ] - -def _seg_53(): - return [ - (0x16800, 'V'), - (0x16A39, 'X'), - (0x16F00, 'V'), - (0x16F45, 'X'), - (0x16F50, 'V'), - (0x16F7F, 'X'), - (0x16F8F, 'V'), - (0x16FA0, 'X'), - (0x1B000, 'V'), - (0x1B002, 'X'), - (0x1D000, 'V'), - (0x1D0F6, 'X'), - (0x1D100, 'V'), - (0x1D127, 'X'), - (0x1D129, 'V'), - (0x1D15E, 'M', u'𝅗𝅥'), - (0x1D15F, 'M', u'𝅘𝅥'), - (0x1D160, 'M', u'𝅘𝅥𝅮'), - (0x1D161, 'M', u'𝅘𝅥𝅯'), - (0x1D162, 'M', u'𝅘𝅥𝅰'), - (0x1D163, 'M', u'𝅘𝅥𝅱'), - (0x1D164, 'M', u'𝅘𝅥𝅲'), - (0x1D165, 'V'), - (0x1D173, 'X'), - (0x1D17B, 'V'), - (0x1D1BB, 'M', u'𝆹𝅥'), - (0x1D1BC, 'M', u'𝆺𝅥'), - (0x1D1BD, 'M', u'𝆹𝅥𝅮'), - (0x1D1BE, 'M', u'𝆺𝅥𝅮'), - (0x1D1BF, 'M', u'𝆹𝅥𝅯'), - (0x1D1C0, 'M', u'𝆺𝅥𝅯'), - (0x1D1C1, 'V'), - (0x1D1DE, 'X'), - (0x1D200, 'V'), - (0x1D246, 'X'), - (0x1D300, 'V'), - (0x1D357, 'X'), - (0x1D360, 'V'), - (0x1D372, 'X'), - (0x1D400, 'M', u'a'), - (0x1D401, 'M', u'b'), - (0x1D402, 'M', u'c'), - (0x1D403, 'M', u'd'), - (0x1D404, 'M', u'e'), - (0x1D405, 'M', u'f'), - (0x1D406, 'M', u'g'), - (0x1D407, 'M', u'h'), - (0x1D408, 'M', u'i'), - (0x1D409, 'M', u'j'), - (0x1D40A, 'M', u'k'), - (0x1D40B, 'M', u'l'), - (0x1D40C, 'M', u'm'), - (0x1D40D, 'M', u'n'), - (0x1D40E, 'M', u'o'), - (0x1D40F, 'M', u'p'), - (0x1D410, 'M', u'q'), - (0x1D411, 'M', u'r'), - (0x1D412, 'M', u's'), - (0x1D413, 'M', u't'), - (0x1D414, 'M', u'u'), - (0x1D415, 'M', u'v'), - (0x1D416, 'M', u'w'), - (0x1D417, 'M', u'x'), - (0x1D418, 'M', u'y'), - (0x1D419, 'M', u'z'), - (0x1D41A, 'M', u'a'), - (0x1D41B, 'M', u'b'), - (0x1D41C, 'M', u'c'), - (0x1D41D, 'M', u'd'), - (0x1D41E, 'M', u'e'), - (0x1D41F, 'M', u'f'), - (0x1D420, 'M', u'g'), - (0x1D421, 'M', u'h'), - (0x1D422, 'M', u'i'), - (0x1D423, 'M', u'j'), - (0x1D424, 'M', u'k'), - (0x1D425, 'M', u'l'), - (0x1D426, 'M', u'm'), - (0x1D427, 'M', u'n'), - (0x1D428, 'M', u'o'), - (0x1D429, 'M', u'p'), - (0x1D42A, 'M', u'q'), - (0x1D42B, 'M', u'r'), - (0x1D42C, 'M', u's'), - (0x1D42D, 'M', u't'), - (0x1D42E, 'M', u'u'), - (0x1D42F, 'M', u'v'), - (0x1D430, 'M', u'w'), - (0x1D431, 'M', u'x'), - (0x1D432, 'M', u'y'), - (0x1D433, 'M', u'z'), - (0x1D434, 'M', u'a'), - (0x1D435, 'M', u'b'), - (0x1D436, 'M', u'c'), - (0x1D437, 'M', u'd'), - (0x1D438, 'M', u'e'), - (0x1D439, 'M', u'f'), - (0x1D43A, 'M', u'g'), - (0x1D43B, 'M', u'h'), - (0x1D43C, 'M', u'i'), - ] - -def _seg_54(): - return [ - (0x1D43D, 'M', u'j'), - (0x1D43E, 'M', u'k'), - (0x1D43F, 'M', u'l'), - (0x1D440, 'M', u'm'), - (0x1D441, 'M', u'n'), - (0x1D442, 'M', u'o'), - (0x1D443, 'M', u'p'), - (0x1D444, 'M', u'q'), - (0x1D445, 'M', u'r'), - (0x1D446, 'M', u's'), - (0x1D447, 'M', u't'), - (0x1D448, 'M', u'u'), - (0x1D449, 'M', u'v'), - (0x1D44A, 'M', u'w'), - (0x1D44B, 'M', u'x'), - (0x1D44C, 'M', u'y'), - (0x1D44D, 'M', u'z'), - (0x1D44E, 'M', u'a'), - (0x1D44F, 'M', u'b'), - (0x1D450, 'M', u'c'), - (0x1D451, 'M', u'd'), - (0x1D452, 'M', u'e'), - (0x1D453, 'M', u'f'), - (0x1D454, 'M', u'g'), - (0x1D455, 'X'), - (0x1D456, 'M', u'i'), - (0x1D457, 'M', u'j'), - (0x1D458, 'M', u'k'), - (0x1D459, 'M', u'l'), - (0x1D45A, 'M', u'm'), - (0x1D45B, 'M', u'n'), - (0x1D45C, 'M', u'o'), - (0x1D45D, 'M', u'p'), - (0x1D45E, 'M', u'q'), - (0x1D45F, 'M', u'r'), - (0x1D460, 'M', u's'), - (0x1D461, 'M', u't'), - (0x1D462, 'M', u'u'), - (0x1D463, 'M', u'v'), - (0x1D464, 'M', u'w'), - (0x1D465, 'M', u'x'), - (0x1D466, 'M', u'y'), - (0x1D467, 'M', u'z'), - (0x1D468, 'M', u'a'), - (0x1D469, 'M', u'b'), - (0x1D46A, 'M', u'c'), - (0x1D46B, 'M', u'd'), - (0x1D46C, 'M', u'e'), - (0x1D46D, 'M', u'f'), - (0x1D46E, 'M', u'g'), - (0x1D46F, 'M', u'h'), - (0x1D470, 'M', u'i'), - (0x1D471, 'M', u'j'), - (0x1D472, 'M', u'k'), - (0x1D473, 'M', u'l'), - (0x1D474, 'M', u'm'), - (0x1D475, 'M', u'n'), - (0x1D476, 'M', u'o'), - (0x1D477, 'M', u'p'), - (0x1D478, 'M', u'q'), - (0x1D479, 'M', u'r'), - (0x1D47A, 'M', u's'), - (0x1D47B, 'M', u't'), - (0x1D47C, 'M', u'u'), - (0x1D47D, 'M', u'v'), - (0x1D47E, 'M', u'w'), - (0x1D47F, 'M', u'x'), - (0x1D480, 'M', u'y'), - (0x1D481, 'M', u'z'), - (0x1D482, 'M', u'a'), - (0x1D483, 'M', u'b'), - (0x1D484, 'M', u'c'), - (0x1D485, 'M', u'd'), - (0x1D486, 'M', u'e'), - (0x1D487, 'M', u'f'), - (0x1D488, 'M', u'g'), - (0x1D489, 'M', u'h'), - (0x1D48A, 'M', u'i'), - (0x1D48B, 'M', u'j'), - (0x1D48C, 'M', u'k'), - (0x1D48D, 'M', u'l'), - (0x1D48E, 'M', u'm'), - (0x1D48F, 'M', u'n'), - (0x1D490, 'M', u'o'), - (0x1D491, 'M', u'p'), - (0x1D492, 'M', u'q'), - (0x1D493, 'M', u'r'), - (0x1D494, 'M', u's'), - (0x1D495, 'M', u't'), - (0x1D496, 'M', u'u'), - (0x1D497, 'M', u'v'), - (0x1D498, 'M', u'w'), - (0x1D499, 'M', u'x'), - (0x1D49A, 'M', u'y'), - (0x1D49B, 'M', u'z'), - (0x1D49C, 'M', u'a'), - (0x1D49D, 'X'), - (0x1D49E, 'M', u'c'), - (0x1D49F, 'M', u'd'), - (0x1D4A0, 'X'), - ] - -def _seg_55(): - return [ - (0x1D4A2, 'M', u'g'), - (0x1D4A3, 'X'), - (0x1D4A5, 'M', u'j'), - (0x1D4A6, 'M', u'k'), - (0x1D4A7, 'X'), - (0x1D4A9, 'M', u'n'), - (0x1D4AA, 'M', u'o'), - (0x1D4AB, 'M', u'p'), - (0x1D4AC, 'M', u'q'), - (0x1D4AD, 'X'), - (0x1D4AE, 'M', u's'), - (0x1D4AF, 'M', u't'), - (0x1D4B0, 'M', u'u'), - (0x1D4B1, 'M', u'v'), - (0x1D4B2, 'M', u'w'), - (0x1D4B3, 'M', u'x'), - (0x1D4B4, 'M', u'y'), - (0x1D4B5, 'M', u'z'), - (0x1D4B6, 'M', u'a'), - (0x1D4B7, 'M', u'b'), - (0x1D4B8, 'M', u'c'), - (0x1D4B9, 'M', u'd'), - (0x1D4BA, 'X'), - (0x1D4BB, 'M', u'f'), - (0x1D4BC, 'X'), - (0x1D4BD, 'M', u'h'), - (0x1D4BE, 'M', u'i'), - (0x1D4BF, 'M', u'j'), - (0x1D4C0, 'M', u'k'), - (0x1D4C1, 'M', u'l'), - (0x1D4C2, 'M', u'm'), - (0x1D4C3, 'M', u'n'), - (0x1D4C4, 'X'), - (0x1D4C5, 'M', u'p'), - (0x1D4C6, 'M', u'q'), - (0x1D4C7, 'M', u'r'), - (0x1D4C8, 'M', u's'), - (0x1D4C9, 'M', u't'), - (0x1D4CA, 'M', u'u'), - (0x1D4CB, 'M', u'v'), - (0x1D4CC, 'M', u'w'), - (0x1D4CD, 'M', u'x'), - (0x1D4CE, 'M', u'y'), - (0x1D4CF, 'M', u'z'), - (0x1D4D0, 'M', u'a'), - (0x1D4D1, 'M', u'b'), - (0x1D4D2, 'M', u'c'), - (0x1D4D3, 'M', u'd'), - (0x1D4D4, 'M', u'e'), - (0x1D4D5, 'M', u'f'), - (0x1D4D6, 'M', u'g'), - (0x1D4D7, 'M', u'h'), - (0x1D4D8, 'M', u'i'), - (0x1D4D9, 'M', u'j'), - (0x1D4DA, 'M', u'k'), - (0x1D4DB, 'M', u'l'), - (0x1D4DC, 'M', u'm'), - (0x1D4DD, 'M', u'n'), - (0x1D4DE, 'M', u'o'), - (0x1D4DF, 'M', u'p'), - (0x1D4E0, 'M', u'q'), - (0x1D4E1, 'M', u'r'), - (0x1D4E2, 'M', u's'), - (0x1D4E3, 'M', u't'), - (0x1D4E4, 'M', u'u'), - (0x1D4E5, 'M', u'v'), - (0x1D4E6, 'M', u'w'), - (0x1D4E7, 'M', u'x'), - (0x1D4E8, 'M', u'y'), - (0x1D4E9, 'M', u'z'), - (0x1D4EA, 'M', u'a'), - (0x1D4EB, 'M', u'b'), - (0x1D4EC, 'M', u'c'), - (0x1D4ED, 'M', u'd'), - (0x1D4EE, 'M', u'e'), - (0x1D4EF, 'M', u'f'), - (0x1D4F0, 'M', u'g'), - (0x1D4F1, 'M', u'h'), - (0x1D4F2, 'M', u'i'), - (0x1D4F3, 'M', u'j'), - (0x1D4F4, 'M', u'k'), - (0x1D4F5, 'M', u'l'), - (0x1D4F6, 'M', u'm'), - (0x1D4F7, 'M', u'n'), - (0x1D4F8, 'M', u'o'), - (0x1D4F9, 'M', u'p'), - (0x1D4FA, 'M', u'q'), - (0x1D4FB, 'M', u'r'), - (0x1D4FC, 'M', u's'), - (0x1D4FD, 'M', u't'), - (0x1D4FE, 'M', u'u'), - (0x1D4FF, 'M', u'v'), - (0x1D500, 'M', u'w'), - (0x1D501, 'M', u'x'), - (0x1D502, 'M', u'y'), - (0x1D503, 'M', u'z'), - (0x1D504, 'M', u'a'), - (0x1D505, 'M', u'b'), - (0x1D506, 'X'), - (0x1D507, 'M', u'd'), - ] - -def _seg_56(): - return [ - (0x1D508, 'M', u'e'), - (0x1D509, 'M', u'f'), - (0x1D50A, 'M', u'g'), - (0x1D50B, 'X'), - (0x1D50D, 'M', u'j'), - (0x1D50E, 'M', u'k'), - (0x1D50F, 'M', u'l'), - (0x1D510, 'M', u'm'), - (0x1D511, 'M', u'n'), - (0x1D512, 'M', u'o'), - (0x1D513, 'M', u'p'), - (0x1D514, 'M', u'q'), - (0x1D515, 'X'), - (0x1D516, 'M', u's'), - (0x1D517, 'M', u't'), - (0x1D518, 'M', u'u'), - (0x1D519, 'M', u'v'), - (0x1D51A, 'M', u'w'), - (0x1D51B, 'M', u'x'), - (0x1D51C, 'M', u'y'), - (0x1D51D, 'X'), - (0x1D51E, 'M', u'a'), - (0x1D51F, 'M', u'b'), - (0x1D520, 'M', u'c'), - (0x1D521, 'M', u'd'), - (0x1D522, 'M', u'e'), - (0x1D523, 'M', u'f'), - (0x1D524, 'M', u'g'), - (0x1D525, 'M', u'h'), - (0x1D526, 'M', u'i'), - (0x1D527, 'M', u'j'), - (0x1D528, 'M', u'k'), - (0x1D529, 'M', u'l'), - (0x1D52A, 'M', u'm'), - (0x1D52B, 'M', u'n'), - (0x1D52C, 'M', u'o'), - (0x1D52D, 'M', u'p'), - (0x1D52E, 'M', u'q'), - (0x1D52F, 'M', u'r'), - (0x1D530, 'M', u's'), - (0x1D531, 'M', u't'), - (0x1D532, 'M', u'u'), - (0x1D533, 'M', u'v'), - (0x1D534, 'M', u'w'), - (0x1D535, 'M', u'x'), - (0x1D536, 'M', u'y'), - (0x1D537, 'M', u'z'), - (0x1D538, 'M', u'a'), - (0x1D539, 'M', u'b'), - (0x1D53A, 'X'), - (0x1D53B, 'M', u'd'), - (0x1D53C, 'M', u'e'), - (0x1D53D, 'M', u'f'), - (0x1D53E, 'M', u'g'), - (0x1D53F, 'X'), - (0x1D540, 'M', u'i'), - (0x1D541, 'M', u'j'), - (0x1D542, 'M', u'k'), - (0x1D543, 'M', u'l'), - (0x1D544, 'M', u'm'), - (0x1D545, 'X'), - (0x1D546, 'M', u'o'), - (0x1D547, 'X'), - (0x1D54A, 'M', u's'), - (0x1D54B, 'M', u't'), - (0x1D54C, 'M', u'u'), - (0x1D54D, 'M', u'v'), - (0x1D54E, 'M', u'w'), - (0x1D54F, 'M', u'x'), - (0x1D550, 'M', u'y'), - (0x1D551, 'X'), - (0x1D552, 'M', u'a'), - (0x1D553, 'M', u'b'), - (0x1D554, 'M', u'c'), - (0x1D555, 'M', u'd'), - (0x1D556, 'M', u'e'), - (0x1D557, 'M', u'f'), - (0x1D558, 'M', u'g'), - (0x1D559, 'M', u'h'), - (0x1D55A, 'M', u'i'), - (0x1D55B, 'M', u'j'), - (0x1D55C, 'M', u'k'), - (0x1D55D, 'M', u'l'), - (0x1D55E, 'M', u'm'), - (0x1D55F, 'M', u'n'), - (0x1D560, 'M', u'o'), - (0x1D561, 'M', u'p'), - (0x1D562, 'M', u'q'), - (0x1D563, 'M', u'r'), - (0x1D564, 'M', u's'), - (0x1D565, 'M', u't'), - (0x1D566, 'M', u'u'), - (0x1D567, 'M', u'v'), - (0x1D568, 'M', u'w'), - (0x1D569, 'M', u'x'), - (0x1D56A, 'M', u'y'), - (0x1D56B, 'M', u'z'), - (0x1D56C, 'M', u'a'), - (0x1D56D, 'M', u'b'), - (0x1D56E, 'M', u'c'), - ] - -def _seg_57(): - return [ - (0x1D56F, 'M', u'd'), - (0x1D570, 'M', u'e'), - (0x1D571, 'M', u'f'), - (0x1D572, 'M', u'g'), - (0x1D573, 'M', u'h'), - (0x1D574, 'M', u'i'), - (0x1D575, 'M', u'j'), - (0x1D576, 'M', u'k'), - (0x1D577, 'M', u'l'), - (0x1D578, 'M', u'm'), - (0x1D579, 'M', u'n'), - (0x1D57A, 'M', u'o'), - (0x1D57B, 'M', u'p'), - (0x1D57C, 'M', u'q'), - (0x1D57D, 'M', u'r'), - (0x1D57E, 'M', u's'), - (0x1D57F, 'M', u't'), - (0x1D580, 'M', u'u'), - (0x1D581, 'M', u'v'), - (0x1D582, 'M', u'w'), - (0x1D583, 'M', u'x'), - (0x1D584, 'M', u'y'), - (0x1D585, 'M', u'z'), - (0x1D586, 'M', u'a'), - (0x1D587, 'M', u'b'), - (0x1D588, 'M', u'c'), - (0x1D589, 'M', u'd'), - (0x1D58A, 'M', u'e'), - (0x1D58B, 'M', u'f'), - (0x1D58C, 'M', u'g'), - (0x1D58D, 'M', u'h'), - (0x1D58E, 'M', u'i'), - (0x1D58F, 'M', u'j'), - (0x1D590, 'M', u'k'), - (0x1D591, 'M', u'l'), - (0x1D592, 'M', u'm'), - (0x1D593, 'M', u'n'), - (0x1D594, 'M', u'o'), - (0x1D595, 'M', u'p'), - (0x1D596, 'M', u'q'), - (0x1D597, 'M', u'r'), - (0x1D598, 'M', u's'), - (0x1D599, 'M', u't'), - (0x1D59A, 'M', u'u'), - (0x1D59B, 'M', u'v'), - (0x1D59C, 'M', u'w'), - (0x1D59D, 'M', u'x'), - (0x1D59E, 'M', u'y'), - (0x1D59F, 'M', u'z'), - (0x1D5A0, 'M', u'a'), - (0x1D5A1, 'M', u'b'), - (0x1D5A2, 'M', u'c'), - (0x1D5A3, 'M', u'd'), - (0x1D5A4, 'M', u'e'), - (0x1D5A5, 'M', u'f'), - (0x1D5A6, 'M', u'g'), - (0x1D5A7, 'M', u'h'), - (0x1D5A8, 'M', u'i'), - (0x1D5A9, 'M', u'j'), - (0x1D5AA, 'M', u'k'), - (0x1D5AB, 'M', u'l'), - (0x1D5AC, 'M', u'm'), - (0x1D5AD, 'M', u'n'), - (0x1D5AE, 'M', u'o'), - (0x1D5AF, 'M', u'p'), - (0x1D5B0, 'M', u'q'), - (0x1D5B1, 'M', u'r'), - (0x1D5B2, 'M', u's'), - (0x1D5B3, 'M', u't'), - (0x1D5B4, 'M', u'u'), - (0x1D5B5, 'M', u'v'), - (0x1D5B6, 'M', u'w'), - (0x1D5B7, 'M', u'x'), - (0x1D5B8, 'M', u'y'), - (0x1D5B9, 'M', u'z'), - (0x1D5BA, 'M', u'a'), - (0x1D5BB, 'M', u'b'), - (0x1D5BC, 'M', u'c'), - (0x1D5BD, 'M', u'd'), - (0x1D5BE, 'M', u'e'), - (0x1D5BF, 'M', u'f'), - (0x1D5C0, 'M', u'g'), - (0x1D5C1, 'M', u'h'), - (0x1D5C2, 'M', u'i'), - (0x1D5C3, 'M', u'j'), - (0x1D5C4, 'M', u'k'), - (0x1D5C5, 'M', u'l'), - (0x1D5C6, 'M', u'm'), - (0x1D5C7, 'M', u'n'), - (0x1D5C8, 'M', u'o'), - (0x1D5C9, 'M', u'p'), - (0x1D5CA, 'M', u'q'), - (0x1D5CB, 'M', u'r'), - (0x1D5CC, 'M', u's'), - (0x1D5CD, 'M', u't'), - (0x1D5CE, 'M', u'u'), - (0x1D5CF, 'M', u'v'), - (0x1D5D0, 'M', u'w'), - (0x1D5D1, 'M', u'x'), - (0x1D5D2, 'M', u'y'), - ] - -def _seg_58(): - return [ - (0x1D5D3, 'M', u'z'), - (0x1D5D4, 'M', u'a'), - (0x1D5D5, 'M', u'b'), - (0x1D5D6, 'M', u'c'), - (0x1D5D7, 'M', u'd'), - (0x1D5D8, 'M', u'e'), - (0x1D5D9, 'M', u'f'), - (0x1D5DA, 'M', u'g'), - (0x1D5DB, 'M', u'h'), - (0x1D5DC, 'M', u'i'), - (0x1D5DD, 'M', u'j'), - (0x1D5DE, 'M', u'k'), - (0x1D5DF, 'M', u'l'), - (0x1D5E0, 'M', u'm'), - (0x1D5E1, 'M', u'n'), - (0x1D5E2, 'M', u'o'), - (0x1D5E3, 'M', u'p'), - (0x1D5E4, 'M', u'q'), - (0x1D5E5, 'M', u'r'), - (0x1D5E6, 'M', u's'), - (0x1D5E7, 'M', u't'), - (0x1D5E8, 'M', u'u'), - (0x1D5E9, 'M', u'v'), - (0x1D5EA, 'M', u'w'), - (0x1D5EB, 'M', u'x'), - (0x1D5EC, 'M', u'y'), - (0x1D5ED, 'M', u'z'), - (0x1D5EE, 'M', u'a'), - (0x1D5EF, 'M', u'b'), - (0x1D5F0, 'M', u'c'), - (0x1D5F1, 'M', u'd'), - (0x1D5F2, 'M', u'e'), - (0x1D5F3, 'M', u'f'), - (0x1D5F4, 'M', u'g'), - (0x1D5F5, 'M', u'h'), - (0x1D5F6, 'M', u'i'), - (0x1D5F7, 'M', u'j'), - (0x1D5F8, 'M', u'k'), - (0x1D5F9, 'M', u'l'), - (0x1D5FA, 'M', u'm'), - (0x1D5FB, 'M', u'n'), - (0x1D5FC, 'M', u'o'), - (0x1D5FD, 'M', u'p'), - (0x1D5FE, 'M', u'q'), - (0x1D5FF, 'M', u'r'), - (0x1D600, 'M', u's'), - (0x1D601, 'M', u't'), - (0x1D602, 'M', u'u'), - (0x1D603, 'M', u'v'), - (0x1D604, 'M', u'w'), - (0x1D605, 'M', u'x'), - (0x1D606, 'M', u'y'), - (0x1D607, 'M', u'z'), - (0x1D608, 'M', u'a'), - (0x1D609, 'M', u'b'), - (0x1D60A, 'M', u'c'), - (0x1D60B, 'M', u'd'), - (0x1D60C, 'M', u'e'), - (0x1D60D, 'M', u'f'), - (0x1D60E, 'M', u'g'), - (0x1D60F, 'M', u'h'), - (0x1D610, 'M', u'i'), - (0x1D611, 'M', u'j'), - (0x1D612, 'M', u'k'), - (0x1D613, 'M', u'l'), - (0x1D614, 'M', u'm'), - (0x1D615, 'M', u'n'), - (0x1D616, 'M', u'o'), - (0x1D617, 'M', u'p'), - (0x1D618, 'M', u'q'), - (0x1D619, 'M', u'r'), - (0x1D61A, 'M', u's'), - (0x1D61B, 'M', u't'), - (0x1D61C, 'M', u'u'), - (0x1D61D, 'M', u'v'), - (0x1D61E, 'M', u'w'), - (0x1D61F, 'M', u'x'), - (0x1D620, 'M', u'y'), - (0x1D621, 'M', u'z'), - (0x1D622, 'M', u'a'), - (0x1D623, 'M', u'b'), - (0x1D624, 'M', u'c'), - (0x1D625, 'M', u'd'), - (0x1D626, 'M', u'e'), - (0x1D627, 'M', u'f'), - (0x1D628, 'M', u'g'), - (0x1D629, 'M', u'h'), - (0x1D62A, 'M', u'i'), - (0x1D62B, 'M', u'j'), - (0x1D62C, 'M', u'k'), - (0x1D62D, 'M', u'l'), - (0x1D62E, 'M', u'm'), - (0x1D62F, 'M', u'n'), - (0x1D630, 'M', u'o'), - (0x1D631, 'M', u'p'), - (0x1D632, 'M', u'q'), - (0x1D633, 'M', u'r'), - (0x1D634, 'M', u's'), - (0x1D635, 'M', u't'), - (0x1D636, 'M', u'u'), - ] - -def _seg_59(): - return [ - (0x1D637, 'M', u'v'), - (0x1D638, 'M', u'w'), - (0x1D639, 'M', u'x'), - (0x1D63A, 'M', u'y'), - (0x1D63B, 'M', u'z'), - (0x1D63C, 'M', u'a'), - (0x1D63D, 'M', u'b'), - (0x1D63E, 'M', u'c'), - (0x1D63F, 'M', u'd'), - (0x1D640, 'M', u'e'), - (0x1D641, 'M', u'f'), - (0x1D642, 'M', u'g'), - (0x1D643, 'M', u'h'), - (0x1D644, 'M', u'i'), - (0x1D645, 'M', u'j'), - (0x1D646, 'M', u'k'), - (0x1D647, 'M', u'l'), - (0x1D648, 'M', u'm'), - (0x1D649, 'M', u'n'), - (0x1D64A, 'M', u'o'), - (0x1D64B, 'M', u'p'), - (0x1D64C, 'M', u'q'), - (0x1D64D, 'M', u'r'), - (0x1D64E, 'M', u's'), - (0x1D64F, 'M', u't'), - (0x1D650, 'M', u'u'), - (0x1D651, 'M', u'v'), - (0x1D652, 'M', u'w'), - (0x1D653, 'M', u'x'), - (0x1D654, 'M', u'y'), - (0x1D655, 'M', u'z'), - (0x1D656, 'M', u'a'), - (0x1D657, 'M', u'b'), - (0x1D658, 'M', u'c'), - (0x1D659, 'M', u'd'), - (0x1D65A, 'M', u'e'), - (0x1D65B, 'M', u'f'), - (0x1D65C, 'M', u'g'), - (0x1D65D, 'M', u'h'), - (0x1D65E, 'M', u'i'), - (0x1D65F, 'M', u'j'), - (0x1D660, 'M', u'k'), - (0x1D661, 'M', u'l'), - (0x1D662, 'M', u'm'), - (0x1D663, 'M', u'n'), - (0x1D664, 'M', u'o'), - (0x1D665, 'M', u'p'), - (0x1D666, 'M', u'q'), - (0x1D667, 'M', u'r'), - (0x1D668, 'M', u's'), - (0x1D669, 'M', u't'), - (0x1D66A, 'M', u'u'), - (0x1D66B, 'M', u'v'), - (0x1D66C, 'M', u'w'), - (0x1D66D, 'M', u'x'), - (0x1D66E, 'M', u'y'), - (0x1D66F, 'M', u'z'), - (0x1D670, 'M', u'a'), - (0x1D671, 'M', u'b'), - (0x1D672, 'M', u'c'), - (0x1D673, 'M', u'd'), - (0x1D674, 'M', u'e'), - (0x1D675, 'M', u'f'), - (0x1D676, 'M', u'g'), - (0x1D677, 'M', u'h'), - (0x1D678, 'M', u'i'), - (0x1D679, 'M', u'j'), - (0x1D67A, 'M', u'k'), - (0x1D67B, 'M', u'l'), - (0x1D67C, 'M', u'm'), - (0x1D67D, 'M', u'n'), - (0x1D67E, 'M', u'o'), - (0x1D67F, 'M', u'p'), - (0x1D680, 'M', u'q'), - (0x1D681, 'M', u'r'), - (0x1D682, 'M', u's'), - (0x1D683, 'M', u't'), - (0x1D684, 'M', u'u'), - (0x1D685, 'M', u'v'), - (0x1D686, 'M', u'w'), - (0x1D687, 'M', u'x'), - (0x1D688, 'M', u'y'), - (0x1D689, 'M', u'z'), - (0x1D68A, 'M', u'a'), - (0x1D68B, 'M', u'b'), - (0x1D68C, 'M', u'c'), - (0x1D68D, 'M', u'd'), - (0x1D68E, 'M', u'e'), - (0x1D68F, 'M', u'f'), - (0x1D690, 'M', u'g'), - (0x1D691, 'M', u'h'), - (0x1D692, 'M', u'i'), - (0x1D693, 'M', u'j'), - (0x1D694, 'M', u'k'), - (0x1D695, 'M', u'l'), - (0x1D696, 'M', u'm'), - (0x1D697, 'M', u'n'), - (0x1D698, 'M', u'o'), - (0x1D699, 'M', u'p'), - (0x1D69A, 'M', u'q'), - ] - -def _seg_60(): - return [ - (0x1D69B, 'M', u'r'), - (0x1D69C, 'M', u's'), - (0x1D69D, 'M', u't'), - (0x1D69E, 'M', u'u'), - (0x1D69F, 'M', u'v'), - (0x1D6A0, 'M', u'w'), - (0x1D6A1, 'M', u'x'), - (0x1D6A2, 'M', u'y'), - (0x1D6A3, 'M', u'z'), - (0x1D6A4, 'M', u'ı'), - (0x1D6A5, 'M', u'ȷ'), - (0x1D6A6, 'X'), - (0x1D6A8, 'M', u'α'), - (0x1D6A9, 'M', u'β'), - (0x1D6AA, 'M', u'γ'), - (0x1D6AB, 'M', u'δ'), - (0x1D6AC, 'M', u'ε'), - (0x1D6AD, 'M', u'ζ'), - (0x1D6AE, 'M', u'η'), - (0x1D6AF, 'M', u'θ'), - (0x1D6B0, 'M', u'ι'), - (0x1D6B1, 'M', u'κ'), - (0x1D6B2, 'M', u'λ'), - (0x1D6B3, 'M', u'μ'), - (0x1D6B4, 'M', u'ν'), - (0x1D6B5, 'M', u'ξ'), - (0x1D6B6, 'M', u'ο'), - (0x1D6B7, 'M', u'π'), - (0x1D6B8, 'M', u'ρ'), - (0x1D6B9, 'M', u'θ'), - (0x1D6BA, 'M', u'σ'), - (0x1D6BB, 'M', u'τ'), - (0x1D6BC, 'M', u'υ'), - (0x1D6BD, 'M', u'φ'), - (0x1D6BE, 'M', u'χ'), - (0x1D6BF, 'M', u'ψ'), - (0x1D6C0, 'M', u'ω'), - (0x1D6C1, 'M', u'∇'), - (0x1D6C2, 'M', u'α'), - (0x1D6C3, 'M', u'β'), - (0x1D6C4, 'M', u'γ'), - (0x1D6C5, 'M', u'δ'), - (0x1D6C6, 'M', u'ε'), - (0x1D6C7, 'M', u'ζ'), - (0x1D6C8, 'M', u'η'), - (0x1D6C9, 'M', u'θ'), - (0x1D6CA, 'M', u'ι'), - (0x1D6CB, 'M', u'κ'), - (0x1D6CC, 'M', u'λ'), - (0x1D6CD, 'M', u'μ'), - (0x1D6CE, 'M', u'ν'), - (0x1D6CF, 'M', u'ξ'), - (0x1D6D0, 'M', u'ο'), - (0x1D6D1, 'M', u'π'), - (0x1D6D2, 'M', u'ρ'), - (0x1D6D3, 'M', u'σ'), - (0x1D6D5, 'M', u'τ'), - (0x1D6D6, 'M', u'υ'), - (0x1D6D7, 'M', u'φ'), - (0x1D6D8, 'M', u'χ'), - (0x1D6D9, 'M', u'ψ'), - (0x1D6DA, 'M', u'ω'), - (0x1D6DB, 'M', u'∂'), - (0x1D6DC, 'M', u'ε'), - (0x1D6DD, 'M', u'θ'), - (0x1D6DE, 'M', u'κ'), - (0x1D6DF, 'M', u'φ'), - (0x1D6E0, 'M', u'ρ'), - (0x1D6E1, 'M', u'π'), - (0x1D6E2, 'M', u'α'), - (0x1D6E3, 'M', u'β'), - (0x1D6E4, 'M', u'γ'), - (0x1D6E5, 'M', u'δ'), - (0x1D6E6, 'M', u'ε'), - (0x1D6E7, 'M', u'ζ'), - (0x1D6E8, 'M', u'η'), - (0x1D6E9, 'M', u'θ'), - (0x1D6EA, 'M', u'ι'), - (0x1D6EB, 'M', u'κ'), - (0x1D6EC, 'M', u'λ'), - (0x1D6ED, 'M', u'μ'), - (0x1D6EE, 'M', u'ν'), - (0x1D6EF, 'M', u'ξ'), - (0x1D6F0, 'M', u'ο'), - (0x1D6F1, 'M', u'π'), - (0x1D6F2, 'M', u'ρ'), - (0x1D6F3, 'M', u'θ'), - (0x1D6F4, 'M', u'σ'), - (0x1D6F5, 'M', u'τ'), - (0x1D6F6, 'M', u'υ'), - (0x1D6F7, 'M', u'φ'), - (0x1D6F8, 'M', u'χ'), - (0x1D6F9, 'M', u'ψ'), - (0x1D6FA, 'M', u'ω'), - (0x1D6FB, 'M', u'∇'), - (0x1D6FC, 'M', u'α'), - (0x1D6FD, 'M', u'β'), - (0x1D6FE, 'M', u'γ'), - (0x1D6FF, 'M', u'δ'), - (0x1D700, 'M', u'ε'), - ] - -def _seg_61(): - return [ - (0x1D701, 'M', u'ζ'), - (0x1D702, 'M', u'η'), - (0x1D703, 'M', u'θ'), - (0x1D704, 'M', u'ι'), - (0x1D705, 'M', u'κ'), - (0x1D706, 'M', u'λ'), - (0x1D707, 'M', u'μ'), - (0x1D708, 'M', u'ν'), - (0x1D709, 'M', u'ξ'), - (0x1D70A, 'M', u'ο'), - (0x1D70B, 'M', u'π'), - (0x1D70C, 'M', u'ρ'), - (0x1D70D, 'M', u'σ'), - (0x1D70F, 'M', u'τ'), - (0x1D710, 'M', u'υ'), - (0x1D711, 'M', u'φ'), - (0x1D712, 'M', u'χ'), - (0x1D713, 'M', u'ψ'), - (0x1D714, 'M', u'ω'), - (0x1D715, 'M', u'∂'), - (0x1D716, 'M', u'ε'), - (0x1D717, 'M', u'θ'), - (0x1D718, 'M', u'κ'), - (0x1D719, 'M', u'φ'), - (0x1D71A, 'M', u'ρ'), - (0x1D71B, 'M', u'π'), - (0x1D71C, 'M', u'α'), - (0x1D71D, 'M', u'β'), - (0x1D71E, 'M', u'γ'), - (0x1D71F, 'M', u'δ'), - (0x1D720, 'M', u'ε'), - (0x1D721, 'M', u'ζ'), - (0x1D722, 'M', u'η'), - (0x1D723, 'M', u'θ'), - (0x1D724, 'M', u'ι'), - (0x1D725, 'M', u'κ'), - (0x1D726, 'M', u'λ'), - (0x1D727, 'M', u'μ'), - (0x1D728, 'M', u'ν'), - (0x1D729, 'M', u'ξ'), - (0x1D72A, 'M', u'ο'), - (0x1D72B, 'M', u'π'), - (0x1D72C, 'M', u'ρ'), - (0x1D72D, 'M', u'θ'), - (0x1D72E, 'M', u'σ'), - (0x1D72F, 'M', u'τ'), - (0x1D730, 'M', u'υ'), - (0x1D731, 'M', u'φ'), - (0x1D732, 'M', u'χ'), - (0x1D733, 'M', u'ψ'), - (0x1D734, 'M', u'ω'), - (0x1D735, 'M', u'∇'), - (0x1D736, 'M', u'α'), - (0x1D737, 'M', u'β'), - (0x1D738, 'M', u'γ'), - (0x1D739, 'M', u'δ'), - (0x1D73A, 'M', u'ε'), - (0x1D73B, 'M', u'ζ'), - (0x1D73C, 'M', u'η'), - (0x1D73D, 'M', u'θ'), - (0x1D73E, 'M', u'ι'), - (0x1D73F, 'M', u'κ'), - (0x1D740, 'M', u'λ'), - (0x1D741, 'M', u'μ'), - (0x1D742, 'M', u'ν'), - (0x1D743, 'M', u'ξ'), - (0x1D744, 'M', u'ο'), - (0x1D745, 'M', u'π'), - (0x1D746, 'M', u'ρ'), - (0x1D747, 'M', u'σ'), - (0x1D749, 'M', u'τ'), - (0x1D74A, 'M', u'υ'), - (0x1D74B, 'M', u'φ'), - (0x1D74C, 'M', u'χ'), - (0x1D74D, 'M', u'ψ'), - (0x1D74E, 'M', u'ω'), - (0x1D74F, 'M', u'∂'), - (0x1D750, 'M', u'ε'), - (0x1D751, 'M', u'θ'), - (0x1D752, 'M', u'κ'), - (0x1D753, 'M', u'φ'), - (0x1D754, 'M', u'ρ'), - (0x1D755, 'M', u'π'), - (0x1D756, 'M', u'α'), - (0x1D757, 'M', u'β'), - (0x1D758, 'M', u'γ'), - (0x1D759, 'M', u'δ'), - (0x1D75A, 'M', u'ε'), - (0x1D75B, 'M', u'ζ'), - (0x1D75C, 'M', u'η'), - (0x1D75D, 'M', u'θ'), - (0x1D75E, 'M', u'ι'), - (0x1D75F, 'M', u'κ'), - (0x1D760, 'M', u'λ'), - (0x1D761, 'M', u'μ'), - (0x1D762, 'M', u'ν'), - (0x1D763, 'M', u'ξ'), - (0x1D764, 'M', u'ο'), - (0x1D765, 'M', u'π'), - (0x1D766, 'M', u'ρ'), - ] - -def _seg_62(): - return [ - (0x1D767, 'M', u'θ'), - (0x1D768, 'M', u'σ'), - (0x1D769, 'M', u'τ'), - (0x1D76A, 'M', u'υ'), - (0x1D76B, 'M', u'φ'), - (0x1D76C, 'M', u'χ'), - (0x1D76D, 'M', u'ψ'), - (0x1D76E, 'M', u'ω'), - (0x1D76F, 'M', u'∇'), - (0x1D770, 'M', u'α'), - (0x1D771, 'M', u'β'), - (0x1D772, 'M', u'γ'), - (0x1D773, 'M', u'δ'), - (0x1D774, 'M', u'ε'), - (0x1D775, 'M', u'ζ'), - (0x1D776, 'M', u'η'), - (0x1D777, 'M', u'θ'), - (0x1D778, 'M', u'ι'), - (0x1D779, 'M', u'κ'), - (0x1D77A, 'M', u'λ'), - (0x1D77B, 'M', u'μ'), - (0x1D77C, 'M', u'ν'), - (0x1D77D, 'M', u'ξ'), - (0x1D77E, 'M', u'ο'), - (0x1D77F, 'M', u'π'), - (0x1D780, 'M', u'ρ'), - (0x1D781, 'M', u'σ'), - (0x1D783, 'M', u'τ'), - (0x1D784, 'M', u'υ'), - (0x1D785, 'M', u'φ'), - (0x1D786, 'M', u'χ'), - (0x1D787, 'M', u'ψ'), - (0x1D788, 'M', u'ω'), - (0x1D789, 'M', u'∂'), - (0x1D78A, 'M', u'ε'), - (0x1D78B, 'M', u'θ'), - (0x1D78C, 'M', u'κ'), - (0x1D78D, 'M', u'φ'), - (0x1D78E, 'M', u'ρ'), - (0x1D78F, 'M', u'π'), - (0x1D790, 'M', u'α'), - (0x1D791, 'M', u'β'), - (0x1D792, 'M', u'γ'), - (0x1D793, 'M', u'δ'), - (0x1D794, 'M', u'ε'), - (0x1D795, 'M', u'ζ'), - (0x1D796, 'M', u'η'), - (0x1D797, 'M', u'θ'), - (0x1D798, 'M', u'ι'), - (0x1D799, 'M', u'κ'), - (0x1D79A, 'M', u'λ'), - (0x1D79B, 'M', u'μ'), - (0x1D79C, 'M', u'ν'), - (0x1D79D, 'M', u'ξ'), - (0x1D79E, 'M', u'ο'), - (0x1D79F, 'M', u'π'), - (0x1D7A0, 'M', u'ρ'), - (0x1D7A1, 'M', u'θ'), - (0x1D7A2, 'M', u'σ'), - (0x1D7A3, 'M', u'τ'), - (0x1D7A4, 'M', u'υ'), - (0x1D7A5, 'M', u'φ'), - (0x1D7A6, 'M', u'χ'), - (0x1D7A7, 'M', u'ψ'), - (0x1D7A8, 'M', u'ω'), - (0x1D7A9, 'M', u'∇'), - (0x1D7AA, 'M', u'α'), - (0x1D7AB, 'M', u'β'), - (0x1D7AC, 'M', u'γ'), - (0x1D7AD, 'M', u'δ'), - (0x1D7AE, 'M', u'ε'), - (0x1D7AF, 'M', u'ζ'), - (0x1D7B0, 'M', u'η'), - (0x1D7B1, 'M', u'θ'), - (0x1D7B2, 'M', u'ι'), - (0x1D7B3, 'M', u'κ'), - (0x1D7B4, 'M', u'λ'), - (0x1D7B5, 'M', u'μ'), - (0x1D7B6, 'M', u'ν'), - (0x1D7B7, 'M', u'ξ'), - (0x1D7B8, 'M', u'ο'), - (0x1D7B9, 'M', u'π'), - (0x1D7BA, 'M', u'ρ'), - (0x1D7BB, 'M', u'σ'), - (0x1D7BD, 'M', u'τ'), - (0x1D7BE, 'M', u'υ'), - (0x1D7BF, 'M', u'φ'), - (0x1D7C0, 'M', u'χ'), - (0x1D7C1, 'M', u'ψ'), - (0x1D7C2, 'M', u'ω'), - (0x1D7C3, 'M', u'∂'), - (0x1D7C4, 'M', u'ε'), - (0x1D7C5, 'M', u'θ'), - (0x1D7C6, 'M', u'κ'), - (0x1D7C7, 'M', u'φ'), - (0x1D7C8, 'M', u'ρ'), - (0x1D7C9, 'M', u'π'), - (0x1D7CA, 'M', u'ϝ'), - (0x1D7CC, 'X'), - (0x1D7CE, 'M', u'0'), - ] - -def _seg_63(): - return [ - (0x1D7CF, 'M', u'1'), - (0x1D7D0, 'M', u'2'), - (0x1D7D1, 'M', u'3'), - (0x1D7D2, 'M', u'4'), - (0x1D7D3, 'M', u'5'), - (0x1D7D4, 'M', u'6'), - (0x1D7D5, 'M', u'7'), - (0x1D7D6, 'M', u'8'), - (0x1D7D7, 'M', u'9'), - (0x1D7D8, 'M', u'0'), - (0x1D7D9, 'M', u'1'), - (0x1D7DA, 'M', u'2'), - (0x1D7DB, 'M', u'3'), - (0x1D7DC, 'M', u'4'), - (0x1D7DD, 'M', u'5'), - (0x1D7DE, 'M', u'6'), - (0x1D7DF, 'M', u'7'), - (0x1D7E0, 'M', u'8'), - (0x1D7E1, 'M', u'9'), - (0x1D7E2, 'M', u'0'), - (0x1D7E3, 'M', u'1'), - (0x1D7E4, 'M', u'2'), - (0x1D7E5, 'M', u'3'), - (0x1D7E6, 'M', u'4'), - (0x1D7E7, 'M', u'5'), - (0x1D7E8, 'M', u'6'), - (0x1D7E9, 'M', u'7'), - (0x1D7EA, 'M', u'8'), - (0x1D7EB, 'M', u'9'), - (0x1D7EC, 'M', u'0'), - (0x1D7ED, 'M', u'1'), - (0x1D7EE, 'M', u'2'), - (0x1D7EF, 'M', u'3'), - (0x1D7F0, 'M', u'4'), - (0x1D7F1, 'M', u'5'), - (0x1D7F2, 'M', u'6'), - (0x1D7F3, 'M', u'7'), - (0x1D7F4, 'M', u'8'), - (0x1D7F5, 'M', u'9'), - (0x1D7F6, 'M', u'0'), - (0x1D7F7, 'M', u'1'), - (0x1D7F8, 'M', u'2'), - (0x1D7F9, 'M', u'3'), - (0x1D7FA, 'M', u'4'), - (0x1D7FB, 'M', u'5'), - (0x1D7FC, 'M', u'6'), - (0x1D7FD, 'M', u'7'), - (0x1D7FE, 'M', u'8'), - (0x1D7FF, 'M', u'9'), - (0x1D800, 'X'), - (0x1EE00, 'M', u'ا'), - (0x1EE01, 'M', u'ب'), - (0x1EE02, 'M', u'ج'), - (0x1EE03, 'M', u'د'), - (0x1EE04, 'X'), - (0x1EE05, 'M', u'و'), - (0x1EE06, 'M', u'ز'), - (0x1EE07, 'M', u'ح'), - (0x1EE08, 'M', u'ط'), - (0x1EE09, 'M', u'ي'), - (0x1EE0A, 'M', u'ك'), - (0x1EE0B, 'M', u'ل'), - (0x1EE0C, 'M', u'م'), - (0x1EE0D, 'M', u'ن'), - (0x1EE0E, 'M', u'س'), - (0x1EE0F, 'M', u'ع'), - (0x1EE10, 'M', u'ف'), - (0x1EE11, 'M', u'ص'), - (0x1EE12, 'M', u'ق'), - (0x1EE13, 'M', u'ر'), - (0x1EE14, 'M', u'ش'), - (0x1EE15, 'M', u'ت'), - (0x1EE16, 'M', u'ث'), - (0x1EE17, 'M', u'خ'), - (0x1EE18, 'M', u'ذ'), - (0x1EE19, 'M', u'ض'), - (0x1EE1A, 'M', u'ظ'), - (0x1EE1B, 'M', u'غ'), - (0x1EE1C, 'M', u'ٮ'), - (0x1EE1D, 'M', u'ں'), - (0x1EE1E, 'M', u'ڡ'), - (0x1EE1F, 'M', u'ٯ'), - (0x1EE20, 'X'), - (0x1EE21, 'M', u'ب'), - (0x1EE22, 'M', u'ج'), - (0x1EE23, 'X'), - (0x1EE24, 'M', u'ه'), - (0x1EE25, 'X'), - (0x1EE27, 'M', u'ح'), - (0x1EE28, 'X'), - (0x1EE29, 'M', u'ي'), - (0x1EE2A, 'M', u'ك'), - (0x1EE2B, 'M', u'ل'), - (0x1EE2C, 'M', u'م'), - (0x1EE2D, 'M', u'ن'), - (0x1EE2E, 'M', u'س'), - (0x1EE2F, 'M', u'ع'), - (0x1EE30, 'M', u'ف'), - (0x1EE31, 'M', u'ص'), - (0x1EE32, 'M', u'ق'), - ] - -def _seg_64(): - return [ - (0x1EE33, 'X'), - (0x1EE34, 'M', u'ش'), - (0x1EE35, 'M', u'ت'), - (0x1EE36, 'M', u'ث'), - (0x1EE37, 'M', u'خ'), - (0x1EE38, 'X'), - (0x1EE39, 'M', u'ض'), - (0x1EE3A, 'X'), - (0x1EE3B, 'M', u'غ'), - (0x1EE3C, 'X'), - (0x1EE42, 'M', u'ج'), - (0x1EE43, 'X'), - (0x1EE47, 'M', u'ح'), - (0x1EE48, 'X'), - (0x1EE49, 'M', u'ي'), - (0x1EE4A, 'X'), - (0x1EE4B, 'M', u'ل'), - (0x1EE4C, 'X'), - (0x1EE4D, 'M', u'ن'), - (0x1EE4E, 'M', u'س'), - (0x1EE4F, 'M', u'ع'), - (0x1EE50, 'X'), - (0x1EE51, 'M', u'ص'), - (0x1EE52, 'M', u'ق'), - (0x1EE53, 'X'), - (0x1EE54, 'M', u'ش'), - (0x1EE55, 'X'), - (0x1EE57, 'M', u'خ'), - (0x1EE58, 'X'), - (0x1EE59, 'M', u'ض'), - (0x1EE5A, 'X'), - (0x1EE5B, 'M', u'غ'), - (0x1EE5C, 'X'), - (0x1EE5D, 'M', u'ں'), - (0x1EE5E, 'X'), - (0x1EE5F, 'M', u'ٯ'), - (0x1EE60, 'X'), - (0x1EE61, 'M', u'ب'), - (0x1EE62, 'M', u'ج'), - (0x1EE63, 'X'), - (0x1EE64, 'M', u'ه'), - (0x1EE65, 'X'), - (0x1EE67, 'M', u'ح'), - (0x1EE68, 'M', u'ط'), - (0x1EE69, 'M', u'ي'), - (0x1EE6A, 'M', u'ك'), - (0x1EE6B, 'X'), - (0x1EE6C, 'M', u'م'), - (0x1EE6D, 'M', u'ن'), - (0x1EE6E, 'M', u'س'), - (0x1EE6F, 'M', u'ع'), - (0x1EE70, 'M', u'ف'), - (0x1EE71, 'M', u'ص'), - (0x1EE72, 'M', u'ق'), - (0x1EE73, 'X'), - (0x1EE74, 'M', u'ش'), - (0x1EE75, 'M', u'ت'), - (0x1EE76, 'M', u'ث'), - (0x1EE77, 'M', u'خ'), - (0x1EE78, 'X'), - (0x1EE79, 'M', u'ض'), - (0x1EE7A, 'M', u'ظ'), - (0x1EE7B, 'M', u'غ'), - (0x1EE7C, 'M', u'ٮ'), - (0x1EE7D, 'X'), - (0x1EE7E, 'M', u'ڡ'), - (0x1EE7F, 'X'), - (0x1EE80, 'M', u'ا'), - (0x1EE81, 'M', u'ب'), - (0x1EE82, 'M', u'ج'), - (0x1EE83, 'M', u'د'), - (0x1EE84, 'M', u'ه'), - (0x1EE85, 'M', u'و'), - (0x1EE86, 'M', u'ز'), - (0x1EE87, 'M', u'ح'), - (0x1EE88, 'M', u'ط'), - (0x1EE89, 'M', u'ي'), - (0x1EE8A, 'X'), - (0x1EE8B, 'M', u'ل'), - (0x1EE8C, 'M', u'م'), - (0x1EE8D, 'M', u'ن'), - (0x1EE8E, 'M', u'س'), - (0x1EE8F, 'M', u'ع'), - (0x1EE90, 'M', u'ف'), - (0x1EE91, 'M', u'ص'), - (0x1EE92, 'M', u'ق'), - (0x1EE93, 'M', u'ر'), - (0x1EE94, 'M', u'ش'), - (0x1EE95, 'M', u'ت'), - (0x1EE96, 'M', u'ث'), - (0x1EE97, 'M', u'خ'), - (0x1EE98, 'M', u'ذ'), - (0x1EE99, 'M', u'ض'), - (0x1EE9A, 'M', u'ظ'), - (0x1EE9B, 'M', u'غ'), - (0x1EE9C, 'X'), - (0x1EEA1, 'M', u'ب'), - (0x1EEA2, 'M', u'ج'), - (0x1EEA3, 'M', u'د'), - (0x1EEA4, 'X'), - ] - -def _seg_65(): - return [ - (0x1EEA5, 'M', u'و'), - (0x1EEA6, 'M', u'ز'), - (0x1EEA7, 'M', u'ح'), - (0x1EEA8, 'M', u'ط'), - (0x1EEA9, 'M', u'ي'), - (0x1EEAA, 'X'), - (0x1EEAB, 'M', u'ل'), - (0x1EEAC, 'M', u'م'), - (0x1EEAD, 'M', u'ن'), - (0x1EEAE, 'M', u'س'), - (0x1EEAF, 'M', u'ع'), - (0x1EEB0, 'M', u'ف'), - (0x1EEB1, 'M', u'ص'), - (0x1EEB2, 'M', u'ق'), - (0x1EEB3, 'M', u'ر'), - (0x1EEB4, 'M', u'ش'), - (0x1EEB5, 'M', u'ت'), - (0x1EEB6, 'M', u'ث'), - (0x1EEB7, 'M', u'خ'), - (0x1EEB8, 'M', u'ذ'), - (0x1EEB9, 'M', u'ض'), - (0x1EEBA, 'M', u'ظ'), - (0x1EEBB, 'M', u'غ'), - (0x1EEBC, 'X'), - (0x1EEF0, 'V'), - (0x1EEF2, 'X'), - (0x1F000, 'V'), - (0x1F02C, 'X'), - (0x1F030, 'V'), - (0x1F094, 'X'), - (0x1F0A0, 'V'), - (0x1F0AF, 'X'), - (0x1F0B1, 'V'), - (0x1F0BF, 'X'), - (0x1F0C1, 'V'), - (0x1F0D0, 'X'), - (0x1F0D1, 'V'), - (0x1F0E0, 'X'), - (0x1F101, '3', u'0,'), - (0x1F102, '3', u'1,'), - (0x1F103, '3', u'2,'), - (0x1F104, '3', u'3,'), - (0x1F105, '3', u'4,'), - (0x1F106, '3', u'5,'), - (0x1F107, '3', u'6,'), - (0x1F108, '3', u'7,'), - (0x1F109, '3', u'8,'), - (0x1F10A, '3', u'9,'), - (0x1F10B, 'X'), - (0x1F110, '3', u'(a)'), - (0x1F111, '3', u'(b)'), - (0x1F112, '3', u'(c)'), - (0x1F113, '3', u'(d)'), - (0x1F114, '3', u'(e)'), - (0x1F115, '3', u'(f)'), - (0x1F116, '3', u'(g)'), - (0x1F117, '3', u'(h)'), - (0x1F118, '3', u'(i)'), - (0x1F119, '3', u'(j)'), - (0x1F11A, '3', u'(k)'), - (0x1F11B, '3', u'(l)'), - (0x1F11C, '3', u'(m)'), - (0x1F11D, '3', u'(n)'), - (0x1F11E, '3', u'(o)'), - (0x1F11F, '3', u'(p)'), - (0x1F120, '3', u'(q)'), - (0x1F121, '3', u'(r)'), - (0x1F122, '3', u'(s)'), - (0x1F123, '3', u'(t)'), - (0x1F124, '3', u'(u)'), - (0x1F125, '3', u'(v)'), - (0x1F126, '3', u'(w)'), - (0x1F127, '3', u'(x)'), - (0x1F128, '3', u'(y)'), - (0x1F129, '3', u'(z)'), - (0x1F12A, 'M', u'〔s〕'), - (0x1F12B, 'M', u'c'), - (0x1F12C, 'M', u'r'), - (0x1F12D, 'M', u'cd'), - (0x1F12E, 'M', u'wz'), - (0x1F12F, 'X'), - (0x1F130, 'M', u'a'), - (0x1F131, 'M', u'b'), - (0x1F132, 'M', u'c'), - (0x1F133, 'M', u'd'), - (0x1F134, 'M', u'e'), - (0x1F135, 'M', u'f'), - (0x1F136, 'M', u'g'), - (0x1F137, 'M', u'h'), - (0x1F138, 'M', u'i'), - (0x1F139, 'M', u'j'), - (0x1F13A, 'M', u'k'), - (0x1F13B, 'M', u'l'), - (0x1F13C, 'M', u'm'), - (0x1F13D, 'M', u'n'), - (0x1F13E, 'M', u'o'), - (0x1F13F, 'M', u'p'), - (0x1F140, 'M', u'q'), - (0x1F141, 'M', u'r'), - (0x1F142, 'M', u's'), - ] - -def _seg_66(): - return [ - (0x1F143, 'M', u't'), - (0x1F144, 'M', u'u'), - (0x1F145, 'M', u'v'), - (0x1F146, 'M', u'w'), - (0x1F147, 'M', u'x'), - (0x1F148, 'M', u'y'), - (0x1F149, 'M', u'z'), - (0x1F14A, 'M', u'hv'), - (0x1F14B, 'M', u'mv'), - (0x1F14C, 'M', u'sd'), - (0x1F14D, 'M', u'ss'), - (0x1F14E, 'M', u'ppv'), - (0x1F14F, 'M', u'wc'), - (0x1F150, 'V'), - (0x1F16A, 'M', u'mc'), - (0x1F16B, 'M', u'md'), - (0x1F16C, 'X'), - (0x1F170, 'V'), - (0x1F190, 'M', u'dj'), - (0x1F191, 'V'), - (0x1F19B, 'X'), - (0x1F1E6, 'V'), - (0x1F200, 'M', u'ほか'), - (0x1F201, 'M', u'ココ'), - (0x1F202, 'M', u'サ'), - (0x1F203, 'X'), - (0x1F210, 'M', u'手'), - (0x1F211, 'M', u'字'), - (0x1F212, 'M', u'双'), - (0x1F213, 'M', u'デ'), - (0x1F214, 'M', u'二'), - (0x1F215, 'M', u'多'), - (0x1F216, 'M', u'解'), - (0x1F217, 'M', u'天'), - (0x1F218, 'M', u'交'), - (0x1F219, 'M', u'映'), - (0x1F21A, 'M', u'無'), - (0x1F21B, 'M', u'料'), - (0x1F21C, 'M', u'前'), - (0x1F21D, 'M', u'後'), - (0x1F21E, 'M', u'再'), - (0x1F21F, 'M', u'新'), - (0x1F220, 'M', u'初'), - (0x1F221, 'M', u'終'), - (0x1F222, 'M', u'生'), - (0x1F223, 'M', u'販'), - (0x1F224, 'M', u'声'), - (0x1F225, 'M', u'吹'), - (0x1F226, 'M', u'演'), - (0x1F227, 'M', u'投'), - (0x1F228, 'M', u'捕'), - (0x1F229, 'M', u'一'), - (0x1F22A, 'M', u'三'), - (0x1F22B, 'M', u'遊'), - (0x1F22C, 'M', u'左'), - (0x1F22D, 'M', u'中'), - (0x1F22E, 'M', u'右'), - (0x1F22F, 'M', u'指'), - (0x1F230, 'M', u'走'), - (0x1F231, 'M', u'打'), - (0x1F232, 'M', u'禁'), - (0x1F233, 'M', u'空'), - (0x1F234, 'M', u'合'), - (0x1F235, 'M', u'満'), - (0x1F236, 'M', u'有'), - (0x1F237, 'M', u'月'), - (0x1F238, 'M', u'申'), - (0x1F239, 'M', u'割'), - (0x1F23A, 'M', u'営'), - (0x1F23B, 'X'), - (0x1F240, 'M', u'〔本〕'), - (0x1F241, 'M', u'〔三〕'), - (0x1F242, 'M', u'〔二〕'), - (0x1F243, 'M', u'〔安〕'), - (0x1F244, 'M', u'〔点〕'), - (0x1F245, 'M', u'〔打〕'), - (0x1F246, 'M', u'〔盗〕'), - (0x1F247, 'M', u'〔勝〕'), - (0x1F248, 'M', u'〔敗〕'), - (0x1F249, 'X'), - (0x1F250, 'M', u'得'), - (0x1F251, 'M', u'可'), - (0x1F252, 'X'), - (0x1F300, 'V'), - (0x1F321, 'X'), - (0x1F330, 'V'), - (0x1F336, 'X'), - (0x1F337, 'V'), - (0x1F37D, 'X'), - (0x1F380, 'V'), - (0x1F394, 'X'), - (0x1F3A0, 'V'), - (0x1F3C5, 'X'), - (0x1F3C6, 'V'), - (0x1F3CB, 'X'), - (0x1F3E0, 'V'), - (0x1F3F1, 'X'), - (0x1F400, 'V'), - (0x1F43F, 'X'), - (0x1F440, 'V'), - ] - -def _seg_67(): - return [ - (0x1F441, 'X'), - (0x1F442, 'V'), - (0x1F4F8, 'X'), - (0x1F4F9, 'V'), - (0x1F4FD, 'X'), - (0x1F500, 'V'), - (0x1F53E, 'X'), - (0x1F540, 'V'), - (0x1F544, 'X'), - (0x1F550, 'V'), - (0x1F568, 'X'), - (0x1F5FB, 'V'), - (0x1F641, 'X'), - (0x1F645, 'V'), - (0x1F650, 'X'), - (0x1F680, 'V'), - (0x1F6C6, 'X'), - (0x1F700, 'V'), - (0x1F774, 'X'), - (0x20000, 'V'), - (0x2A6D7, 'X'), - (0x2A700, 'V'), - (0x2B735, 'X'), - (0x2B740, 'V'), - (0x2B81E, 'X'), - (0x2F800, 'M', u'丽'), - (0x2F801, 'M', u'丸'), - (0x2F802, 'M', u'乁'), - (0x2F803, 'M', u'𠄢'), - (0x2F804, 'M', u'你'), - (0x2F805, 'M', u'侮'), - (0x2F806, 'M', u'侻'), - (0x2F807, 'M', u'倂'), - (0x2F808, 'M', u'偺'), - (0x2F809, 'M', u'備'), - (0x2F80A, 'M', u'僧'), - (0x2F80B, 'M', u'像'), - (0x2F80C, 'M', u'㒞'), - (0x2F80D, 'M', u'𠘺'), - (0x2F80E, 'M', u'免'), - (0x2F80F, 'M', u'兔'), - (0x2F810, 'M', u'兤'), - (0x2F811, 'M', u'具'), - (0x2F812, 'M', u'𠔜'), - (0x2F813, 'M', u'㒹'), - (0x2F814, 'M', u'內'), - (0x2F815, 'M', u'再'), - (0x2F816, 'M', u'𠕋'), - (0x2F817, 'M', u'冗'), - (0x2F818, 'M', u'冤'), - (0x2F819, 'M', u'仌'), - (0x2F81A, 'M', u'冬'), - (0x2F81B, 'M', u'况'), - (0x2F81C, 'M', u'𩇟'), - (0x2F81D, 'M', u'凵'), - (0x2F81E, 'M', u'刃'), - (0x2F81F, 'M', u'㓟'), - (0x2F820, 'M', u'刻'), - (0x2F821, 'M', u'剆'), - (0x2F822, 'M', u'割'), - (0x2F823, 'M', u'剷'), - (0x2F824, 'M', u'㔕'), - (0x2F825, 'M', u'勇'), - (0x2F826, 'M', u'勉'), - (0x2F827, 'M', u'勤'), - (0x2F828, 'M', u'勺'), - (0x2F829, 'M', u'包'), - (0x2F82A, 'M', u'匆'), - (0x2F82B, 'M', u'北'), - (0x2F82C, 'M', u'卉'), - (0x2F82D, 'M', u'卑'), - (0x2F82E, 'M', u'博'), - (0x2F82F, 'M', u'即'), - (0x2F830, 'M', u'卽'), - (0x2F831, 'M', u'卿'), - (0x2F834, 'M', u'𠨬'), - (0x2F835, 'M', u'灰'), - (0x2F836, 'M', u'及'), - (0x2F837, 'M', u'叟'), - (0x2F838, 'M', u'𠭣'), - (0x2F839, 'M', u'叫'), - (0x2F83A, 'M', u'叱'), - (0x2F83B, 'M', u'吆'), - (0x2F83C, 'M', u'咞'), - (0x2F83D, 'M', u'吸'), - (0x2F83E, 'M', u'呈'), - (0x2F83F, 'M', u'周'), - (0x2F840, 'M', u'咢'), - (0x2F841, 'M', u'哶'), - (0x2F842, 'M', u'唐'), - (0x2F843, 'M', u'啓'), - (0x2F844, 'M', u'啣'), - (0x2F845, 'M', u'善'), - (0x2F847, 'M', u'喙'), - (0x2F848, 'M', u'喫'), - (0x2F849, 'M', u'喳'), - (0x2F84A, 'M', u'嗂'), - (0x2F84B, 'M', u'圖'), - (0x2F84C, 'M', u'嘆'), - (0x2F84D, 'M', u'圗'), - ] - -def _seg_68(): - return [ - (0x2F84E, 'M', u'噑'), - (0x2F84F, 'M', u'噴'), - (0x2F850, 'M', u'切'), - (0x2F851, 'M', u'壮'), - (0x2F852, 'M', u'城'), - (0x2F853, 'M', u'埴'), - (0x2F854, 'M', u'堍'), - (0x2F855, 'M', u'型'), - (0x2F856, 'M', u'堲'), - (0x2F857, 'M', u'報'), - (0x2F858, 'M', u'墬'), - (0x2F859, 'M', u'𡓤'), - (0x2F85A, 'M', u'売'), - (0x2F85B, 'M', u'壷'), - (0x2F85C, 'M', u'夆'), - (0x2F85D, 'M', u'多'), - (0x2F85E, 'M', u'夢'), - (0x2F85F, 'M', u'奢'), - (0x2F860, 'M', u'𡚨'), - (0x2F861, 'M', u'𡛪'), - (0x2F862, 'M', u'姬'), - (0x2F863, 'M', u'娛'), - (0x2F864, 'M', u'娧'), - (0x2F865, 'M', u'姘'), - (0x2F866, 'M', u'婦'), - (0x2F867, 'M', u'㛮'), - (0x2F868, 'X'), - (0x2F869, 'M', u'嬈'), - (0x2F86A, 'M', u'嬾'), - (0x2F86C, 'M', u'𡧈'), - (0x2F86D, 'M', u'寃'), - (0x2F86E, 'M', u'寘'), - (0x2F86F, 'M', u'寧'), - (0x2F870, 'M', u'寳'), - (0x2F871, 'M', u'𡬘'), - (0x2F872, 'M', u'寿'), - (0x2F873, 'M', u'将'), - (0x2F874, 'X'), - (0x2F875, 'M', u'尢'), - (0x2F876, 'M', u'㞁'), - (0x2F877, 'M', u'屠'), - (0x2F878, 'M', u'屮'), - (0x2F879, 'M', u'峀'), - (0x2F87A, 'M', u'岍'), - (0x2F87B, 'M', u'𡷤'), - (0x2F87C, 'M', u'嵃'), - (0x2F87D, 'M', u'𡷦'), - (0x2F87E, 'M', u'嵮'), - (0x2F87F, 'M', u'嵫'), - (0x2F880, 'M', u'嵼'), - (0x2F881, 'M', u'巡'), - (0x2F882, 'M', u'巢'), - (0x2F883, 'M', u'㠯'), - (0x2F884, 'M', u'巽'), - (0x2F885, 'M', u'帨'), - (0x2F886, 'M', u'帽'), - (0x2F887, 'M', u'幩'), - (0x2F888, 'M', u'㡢'), - (0x2F889, 'M', u'𢆃'), - (0x2F88A, 'M', u'㡼'), - (0x2F88B, 'M', u'庰'), - (0x2F88C, 'M', u'庳'), - (0x2F88D, 'M', u'庶'), - (0x2F88E, 'M', u'廊'), - (0x2F88F, 'M', u'𪎒'), - (0x2F890, 'M', u'廾'), - (0x2F891, 'M', u'𢌱'), - (0x2F893, 'M', u'舁'), - (0x2F894, 'M', u'弢'), - (0x2F896, 'M', u'㣇'), - (0x2F897, 'M', u'𣊸'), - (0x2F898, 'M', u'𦇚'), - (0x2F899, 'M', u'形'), - (0x2F89A, 'M', u'彫'), - (0x2F89B, 'M', u'㣣'), - (0x2F89C, 'M', u'徚'), - (0x2F89D, 'M', u'忍'), - (0x2F89E, 'M', u'志'), - (0x2F89F, 'M', u'忹'), - (0x2F8A0, 'M', u'悁'), - (0x2F8A1, 'M', u'㤺'), - (0x2F8A2, 'M', u'㤜'), - (0x2F8A3, 'M', u'悔'), - (0x2F8A4, 'M', u'𢛔'), - (0x2F8A5, 'M', u'惇'), - (0x2F8A6, 'M', u'慈'), - (0x2F8A7, 'M', u'慌'), - (0x2F8A8, 'M', u'慎'), - (0x2F8A9, 'M', u'慌'), - (0x2F8AA, 'M', u'慺'), - (0x2F8AB, 'M', u'憎'), - (0x2F8AC, 'M', u'憲'), - (0x2F8AD, 'M', u'憤'), - (0x2F8AE, 'M', u'憯'), - (0x2F8AF, 'M', u'懞'), - (0x2F8B0, 'M', u'懲'), - (0x2F8B1, 'M', u'懶'), - (0x2F8B2, 'M', u'成'), - (0x2F8B3, 'M', u'戛'), - (0x2F8B4, 'M', u'扝'), - ] - -def _seg_69(): - return [ - (0x2F8B5, 'M', u'抱'), - (0x2F8B6, 'M', u'拔'), - (0x2F8B7, 'M', u'捐'), - (0x2F8B8, 'M', u'𢬌'), - (0x2F8B9, 'M', u'挽'), - (0x2F8BA, 'M', u'拼'), - (0x2F8BB, 'M', u'捨'), - (0x2F8BC, 'M', u'掃'), - (0x2F8BD, 'M', u'揤'), - (0x2F8BE, 'M', u'𢯱'), - (0x2F8BF, 'M', u'搢'), - (0x2F8C0, 'M', u'揅'), - (0x2F8C1, 'M', u'掩'), - (0x2F8C2, 'M', u'㨮'), - (0x2F8C3, 'M', u'摩'), - (0x2F8C4, 'M', u'摾'), - (0x2F8C5, 'M', u'撝'), - (0x2F8C6, 'M', u'摷'), - (0x2F8C7, 'M', u'㩬'), - (0x2F8C8, 'M', u'敏'), - (0x2F8C9, 'M', u'敬'), - (0x2F8CA, 'M', u'𣀊'), - (0x2F8CB, 'M', u'旣'), - (0x2F8CC, 'M', u'書'), - (0x2F8CD, 'M', u'晉'), - (0x2F8CE, 'M', u'㬙'), - (0x2F8CF, 'M', u'暑'), - (0x2F8D0, 'M', u'㬈'), - (0x2F8D1, 'M', u'㫤'), - (0x2F8D2, 'M', u'冒'), - (0x2F8D3, 'M', u'冕'), - (0x2F8D4, 'M', u'最'), - (0x2F8D5, 'M', u'暜'), - (0x2F8D6, 'M', u'肭'), - (0x2F8D7, 'M', u'䏙'), - (0x2F8D8, 'M', u'朗'), - (0x2F8D9, 'M', u'望'), - (0x2F8DA, 'M', u'朡'), - (0x2F8DB, 'M', u'杞'), - (0x2F8DC, 'M', u'杓'), - (0x2F8DD, 'M', u'𣏃'), - (0x2F8DE, 'M', u'㭉'), - (0x2F8DF, 'M', u'柺'), - (0x2F8E0, 'M', u'枅'), - (0x2F8E1, 'M', u'桒'), - (0x2F8E2, 'M', u'梅'), - (0x2F8E3, 'M', u'𣑭'), - (0x2F8E4, 'M', u'梎'), - (0x2F8E5, 'M', u'栟'), - (0x2F8E6, 'M', u'椔'), - (0x2F8E7, 'M', u'㮝'), - (0x2F8E8, 'M', u'楂'), - (0x2F8E9, 'M', u'榣'), - (0x2F8EA, 'M', u'槪'), - (0x2F8EB, 'M', u'檨'), - (0x2F8EC, 'M', u'𣚣'), - (0x2F8ED, 'M', u'櫛'), - (0x2F8EE, 'M', u'㰘'), - (0x2F8EF, 'M', u'次'), - (0x2F8F0, 'M', u'𣢧'), - (0x2F8F1, 'M', u'歔'), - (0x2F8F2, 'M', u'㱎'), - (0x2F8F3, 'M', u'歲'), - (0x2F8F4, 'M', u'殟'), - (0x2F8F5, 'M', u'殺'), - (0x2F8F6, 'M', u'殻'), - (0x2F8F7, 'M', u'𣪍'), - (0x2F8F8, 'M', u'𡴋'), - (0x2F8F9, 'M', u'𣫺'), - (0x2F8FA, 'M', u'汎'), - (0x2F8FB, 'M', u'𣲼'), - (0x2F8FC, 'M', u'沿'), - (0x2F8FD, 'M', u'泍'), - (0x2F8FE, 'M', u'汧'), - (0x2F8FF, 'M', u'洖'), - (0x2F900, 'M', u'派'), - (0x2F901, 'M', u'海'), - (0x2F902, 'M', u'流'), - (0x2F903, 'M', u'浩'), - (0x2F904, 'M', u'浸'), - (0x2F905, 'M', u'涅'), - (0x2F906, 'M', u'𣴞'), - (0x2F907, 'M', u'洴'), - (0x2F908, 'M', u'港'), - (0x2F909, 'M', u'湮'), - (0x2F90A, 'M', u'㴳'), - (0x2F90B, 'M', u'滋'), - (0x2F90C, 'M', u'滇'), - (0x2F90D, 'M', u'𣻑'), - (0x2F90E, 'M', u'淹'), - (0x2F90F, 'M', u'潮'), - (0x2F910, 'M', u'𣽞'), - (0x2F911, 'M', u'𣾎'), - (0x2F912, 'M', u'濆'), - (0x2F913, 'M', u'瀹'), - (0x2F914, 'M', u'瀞'), - (0x2F915, 'M', u'瀛'), - (0x2F916, 'M', u'㶖'), - (0x2F917, 'M', u'灊'), - (0x2F918, 'M', u'災'), - ] - -def _seg_70(): - return [ - (0x2F919, 'M', u'灷'), - (0x2F91A, 'M', u'炭'), - (0x2F91B, 'M', u'𠔥'), - (0x2F91C, 'M', u'煅'), - (0x2F91D, 'M', u'𤉣'), - (0x2F91E, 'M', u'熜'), - (0x2F91F, 'X'), - (0x2F920, 'M', u'爨'), - (0x2F921, 'M', u'爵'), - (0x2F922, 'M', u'牐'), - (0x2F923, 'M', u'𤘈'), - (0x2F924, 'M', u'犀'), - (0x2F925, 'M', u'犕'), - (0x2F926, 'M', u'𤜵'), - (0x2F927, 'M', u'𤠔'), - (0x2F928, 'M', u'獺'), - (0x2F929, 'M', u'王'), - (0x2F92A, 'M', u'㺬'), - (0x2F92B, 'M', u'玥'), - (0x2F92C, 'M', u'㺸'), - (0x2F92E, 'M', u'瑇'), - (0x2F92F, 'M', u'瑜'), - (0x2F930, 'M', u'瑱'), - (0x2F931, 'M', u'璅'), - (0x2F932, 'M', u'瓊'), - (0x2F933, 'M', u'㼛'), - (0x2F934, 'M', u'甤'), - (0x2F935, 'M', u'𤰶'), - (0x2F936, 'M', u'甾'), - (0x2F937, 'M', u'𤲒'), - (0x2F938, 'M', u'異'), - (0x2F939, 'M', u'𢆟'), - (0x2F93A, 'M', u'瘐'), - (0x2F93B, 'M', u'𤾡'), - (0x2F93C, 'M', u'𤾸'), - (0x2F93D, 'M', u'𥁄'), - (0x2F93E, 'M', u'㿼'), - (0x2F93F, 'M', u'䀈'), - (0x2F940, 'M', u'直'), - (0x2F941, 'M', u'𥃳'), - (0x2F942, 'M', u'𥃲'), - (0x2F943, 'M', u'𥄙'), - (0x2F944, 'M', u'𥄳'), - (0x2F945, 'M', u'眞'), - (0x2F946, 'M', u'真'), - (0x2F948, 'M', u'睊'), - (0x2F949, 'M', u'䀹'), - (0x2F94A, 'M', u'瞋'), - (0x2F94B, 'M', u'䁆'), - (0x2F94C, 'M', u'䂖'), - (0x2F94D, 'M', u'𥐝'), - (0x2F94E, 'M', u'硎'), - (0x2F94F, 'M', u'碌'), - (0x2F950, 'M', u'磌'), - (0x2F951, 'M', u'䃣'), - (0x2F952, 'M', u'𥘦'), - (0x2F953, 'M', u'祖'), - (0x2F954, 'M', u'𥚚'), - (0x2F955, 'M', u'𥛅'), - (0x2F956, 'M', u'福'), - (0x2F957, 'M', u'秫'), - (0x2F958, 'M', u'䄯'), - (0x2F959, 'M', u'穀'), - (0x2F95A, 'M', u'穊'), - (0x2F95B, 'M', u'穏'), - (0x2F95C, 'M', u'𥥼'), - (0x2F95D, 'M', u'𥪧'), - (0x2F95F, 'X'), - (0x2F960, 'M', u'䈂'), - (0x2F961, 'M', u'𥮫'), - (0x2F962, 'M', u'篆'), - (0x2F963, 'M', u'築'), - (0x2F964, 'M', u'䈧'), - (0x2F965, 'M', u'𥲀'), - (0x2F966, 'M', u'糒'), - (0x2F967, 'M', u'䊠'), - (0x2F968, 'M', u'糨'), - (0x2F969, 'M', u'糣'), - (0x2F96A, 'M', u'紀'), - (0x2F96B, 'M', u'𥾆'), - (0x2F96C, 'M', u'絣'), - (0x2F96D, 'M', u'䌁'), - (0x2F96E, 'M', u'緇'), - (0x2F96F, 'M', u'縂'), - (0x2F970, 'M', u'繅'), - (0x2F971, 'M', u'䌴'), - (0x2F972, 'M', u'𦈨'), - (0x2F973, 'M', u'𦉇'), - (0x2F974, 'M', u'䍙'), - (0x2F975, 'M', u'𦋙'), - (0x2F976, 'M', u'罺'), - (0x2F977, 'M', u'𦌾'), - (0x2F978, 'M', u'羕'), - (0x2F979, 'M', u'翺'), - (0x2F97A, 'M', u'者'), - (0x2F97B, 'M', u'𦓚'), - (0x2F97C, 'M', u'𦔣'), - (0x2F97D, 'M', u'聠'), - (0x2F97E, 'M', u'𦖨'), - (0x2F97F, 'M', u'聰'), - ] - -def _seg_71(): - return [ - (0x2F980, 'M', u'𣍟'), - (0x2F981, 'M', u'䏕'), - (0x2F982, 'M', u'育'), - (0x2F983, 'M', u'脃'), - (0x2F984, 'M', u'䐋'), - (0x2F985, 'M', u'脾'), - (0x2F986, 'M', u'媵'), - (0x2F987, 'M', u'𦞧'), - (0x2F988, 'M', u'𦞵'), - (0x2F989, 'M', u'𣎓'), - (0x2F98A, 'M', u'𣎜'), - (0x2F98B, 'M', u'舁'), - (0x2F98C, 'M', u'舄'), - (0x2F98D, 'M', u'辞'), - (0x2F98E, 'M', u'䑫'), - (0x2F98F, 'M', u'芑'), - (0x2F990, 'M', u'芋'), - (0x2F991, 'M', u'芝'), - (0x2F992, 'M', u'劳'), - (0x2F993, 'M', u'花'), - (0x2F994, 'M', u'芳'), - (0x2F995, 'M', u'芽'), - (0x2F996, 'M', u'苦'), - (0x2F997, 'M', u'𦬼'), - (0x2F998, 'M', u'若'), - (0x2F999, 'M', u'茝'), - (0x2F99A, 'M', u'荣'), - (0x2F99B, 'M', u'莭'), - (0x2F99C, 'M', u'茣'), - (0x2F99D, 'M', u'莽'), - (0x2F99E, 'M', u'菧'), - (0x2F99F, 'M', u'著'), - (0x2F9A0, 'M', u'荓'), - (0x2F9A1, 'M', u'菊'), - (0x2F9A2, 'M', u'菌'), - (0x2F9A3, 'M', u'菜'), - (0x2F9A4, 'M', u'𦰶'), - (0x2F9A5, 'M', u'𦵫'), - (0x2F9A6, 'M', u'𦳕'), - (0x2F9A7, 'M', u'䔫'), - (0x2F9A8, 'M', u'蓱'), - (0x2F9A9, 'M', u'蓳'), - (0x2F9AA, 'M', u'蔖'), - (0x2F9AB, 'M', u'𧏊'), - (0x2F9AC, 'M', u'蕤'), - (0x2F9AD, 'M', u'𦼬'), - (0x2F9AE, 'M', u'䕝'), - (0x2F9AF, 'M', u'䕡'), - (0x2F9B0, 'M', u'𦾱'), - (0x2F9B1, 'M', u'𧃒'), - (0x2F9B2, 'M', u'䕫'), - (0x2F9B3, 'M', u'虐'), - (0x2F9B4, 'M', u'虜'), - (0x2F9B5, 'M', u'虧'), - (0x2F9B6, 'M', u'虩'), - (0x2F9B7, 'M', u'蚩'), - (0x2F9B8, 'M', u'蚈'), - (0x2F9B9, 'M', u'蜎'), - (0x2F9BA, 'M', u'蛢'), - (0x2F9BB, 'M', u'蝹'), - (0x2F9BC, 'M', u'蜨'), - (0x2F9BD, 'M', u'蝫'), - (0x2F9BE, 'M', u'螆'), - (0x2F9BF, 'X'), - (0x2F9C0, 'M', u'蟡'), - (0x2F9C1, 'M', u'蠁'), - (0x2F9C2, 'M', u'䗹'), - (0x2F9C3, 'M', u'衠'), - (0x2F9C4, 'M', u'衣'), - (0x2F9C5, 'M', u'𧙧'), - (0x2F9C6, 'M', u'裗'), - (0x2F9C7, 'M', u'裞'), - (0x2F9C8, 'M', u'䘵'), - (0x2F9C9, 'M', u'裺'), - (0x2F9CA, 'M', u'㒻'), - (0x2F9CB, 'M', u'𧢮'), - (0x2F9CC, 'M', u'𧥦'), - (0x2F9CD, 'M', u'䚾'), - (0x2F9CE, 'M', u'䛇'), - (0x2F9CF, 'M', u'誠'), - (0x2F9D0, 'M', u'諭'), - (0x2F9D1, 'M', u'變'), - (0x2F9D2, 'M', u'豕'), - (0x2F9D3, 'M', u'𧲨'), - (0x2F9D4, 'M', u'貫'), - (0x2F9D5, 'M', u'賁'), - (0x2F9D6, 'M', u'贛'), - (0x2F9D7, 'M', u'起'), - (0x2F9D8, 'M', u'𧼯'), - (0x2F9D9, 'M', u'𠠄'), - (0x2F9DA, 'M', u'跋'), - (0x2F9DB, 'M', u'趼'), - (0x2F9DC, 'M', u'跰'), - (0x2F9DD, 'M', u'𠣞'), - (0x2F9DE, 'M', u'軔'), - (0x2F9DF, 'M', u'輸'), - (0x2F9E0, 'M', u'𨗒'), - (0x2F9E1, 'M', u'𨗭'), - (0x2F9E2, 'M', u'邔'), - (0x2F9E3, 'M', u'郱'), - ] - -def _seg_72(): - return [ - (0x2F9E4, 'M', u'鄑'), - (0x2F9E5, 'M', u'𨜮'), - (0x2F9E6, 'M', u'鄛'), - (0x2F9E7, 'M', u'鈸'), - (0x2F9E8, 'M', u'鋗'), - (0x2F9E9, 'M', u'鋘'), - (0x2F9EA, 'M', u'鉼'), - (0x2F9EB, 'M', u'鏹'), - (0x2F9EC, 'M', u'鐕'), - (0x2F9ED, 'M', u'𨯺'), - (0x2F9EE, 'M', u'開'), - (0x2F9EF, 'M', u'䦕'), - (0x2F9F0, 'M', u'閷'), - (0x2F9F1, 'M', u'𨵷'), - (0x2F9F2, 'M', u'䧦'), - (0x2F9F3, 'M', u'雃'), - (0x2F9F4, 'M', u'嶲'), - (0x2F9F5, 'M', u'霣'), - (0x2F9F6, 'M', u'𩅅'), - (0x2F9F7, 'M', u'𩈚'), - (0x2F9F8, 'M', u'䩮'), - (0x2F9F9, 'M', u'䩶'), - (0x2F9FA, 'M', u'韠'), - (0x2F9FB, 'M', u'𩐊'), - (0x2F9FC, 'M', u'䪲'), - (0x2F9FD, 'M', u'𩒖'), - (0x2F9FE, 'M', u'頋'), - (0x2FA00, 'M', u'頩'), - (0x2FA01, 'M', u'𩖶'), - (0x2FA02, 'M', u'飢'), - (0x2FA03, 'M', u'䬳'), - (0x2FA04, 'M', u'餩'), - (0x2FA05, 'M', u'馧'), - (0x2FA06, 'M', u'駂'), - (0x2FA07, 'M', u'駾'), - (0x2FA08, 'M', u'䯎'), - (0x2FA09, 'M', u'𩬰'), - (0x2FA0A, 'M', u'鬒'), - (0x2FA0B, 'M', u'鱀'), - (0x2FA0C, 'M', u'鳽'), - (0x2FA0D, 'M', u'䳎'), - (0x2FA0E, 'M', u'䳭'), - (0x2FA0F, 'M', u'鵧'), - (0x2FA10, 'M', u'𪃎'), - (0x2FA11, 'M', u'䳸'), - (0x2FA12, 'M', u'𪄅'), - (0x2FA13, 'M', u'𪈎'), - (0x2FA14, 'M', u'𪊑'), - (0x2FA15, 'M', u'麻'), - (0x2FA16, 'M', u'䵖'), - (0x2FA17, 'M', u'黹'), - (0x2FA18, 'M', u'黾'), - (0x2FA19, 'M', u'鼅'), - (0x2FA1A, 'M', u'鼏'), - (0x2FA1B, 'M', u'鼖'), - (0x2FA1C, 'M', u'鼻'), - (0x2FA1D, 'M', u'𪘀'), - (0x2FA1E, 'X'), - (0xE0100, 'I'), - (0xE01F0, 'X'), - ] - -uts46data = tuple( - _seg_0() - + _seg_1() - + _seg_2() - + _seg_3() - + _seg_4() - + _seg_5() - + _seg_6() - + _seg_7() - + _seg_8() - + _seg_9() - + _seg_10() - + _seg_11() - + _seg_12() - + _seg_13() - + _seg_14() - + _seg_15() - + _seg_16() - + _seg_17() - + _seg_18() - + _seg_19() - + _seg_20() - + _seg_21() - + _seg_22() - + _seg_23() - + _seg_24() - + _seg_25() - + _seg_26() - + _seg_27() - + _seg_28() - + _seg_29() - + _seg_30() - + _seg_31() - + _seg_32() - + _seg_33() - + _seg_34() - + _seg_35() - + _seg_36() - + _seg_37() - + _seg_38() - + _seg_39() - + _seg_40() - + _seg_41() - + _seg_42() - + _seg_43() - + _seg_44() - + _seg_45() - + _seg_46() - + _seg_47() - + _seg_48() - + _seg_49() - + _seg_50() - + _seg_51() - + _seg_52() - + _seg_53() - + _seg_54() - + _seg_55() - + _seg_56() - + _seg_57() - + _seg_58() - + _seg_59() - + _seg_60() - + _seg_61() - + _seg_62() - + _seg_63() - + _seg_64() - + _seg_65() - + _seg_66() - + _seg_67() - + _seg_68() - + _seg_69() - + _seg_70() - + _seg_71() - + _seg_72() -) diff --git a/pype/vendor/requests/packages/urllib3/__init__.py b/pype/vendor/requests/packages/urllib3/__init__.py deleted file mode 100644 index 26493ecb9b..0000000000 --- a/pype/vendor/requests/packages/urllib3/__init__.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -urllib3 - Thread-safe connection pooling and re-using. -""" - -from __future__ import absolute_import -import warnings - -from .connectionpool import ( - HTTPConnectionPool, - HTTPSConnectionPool, - connection_from_url -) - -from . import exceptions -from .filepost import encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import HTTPResponse -from .util.request import make_headers -from .util.url import get_host -from .util.timeout import Timeout -from .util.retry import Retry - - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -__author__ = 'Andrey Petrov (andrey.petrov@shazow.net)' -__license__ = 'MIT' -__version__ = '1.21.1' - -__all__ = ( - 'HTTPConnectionPool', - 'HTTPSConnectionPool', - 'PoolManager', - 'ProxyManager', - 'HTTPResponse', - 'Retry', - 'Timeout', - 'add_stderr_logger', - 'connection_from_url', - 'disable_warnings', - 'encode_multipart_formdata', - 'get_host', - 'make_headers', - 'proxy_from_url', -) - -logging.getLogger(__name__).addHandler(NullHandler()) - - -def add_stderr_logger(level=logging.DEBUG): - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s')) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug('Added a stderr logging handler to logger: %s', __name__) - return handler - - -# ... Clean up. -del NullHandler - - -# All warning filters *must* be appended unless you're really certain that they -# shouldn't be: otherwise, it's very hard for users to use most Python -# mechanisms to silence them. -# SecurityWarning's always go off by default. -warnings.simplefilter('always', exceptions.SecurityWarning, append=True) -# SubjectAltNameWarning's should go off once per host -warnings.simplefilter('default', exceptions.SubjectAltNameWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter('default', exceptions.InsecurePlatformWarning, - append=True) -# SNIMissingWarnings should go off only once. -warnings.simplefilter('default', exceptions.SNIMissingWarning, append=True) - - -def disable_warnings(category=exceptions.HTTPWarning): - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter('ignore', category) diff --git a/pype/vendor/requests/packages/urllib3/_collections.py b/pype/vendor/requests/packages/urllib3/_collections.py deleted file mode 100644 index 4849ddecd9..0000000000 --- a/pype/vendor/requests/packages/urllib3/_collections.py +++ /dev/null @@ -1,314 +0,0 @@ -from __future__ import absolute_import -from collections import Mapping, MutableMapping -try: - from threading import RLock -except ImportError: # Platform-specific: No threads available - class RLock: - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - - -try: # Python 2.7+ - from collections import OrderedDict -except ImportError: - from .packages.ordered_dict import OrderedDict -from .packages.six import iterkeys, itervalues, PY3 - - -__all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict'] - - -_Null = object() - - -class RecentlyUsedContainer(MutableMapping): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - ContainerCls = OrderedDict - - def __init__(self, maxsize=10, dispose_func=None): - self._maxsize = maxsize - self.dispose_func = dispose_func - - self._container = self.ContainerCls() - self.lock = RLock() - - def __getitem__(self, key): - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key, value): - evicted_value = _Null - with self.lock: - # Possibly evict the existing value of 'key' - evicted_value = self._container.get(key, _Null) - self._container[key] = value - - # If we didn't evict an existing value, we might have to evict the - # least recently used item from the beginning of the container. - if len(self._container) > self._maxsize: - _key, evicted_value = self._container.popitem(last=False) - - if self.dispose_func and evicted_value is not _Null: - self.dispose_func(evicted_value) - - def __delitem__(self, key): - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self): - with self.lock: - return len(self._container) - - def __iter__(self): - raise NotImplementedError('Iteration over this class is unlikely to be threadsafe.') - - def clear(self): - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(itervalues(self._container)) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self): - with self.lock: - return list(iterkeys(self._container)) - - -class HTTPHeaderDict(MutableMapping): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - def __init__(self, headers=None, **kwargs): - super(HTTPHeaderDict, self).__init__() - self._container = OrderedDict() - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key, val): - self._container[key.lower()] = [key, val] - return self._container[key.lower()] - - def __getitem__(self, key): - val = self._container[key.lower()] - return ', '.join(val[1:]) - - def __delitem__(self, key): - del self._container[key.lower()] - - def __contains__(self, key): - return key.lower() in self._container - - def __eq__(self, other): - if not isinstance(other, Mapping) and not hasattr(other, 'keys'): - return False - if not isinstance(other, type(self)): - other = type(self)(other) - return (dict((k.lower(), v) for k, v in self.itermerged()) == - dict((k.lower(), v) for k, v in other.itermerged())) - - def __ne__(self, other): - return not self.__eq__(other) - - if not PY3: # Python 2 - iterkeys = MutableMapping.iterkeys - itervalues = MutableMapping.itervalues - - __marker = object() - - def __len__(self): - return len(self._container) - - def __iter__(self): - # Only provide the originally cased names - for vals in self._container.values(): - yield vals[0] - - def pop(self, key, default=__marker): - '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - ''' - # Using the MutableMapping function directly fails due to the private marker. - # Using ordinary dict.pop would expose the internal structures. - # So let's reinvent the wheel. - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def discard(self, key): - try: - del self[key] - except KeyError: - pass - - def add(self, key, val): - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - """ - key_lower = key.lower() - new_vals = [key, val] - # Keep the common case aka no item present as fast as possible - vals = self._container.setdefault(key_lower, new_vals) - if new_vals is not vals: - vals.append(val) - - def extend(self, *args, **kwargs): - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError("extend() takes at most 1 positional " - "arguments ({0} given)".format(len(args))) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, Mapping): - for key in other: - self.add(key, other[key]) - elif hasattr(other, "keys"): - for key in other.keys(): - self.add(key, other[key]) - else: - for key, value in other: - self.add(key, value) - - for key, value in kwargs.items(): - self.add(key, value) - - def getlist(self, key): - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - try: - vals = self._container[key.lower()] - except KeyError: - return [] - else: - return vals[1:] - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - def __repr__(self): - return "%s(%s)" % (type(self).__name__, dict(self.itermerged())) - - def _copy_from(self, other): - for key in other: - val = other.getlist(key) - if isinstance(val, list): - # Don't need to convert tuples - val = list(val) - self._container[key.lower()] = [key] + val - - def copy(self): - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self): - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = self._container[key.lower()] - for val in vals[1:]: - yield vals[0], val - - def itermerged(self): - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = self._container[key.lower()] - yield val[0], ', '.join(val[1:]) - - def items(self): - return list(self.iteritems()) - - @classmethod - def from_httplib(cls, message): # Python 2 - """Read headers from a Python 2 httplib message object.""" - # python2.7 does not expose a proper API for exporting multiheaders - # efficiently. This function re-reads raw lines from the message - # object and extracts the multiheaders properly. - headers = [] - - for line in message.headers: - if line.startswith((' ', '\t')): - key, value = headers[-1] - headers[-1] = (key, value + '\r\n' + line.rstrip()) - continue - - key, value = line.split(':', 1) - headers.append((key, value.strip())) - - return cls(headers) diff --git a/pype/vendor/requests/packages/urllib3/connection.py b/pype/vendor/requests/packages/urllib3/connection.py deleted file mode 100644 index c0d8329985..0000000000 --- a/pype/vendor/requests/packages/urllib3/connection.py +++ /dev/null @@ -1,373 +0,0 @@ -from __future__ import absolute_import -import datetime -import logging -import os -import sys -import socket -from socket import error as SocketError, timeout as SocketTimeout -import warnings -from .packages import six -from .packages.six.moves.http_client import HTTPConnection as _HTTPConnection -from .packages.six.moves.http_client import HTTPException # noqa: F401 - -try: # Compiled with SSL? - import ssl - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): # Platform-specific: No SSL. - ssl = None - - class BaseSSLError(BaseException): - pass - - -try: # Python 3: - # Not a no-op, we're adding this to the namespace so it can be imported. - ConnectionError = ConnectionError -except NameError: # Python 2: - class ConnectionError(Exception): - pass - - -from .exceptions import ( - NewConnectionError, - ConnectTimeoutError, - SubjectAltNameWarning, - SystemTimeWarning, -) -from .packages.ssl_match_hostname import match_hostname, CertificateError - -from .util.ssl_ import ( - resolve_cert_reqs, - resolve_ssl_version, - assert_fingerprint, - create_urllib3_context, - ssl_wrap_socket -) - - -from .util import connection - -from ._collections import HTTPHeaderDict - -log = logging.getLogger(__name__) - -port_by_scheme = { - 'http': 80, - 'https': 443, -} - -# When updating RECENT_DATE, move it to -# within two years of the current date, and no -# earlier than 6 months ago. -RECENT_DATE = datetime.date(2016, 1, 1) - - -class DummyConnection(object): - """Used to detect a failed ConnectionCls import.""" - pass - - -class HTTPConnection(_HTTPConnection, object): - """ - Based on httplib.HTTPConnection but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool` - - ``source_address``: Set the source address for the current connection. - - .. note:: This is ignored for Python 2.6. It is only applied for 2.7 and 3.x - - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass:: - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port = port_by_scheme['http'] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] - - #: Whether this connection verifies the host's certificate. - is_verified = False - - def __init__(self, *args, **kw): - if six.PY3: # Python 3 - kw.pop('strict', None) - - # Pre-set source_address in case we have an older Python like 2.6. - self.source_address = kw.get('source_address') - - if sys.version_info < (2, 7): # Python 2.6 - # _HTTPConnection on Python 2.6 will balk at this keyword arg, but - # not newer versions. We can still use it when creating a - # connection though, so we pop it *after* we have saved it as - # self.source_address. - kw.pop('source_address', None) - - #: The socket options provided by the user. If no options are - #: provided, we use the default options. - self.socket_options = kw.pop('socket_options', self.default_socket_options) - - # Superclass also sets self.source_address in Python 2.7+. - _HTTPConnection.__init__(self, *args, **kw) - - def _new_conn(self): - """ Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = connection.create_connection( - (self.host, self.port), self.timeout, **extra_kw) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - except SocketError as e: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e) - - return conn - - def _prepare_conn(self, conn): - self.sock = conn - # the _tunnel_host attribute was added in python 2.6.3 (via - # http://hg.python.org/cpython/rev/0f57b30a152f) so pythons 2.6(0-2) do - # not have them. - if getattr(self, '_tunnel_host', None): - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - def request_chunked(self, method, url, body=None, headers=None): - """ - Alternative to the common request method, which sends the - body with chunked encoding and not as one block - """ - headers = HTTPHeaderDict(headers if headers is not None else {}) - skip_accept_encoding = 'accept-encoding' in headers - skip_host = 'host' in headers - self.putrequest( - method, - url, - skip_accept_encoding=skip_accept_encoding, - skip_host=skip_host - ) - for header, value in headers.items(): - self.putheader(header, value) - if 'transfer-encoding' not in headers: - self.putheader('Transfer-Encoding', 'chunked') - self.endheaders() - - if body is not None: - stringish_types = six.string_types + (six.binary_type,) - if isinstance(body, stringish_types): - body = (body,) - for chunk in body: - if not chunk: - continue - if not isinstance(chunk, six.binary_type): - chunk = chunk.encode('utf8') - len_str = hex(len(chunk))[2:] - self.send(len_str.encode('utf-8')) - self.send(b'\r\n') - self.send(chunk) - self.send(b'\r\n') - - # After the if clause, to always have a closed body - self.send(b'0\r\n\r\n') - - -class HTTPSConnection(HTTPConnection): - default_port = port_by_scheme['https'] - - ssl_version = None - - def __init__(self, host, port=None, key_file=None, cert_file=None, - strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - ssl_context=None, **kw): - - HTTPConnection.__init__(self, host, port, strict=strict, - timeout=timeout, **kw) - - self.key_file = key_file - self.cert_file = cert_file - self.ssl_context = ssl_context - - # Required property for Google AppEngine 1.9.0 which otherwise causes - # HTTPS requests to go out as HTTP. (See Issue #356) - self._protocol = 'https' - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - if self.ssl_context is None: - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(None), - cert_reqs=resolve_cert_reqs(None), - ) - - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - ssl_context=self.ssl_context, - ) - - -class VerifiedHTTPSConnection(HTTPSConnection): - """ - Based on httplib.HTTPSConnection but wraps the socket with - SSL certification. - """ - cert_reqs = None - ca_certs = None - ca_cert_dir = None - ssl_version = None - assert_fingerprint = None - - def set_cert(self, key_file=None, cert_file=None, - cert_reqs=None, ca_certs=None, - assert_hostname=None, assert_fingerprint=None, - ca_cert_dir=None): - """ - This method should only be called once, before the connection is used. - """ - # If cert_reqs is not provided, we can try to guess. If the user gave - # us a cert database, we assume they want to use it: otherwise, if - # they gave us an SSL Context object we should use whatever is set for - # it. - if cert_reqs is None: - if ca_certs or ca_cert_dir: - cert_reqs = 'CERT_REQUIRED' - elif self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - - def connect(self): - # Add certificate verification - conn = self._new_conn() - - hostname = self.host - if getattr(self, '_tunnel_host', None): - # _tunnel_host was added in Python 2.6.3 - # (See: http://hg.python.org/cpython/rev/0f57b30a152f) - - self.sock = conn - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn(( - 'System time is way off (before {0}). This will probably ' - 'lead to SSL verification errors').format(RECENT_DATE), - SystemTimeWarning - ) - - # Wrap socket using verification with the root certs in - # trusted_root_certs - if self.ssl_context is None: - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(self.ssl_version), - cert_reqs=resolve_cert_reqs(self.cert_reqs), - ) - - context = self.ssl_context - context.verify_mode = resolve_cert_reqs(self.cert_reqs) - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - server_hostname=hostname, - ssl_context=context) - - if self.assert_fingerprint: - assert_fingerprint(self.sock.getpeercert(binary_form=True), - self.assert_fingerprint) - elif context.verify_mode != ssl.CERT_NONE \ - and not getattr(context, 'check_hostname', False) \ - and self.assert_hostname is not False: - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = self.sock.getpeercert() - if not cert.get('subjectAltName', ()): - warnings.warn(( - 'Certificate for {0} has no `subjectAltName`, falling back to check for a ' - '`commonName` for now. This feature is being removed by major browsers and ' - 'deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 ' - 'for details.)'.format(hostname)), - SubjectAltNameWarning - ) - _match_hostname(cert, self.assert_hostname or hostname) - - self.is_verified = ( - context.verify_mode == ssl.CERT_REQUIRED or - self.assert_fingerprint is not None - ) - - -def _match_hostname(cert, asserted_hostname): - try: - match_hostname(cert, asserted_hostname) - except CertificateError as e: - log.error( - 'Certificate did not match expected hostname: %s. ' - 'Certificate: %s', asserted_hostname, cert - ) - # Add cert to exception and reraise so client code can inspect - # the cert when catching the exception, if they want to - e._peer_cert = cert - raise - - -if ssl: - # Make a copy for testing. - UnverifiedHTTPSConnection = HTTPSConnection - HTTPSConnection = VerifiedHTTPSConnection -else: - HTTPSConnection = DummyConnection diff --git a/pype/vendor/requests/packages/urllib3/connectionpool.py b/pype/vendor/requests/packages/urllib3/connectionpool.py deleted file mode 100644 index b4f1166a69..0000000000 --- a/pype/vendor/requests/packages/urllib3/connectionpool.py +++ /dev/null @@ -1,899 +0,0 @@ -from __future__ import absolute_import -import errno -import logging -import sys -import warnings - -from socket import error as SocketError, timeout as SocketTimeout -import socket - - -from .exceptions import ( - ClosedPoolError, - ProtocolError, - EmptyPoolError, - HeaderParsingError, - HostChangedError, - LocationValueError, - MaxRetryError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, - InsecureRequestWarning, - NewConnectionError, -) -from .packages.ssl_match_hostname import CertificateError -from .packages import six -from .packages.six.moves import queue -from .connection import ( - port_by_scheme, - DummyConnection, - HTTPConnection, HTTPSConnection, VerifiedHTTPSConnection, - HTTPException, BaseSSLError, -) -from .request import RequestMethods -from .response import HTTPResponse - -from .util.connection import is_connection_dropped -from .util.request import set_file_position -from .util.response import assert_header_parsing -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import get_host, Url - - -if six.PY2: - # Queue is imported for side effects on MS Windows - import Queue as _unused_module_Queue # noqa: F401 - -xrange = six.moves.xrange - -log = logging.getLogger(__name__) - -_Default = object() - - -# Pool objects -class ConnectionPool(object): - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - """ - - scheme = None - QueueCls = queue.LifoQueue - - def __init__(self, host, port=None): - if not host: - raise LocationValueError("No host specified.") - - self.host = _ipv6_host(host).lower() - self.port = port - - def __str__(self): - return '%s(host=%r, port=%r)' % (type(self).__name__, - self.host, self.port) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - pass - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = set([errno.EAGAIN, errno.EWOULDBLOCK]) - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`httplib.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`httplib.HTTPConnection`. - - :param strict: - Causes BadStatusLine to be raised if the status line can't be parsed - as a valid HTTP/1.0 or 1.1 status line, passed into - :class:`httplib.HTTPConnection`. - - .. note:: - Only works in Python 2. This parameter is ignored in Python 3. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to False, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.connectionpool.ProxyManager`" - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.connectionpool.ProxyManager`" - - :param \\**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = 'http' - ConnectionCls = HTTPConnection - ResponseCls = HTTPResponse - - def __init__(self, host, port=None, strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, block=False, - headers=None, retries=None, - _proxy=None, _proxy_headers=None, - **conn_kw): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - self.strict = strict - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - - # Fill the queue up so that doing get() on it will block properly - for _ in xrange(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault('socket_options', []) - - def _new_conn(self): - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.debug("Starting new HTTP connection (%d): %s", - self.num_connections, self.host) - - conn = self.ConnectionCls(host=self.host, port=self.port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - return conn - - def _get_conn(self, timeout=None): - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") - - except queue.Empty: - if self.block: - raise EmptyPoolError(self, - "Pool reached maximum size and no more " - "connections are allowed.") - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.debug("Resetting dropped connection: %s", self.host) - conn.close() - if getattr(conn, 'auto_open', 1) == 0: - # This is a proxied connection that has been mutated by - # httplib._tunnel() and cannot be reused (since it would - # attempt to bypass the proxy) - conn = None - - return conn or self._new_conn() - - def _put_conn(self, conn): - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except queue.Full: - # This should never happen if self.block == True - log.warning( - "Connection pool is full, discarding connection: %s", - self.host) - - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - pass - - def _prepare_proxy(self, conn): - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout): - """ Helper that always returns a :class:`urllib3.util.Timeout` """ - if timeout is _Default: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout(self, err, url, timeout_value): - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # See the above comment about EAGAIN in Python 3. In Python 2 we have - # to specifically catch it and throw the timeout error - if hasattr(err, 'errno') and err.errno in _blocking_errnos: - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # Catch possible read timeouts thrown as SSL errors. If not the - # case, rethrow the original. We need to do this because of: - # http://bugs.python.org/issue10272 - if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6 - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - def _make_request(self, conn, method, url, timeout=_Default, chunked=False, - **httplib_request_kw): - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param timeout: - Socket timeout in seconds for the request. This can be a - float or integer, which will set the same timeout value for - the socket connect and the socket read, or an instance of - :class:`urllib3.util.Timeout`, which gives you more fine-grained - control over your timeouts. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = timeout_obj.connect_timeout - - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # conn.request() calls httplib.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - if chunked: - conn.request_chunked(method, url, **httplib_request_kw) - else: - conn.request(method, url, **httplib_request_kw) - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - # App Engine doesn't have a sock attr - if getattr(conn, 'sock', None): - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % read_timeout) - if read_timeout is Timeout.DEFAULT_TIMEOUT: - conn.sock.settimeout(socket.getdefaulttimeout()) - else: # None or a value - conn.sock.settimeout(read_timeout) - - # Receive the response from the server - try: - try: # Python 2.7, use buffering of HTTP responses - httplib_response = conn.getresponse(buffering=True) - except TypeError: # Python 2.6 and older, Python 3 - try: - httplib_response = conn.getresponse() - except Exception as e: - # Remove the TypeError from the exception chain in Python 3; - # otherwise it looks like a programming error was the cause. - six.raise_from(e, None) - except (SocketTimeout, BaseSSLError, SocketError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # AppEngine doesn't have a version attr. - http_version = getattr(conn, '_http_vsn_str', 'HTTP/?') - log.debug("%s://%s:%s \"%s %s %s\" %s %s", self.scheme, self.host, self.port, - method, url, http_version, httplib_response.status, - httplib_response.length) - - try: - assert_header_parsing(httplib_response.msg) - except HeaderParsingError as hpe: # Platform-specific: Python 3 - log.warning( - 'Failed to parse headers (url=%s): %s', - self._absolute_url(url), hpe, exc_info=True) - - return httplib_response - - def _absolute_url(self, path): - return Url(scheme=self.scheme, host=self.host, port=self.port, path=path).url - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - # Disable access to the pool - old_pool, self.pool = self.pool, None - - try: - while True: - conn = old_pool.get(block=False) - if conn: - conn.close() - - except queue.Empty: - pass # Done. - - def is_same_host(self, url): - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith('/'): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, host, port = get_host(url) - - host = _ipv6_host(host).lower() - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen(self, method, url, body=None, headers=None, retries=None, - redirect=True, assert_same_host=True, timeout=_Default, - pool_timeout=None, release_conn=None, chunked=False, - body_pos=None, **response_kw): - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method provided - by :class:`.RequestMethods`, such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param body: - Data to send in the request body (useful for creating - POST requests, see HTTPConnectionPool.post_url for - more convenience). - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When False, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of - ``response_kw.get('preload_content', True)``. - - :param chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param int body_pos: - Position to seek to in file-like body in the event of a retry or - redirect. Typically this won't need to be set because urllib3 will - auto-populate the value when needed. - - :param \\**response_kw: - Additional parameters are passed to - :meth:`urllib3.response.HTTPResponse.from_httplib` - """ - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = response_kw.get('preload_content', True) - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - conn = None - - # Track whether `conn` needs to be released before - # returning/raising/recursing. Update this variable if necessary, and - # leave `release_conn` constant throughout the function. That way, if - # the function recurses, the original value of `release_conn` will be - # passed down into the recursive call, and its value will be respected. - # - # See issue #651 [1] for details. - # - # [1] - release_this_conn = release_conn - - # Merge the proxy headers. Only do this in HTTP. We have to copy the - # headers dict so we can safely change it without those changes being - # reflected in anyone else's copy. - if self.scheme == 'http': - headers = headers.copy() - headers.update(self.proxy_headers) - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - # Keep track of whether we cleanly exited the except block. This - # ensures we do proper cleanup in finally. - clean_exit = False - - # Rewind body position, if needed. Record current position - # for future rewinds in the event of a redirect/retry. - body_pos = set_file_position(body, body_pos) - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout - - is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None) - if is_new_proxy_conn: - self._prepare_proxy(conn) - - # Make the request on the httplib connection object. - httplib_response = self._make_request(conn, method, url, - timeout=timeout_obj, - body=body, headers=headers, - chunked=chunked) - - # If we're going to release the connection in ``finally:``, then - # the response doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = conn if not release_conn else None - - # Pass method to Response for length checking - response_kw['request_method'] = method - - # Import httplib's response into our own wrapper object - response = self.ResponseCls.from_httplib(httplib_response, - pool=self, - connection=response_conn, - retries=retries, - **response_kw) - - # Everything went great! - clean_exit = True - - except queue.Empty: - # Timed out by queue. - raise EmptyPoolError(self, "No pool connections are available.") - - except (BaseSSLError, CertificateError) as e: - # Close the connection. If a connection is reused on which there - # was a Certificate error, the next request will certainly raise - # another Certificate error. - clean_exit = False - raise SSLError(e) - - except SSLError: - # Treat SSLError separately from BaseSSLError to preserve - # traceback. - clean_exit = False - raise - - except (TimeoutError, HTTPException, SocketError, ProtocolError) as e: - # Discard the connection for these exceptions. It will be - # be replaced during the next _get_conn() call. - clean_exit = False - - if isinstance(e, (SocketError, NewConnectionError)) and self.proxy: - e = ProxyError('Cannot connect to proxy.', e) - elif isinstance(e, (SocketError, HTTPException)): - e = ProtocolError('Connection aborted.', e) - - retries = retries.increment(method, url, error=e, _pool=self, - _stacktrace=sys.exc_info()[2]) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if not clean_exit: - # We hit some kind of exception, handled or otherwise. We need - # to throw the connection away unless explicitly told not to. - # Close the connection, set the variable to None, and make sure - # we put the None back in the pool to avoid leaking it. - conn = conn and conn.close() - release_this_conn = True - - if release_this_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning("Retrying (%r) after connection " - "broken by '%r': %s", retries, err, url) - return self.urlopen(method, url, body, headers, retries, - redirect, assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, body_pos=body_pos, - **response_kw) - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - # Release the connection for this response, since we're not - # returning it to be released manually. - response.release_conn() - raise - return response - - retries.sleep_for_retry(response) - log.debug("Redirecting %s -> %s", url, redirect_location) - return self.urlopen( - method, redirect_location, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, body_pos=body_pos, - **response_kw) - - # Check if we should retry the HTTP response. - has_retry_after = bool(response.getheader('Retry-After')) - if retries.is_retry(method, response.status, has_retry_after): - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_status: - # Release the connection for this response, since we're not - # returning it to be released manually. - response.release_conn() - raise - return response - retries.sleep(response) - log.debug("Retry: %s", url) - return self.urlopen( - method, url, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, - body_pos=body_pos, **response_kw) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - When Python is compiled with the :mod:`ssl` module, then - :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates, - instead of :class:`.HTTPSConnection`. - - :class:`.VerifiedHTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, - ``ca_cert_dir``, and ``ssl_version`` are only used if :mod:`ssl` is - available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade - the connection socket into an SSL socket. - """ - - scheme = 'https' - ConnectionCls = HTTPSConnection - - def __init__(self, host, port=None, - strict=False, timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, - block=False, headers=None, retries=None, - _proxy=None, _proxy_headers=None, - key_file=None, cert_file=None, cert_reqs=None, - ca_certs=None, ssl_version=None, - assert_hostname=None, assert_fingerprint=None, - ca_cert_dir=None, **conn_kw): - - HTTPConnectionPool.__init__(self, host, port, strict, timeout, maxsize, - block, headers, retries, _proxy, _proxy_headers, - **conn_kw) - - if ca_certs and cert_reqs is None: - cert_reqs = 'CERT_REQUIRED' - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.ca_certs = ca_certs - self.ca_cert_dir = ca_cert_dir - self.ssl_version = ssl_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_conn(self, conn): - """ - Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket` - and establish the tunnel if proxy is used. - """ - - if isinstance(conn, VerifiedHTTPSConnection): - conn.set_cert(key_file=self.key_file, - cert_file=self.cert_file, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint) - conn.ssl_version = self.ssl_version - return conn - - def _prepare_proxy(self, conn): - """ - Establish tunnel connection early, because otherwise httplib - would improperly set Host: header to proxy's IP:port. - """ - # Python 2.7+ - try: - set_tunnel = conn.set_tunnel - except AttributeError: # Platform-specific: Python 2.6 - set_tunnel = conn._set_tunnel - - if sys.version_info <= (2, 6, 4) and not self.proxy_headers: # Python 2.6.4 and older - set_tunnel(self.host, self.port) - else: - set_tunnel(self.host, self.port, self.proxy_headers) - - conn.connect() - - def _new_conn(self): - """ - Return a fresh :class:`httplib.HTTPSConnection`. - """ - self.num_connections += 1 - log.debug("Starting new HTTPS connection (%d): %s", - self.num_connections, self.host) - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: - raise SSLError("Can't connect to HTTPS URL because the SSL " - "module is not available.") - - actual_host = self.host - actual_port = self.port - if self.proxy is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - conn = self.ConnectionCls(host=actual_host, port=actual_port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - - return self._prepare_conn(conn) - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - super(HTTPSConnectionPool, self)._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if not getattr(conn, 'sock', None): # AppEngine might not have `.sock` - conn.connect() - - if not conn.is_verified: - warnings.warn(( - 'Unverified HTTPS request is being made. ' - 'Adding certificate verification is strongly advised. See: ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings'), - InsecureRequestWarning) - - -def connection_from_url(url, **kw): - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \\**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, host, port = get_host(url) - port = port or port_by_scheme.get(scheme, 80) - if scheme == 'https': - return HTTPSConnectionPool(host, port=port, **kw) - else: - return HTTPConnectionPool(host, port=port, **kw) - - -def _ipv6_host(host): - """ - Process IPv6 address literals - """ - - # httplib doesn't like it when we include brackets in IPv6 addresses - # Specifically, if we include brackets but also pass the port then - # httplib crazily doubles up the square brackets on the Host header. - # Instead, we need to make sure we never pass ``None`` as the port. - # However, for backward compatibility reasons we can't actually - # *assert* that. See http://bugs.python.org/issue28539 - # - # Also if an IPv6 address literal has a zone identifier, the - # percent sign might be URIencoded, convert it back into ASCII - if host.startswith('[') and host.endswith(']'): - host = host.replace('%25', '%').strip('[]') - return host diff --git a/pype/vendor/requests/packages/urllib3/contrib/__init__.py b/pype/vendor/requests/packages/urllib3/contrib/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/pype/vendor/requests/packages/urllib3/contrib/_securetransport/__init__.py b/pype/vendor/requests/packages/urllib3/contrib/_securetransport/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/pype/vendor/requests/packages/urllib3/contrib/_securetransport/bindings.py b/pype/vendor/requests/packages/urllib3/contrib/_securetransport/bindings.py deleted file mode 100644 index e26b840861..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/_securetransport/bindings.py +++ /dev/null @@ -1,590 +0,0 @@ -""" -This module uses ctypes to bind a whole bunch of functions and constants from -SecureTransport. The goal here is to provide the low-level API to -SecureTransport. These are essentially the C-level functions and constants, and -they're pretty gross to work with. - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - - Copyright (c) 2015-2016 Will Bond - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -""" -from __future__ import absolute_import - -import platform -from ctypes.util import find_library -from ctypes import ( - c_void_p, c_int32, c_char_p, c_size_t, c_byte, c_uint32, c_ulong, c_long, - c_bool -) -from ctypes import CDLL, POINTER, CFUNCTYPE - - -security_path = find_library('Security') -if not security_path: - raise ImportError('The library Security could not be found') - - -core_foundation_path = find_library('CoreFoundation') -if not core_foundation_path: - raise ImportError('The library CoreFoundation could not be found') - - -version = platform.mac_ver()[0] -version_info = tuple(map(int, version.split('.'))) -if version_info < (10, 8): - raise OSError( - 'Only OS X 10.8 and newer are supported, not %s.%s' % ( - version_info[0], version_info[1] - ) - ) - -Security = CDLL(security_path, use_errno=True) -CoreFoundation = CDLL(core_foundation_path, use_errno=True) - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFDictionary = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong - -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFDictionaryRef = POINTER(CFDictionary) -CFArrayCallBacks = c_void_p -CFDictionaryKeyCallBacks = c_void_p -CFDictionaryValueCallBacks = c_void_p - -SecCertificateRef = POINTER(c_void_p) -SecExternalFormat = c_uint32 -SecExternalItemType = c_uint32 -SecIdentityRef = POINTER(c_void_p) -SecItemImportExportFlags = c_uint32 -SecItemImportExportKeyParameters = c_void_p -SecKeychainRef = POINTER(c_void_p) -SSLProtocol = c_uint32 -SSLCipherSuite = c_uint32 -SSLContextRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SSLConnectionRef = c_uint32 -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 -SSLProtocolSide = c_uint32 -SSLConnectionType = c_uint32 -SSLSessionOption = c_uint32 - - -try: - Security.SecItemImport.argtypes = [ - CFDataRef, - CFStringRef, - POINTER(SecExternalFormat), - POINTER(SecExternalItemType), - SecItemImportExportFlags, - POINTER(SecItemImportExportKeyParameters), - SecKeychainRef, - POINTER(CFArrayRef), - ] - Security.SecItemImport.restype = OSStatus - - Security.SecCertificateGetTypeID.argtypes = [] - Security.SecCertificateGetTypeID.restype = CFTypeID - - Security.SecIdentityGetTypeID.argtypes = [] - Security.SecIdentityGetTypeID.restype = CFTypeID - - Security.SecKeyGetTypeID.argtypes = [] - Security.SecKeyGetTypeID.restype = CFTypeID - - Security.SecCertificateCreateWithData.argtypes = [ - CFAllocatorRef, - CFDataRef - ] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [ - SecCertificateRef - ] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [ - OSStatus, - c_void_p - ] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecIdentityCreateWithCertificate.argtypes = [ - CFTypeRef, - SecCertificateRef, - POINTER(SecIdentityRef) - ] - Security.SecIdentityCreateWithCertificate.restype = OSStatus - - Security.SecKeychainCreate.argtypes = [ - c_char_p, - c_uint32, - c_void_p, - Boolean, - c_void_p, - POINTER(SecKeychainRef) - ] - Security.SecKeychainCreate.restype = OSStatus - - Security.SecKeychainDelete.argtypes = [ - SecKeychainRef - ] - Security.SecKeychainDelete.restype = OSStatus - - Security.SecPKCS12Import.argtypes = [ - CFDataRef, - CFDictionaryRef, - POINTER(CFArrayRef) - ] - Security.SecPKCS12Import.restype = OSStatus - - SSLReadFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, c_void_p, POINTER(c_size_t)) - SSLWriteFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, POINTER(c_byte), POINTER(c_size_t)) - - Security.SSLSetIOFuncs.argtypes = [ - SSLContextRef, - SSLReadFunc, - SSLWriteFunc - ] - Security.SSLSetIOFuncs.restype = OSStatus - - Security.SSLSetPeerID.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t - ] - Security.SSLSetPeerID.restype = OSStatus - - Security.SSLSetCertificate.argtypes = [ - SSLContextRef, - CFArrayRef - ] - Security.SSLSetCertificate.restype = OSStatus - - Security.SSLSetCertificateAuthorities.argtypes = [ - SSLContextRef, - CFTypeRef, - Boolean - ] - Security.SSLSetCertificateAuthorities.restype = OSStatus - - Security.SSLSetConnection.argtypes = [ - SSLContextRef, - SSLConnectionRef - ] - Security.SSLSetConnection.restype = OSStatus - - Security.SSLSetPeerDomainName.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t - ] - Security.SSLSetPeerDomainName.restype = OSStatus - - Security.SSLHandshake.argtypes = [ - SSLContextRef - ] - Security.SSLHandshake.restype = OSStatus - - Security.SSLRead.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t, - POINTER(c_size_t) - ] - Security.SSLRead.restype = OSStatus - - Security.SSLWrite.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t, - POINTER(c_size_t) - ] - Security.SSLWrite.restype = OSStatus - - Security.SSLClose.argtypes = [ - SSLContextRef - ] - Security.SSLClose.restype = OSStatus - - Security.SSLGetNumberSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(c_size_t) - ] - Security.SSLGetNumberSupportedCiphers.restype = OSStatus - - Security.SSLGetSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t) - ] - Security.SSLGetSupportedCiphers.restype = OSStatus - - Security.SSLSetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - c_size_t - ] - Security.SSLSetEnabledCiphers.restype = OSStatus - - Security.SSLGetNumberEnabledCiphers.argtype = [ - SSLContextRef, - POINTER(c_size_t) - ] - Security.SSLGetNumberEnabledCiphers.restype = OSStatus - - Security.SSLGetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t) - ] - Security.SSLGetEnabledCiphers.restype = OSStatus - - Security.SSLGetNegotiatedCipher.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite) - ] - Security.SSLGetNegotiatedCipher.restype = OSStatus - - Security.SSLGetNegotiatedProtocolVersion.argtypes = [ - SSLContextRef, - POINTER(SSLProtocol) - ] - Security.SSLGetNegotiatedProtocolVersion.restype = OSStatus - - Security.SSLCopyPeerTrust.argtypes = [ - SSLContextRef, - POINTER(SecTrustRef) - ] - Security.SSLCopyPeerTrust.restype = OSStatus - - Security.SecTrustSetAnchorCertificates.argtypes = [ - SecTrustRef, - CFArrayRef - ] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argstypes = [ - SecTrustRef, - Boolean - ] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType) - ] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustGetCertificateCount.argtypes = [ - SecTrustRef - ] - Security.SecTrustGetCertificateCount.restype = CFIndex - - Security.SecTrustGetCertificateAtIndex.argtypes = [ - SecTrustRef, - CFIndex - ] - Security.SecTrustGetCertificateAtIndex.restype = SecCertificateRef - - Security.SSLCreateContext.argtypes = [ - CFAllocatorRef, - SSLProtocolSide, - SSLConnectionType - ] - Security.SSLCreateContext.restype = SSLContextRef - - Security.SSLSetSessionOption.argtypes = [ - SSLContextRef, - SSLSessionOption, - Boolean - ] - Security.SSLSetSessionOption.restype = OSStatus - - Security.SSLSetProtocolVersionMin.argtypes = [ - SSLContextRef, - SSLProtocol - ] - Security.SSLSetProtocolVersionMin.restype = OSStatus - - Security.SSLSetProtocolVersionMax.argtypes = [ - SSLContextRef, - SSLProtocol - ] - Security.SSLSetProtocolVersionMax.restype = OSStatus - - Security.SecCopyErrorMessageString.argtypes = [ - OSStatus, - c_void_p - ] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SSLReadFunc = SSLReadFunc - Security.SSLWriteFunc = SSLWriteFunc - Security.SSLContextRef = SSLContextRef - Security.SSLProtocol = SSLProtocol - Security.SSLCipherSuite = SSLCipherSuite - Security.SecIdentityRef = SecIdentityRef - Security.SecKeychainRef = SecKeychainRef - Security.SecTrustRef = SecTrustRef - Security.SecTrustResultType = SecTrustResultType - Security.SecExternalFormat = SecExternalFormat - Security.OSStatus = OSStatus - - Security.kSecImportExportPassphrase = CFStringRef.in_dll( - Security, 'kSecImportExportPassphrase' - ) - Security.kSecImportItemIdentity = CFStringRef.in_dll( - Security, 'kSecImportItemIdentity' - ) - - # CoreFoundation time! - CoreFoundation.CFRetain.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFRetain.restype = CFTypeRef - - CoreFoundation.CFRelease.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [ - CFStringRef, - CFStringEncoding - ] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [ - CFAllocatorRef, - c_char_p, - CFIndex - ] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [ - CFDataRef - ] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [ - CFDataRef - ] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFDictionaryCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - POINTER(CFTypeRef), - CFIndex, - CFDictionaryKeyCallBacks, - CFDictionaryValueCallBacks - ] - CoreFoundation.CFDictionaryCreate.restype = CFDictionaryRef - - CoreFoundation.CFDictionaryGetValue.argtypes = [ - CFDictionaryRef, - CFTypeRef - ] - CoreFoundation.CFDictionaryGetValue.restype = CFTypeRef - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [ - CFMutableArrayRef, - c_void_p - ] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [ - CFArrayRef - ] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [ - CFArrayRef, - CFIndex - ] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( - CoreFoundation, 'kCFAllocatorDefault' - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll(CoreFoundation, 'kCFTypeArrayCallBacks') - CoreFoundation.kCFTypeDictionaryKeyCallBacks = c_void_p.in_dll( - CoreFoundation, 'kCFTypeDictionaryKeyCallBacks' - ) - CoreFoundation.kCFTypeDictionaryValueCallBacks = c_void_p.in_dll( - CoreFoundation, 'kCFTypeDictionaryValueCallBacks' - ) - - CoreFoundation.CFTypeRef = CFTypeRef - CoreFoundation.CFArrayRef = CFArrayRef - CoreFoundation.CFStringRef = CFStringRef - CoreFoundation.CFDictionaryRef = CFDictionaryRef - -except (AttributeError): - raise ImportError('Error initializing ctypes') - - -class CFConst(object): - """ - A class object that acts as essentially a namespace for CoreFoundation - constants. - """ - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - -class SecurityConst(object): - """ - A class object that acts as essentially a namespace for Security constants. - """ - kSSLSessionOptionBreakOnServerAuth = 0 - - kSSLProtocol2 = 1 - kSSLProtocol3 = 2 - kTLSProtocol1 = 4 - kTLSProtocol11 = 7 - kTLSProtocol12 = 8 - - kSSLClientSide = 1 - kSSLStreamType = 0 - - kSecFormatPEMSequence = 10 - - kSecTrustResultInvalid = 0 - kSecTrustResultProceed = 1 - # This gap is present on purpose: this was kSecTrustResultConfirm, which - # is deprecated. - kSecTrustResultDeny = 3 - kSecTrustResultUnspecified = 4 - kSecTrustResultRecoverableTrustFailure = 5 - kSecTrustResultFatalTrustFailure = 6 - kSecTrustResultOtherError = 7 - - errSSLProtocol = -9800 - errSSLWouldBlock = -9803 - errSSLClosedGraceful = -9805 - errSSLClosedNoNotify = -9816 - errSSLClosedAbort = -9806 - - errSSLXCertChainInvalid = -9807 - errSSLCrypto = -9809 - errSSLInternal = -9810 - errSSLCertExpired = -9814 - errSSLCertNotYetValid = -9815 - errSSLUnknownRootCert = -9812 - errSSLNoRootCert = -9813 - errSSLHostNameMismatch = -9843 - errSSLPeerHandshakeFail = -9824 - errSSLPeerUserCancelled = -9839 - errSSLWeakPeerEphemeralDHKey = -9850 - errSSLServerAuthCompleted = -9841 - errSSLRecordOverflow = -9847 - - errSecVerifyFailed = -67808 - errSecNoTrustSettings = -25263 - errSecItemNotFound = -25300 - errSecInvalidTrustSettings = -25262 - - # Cipher suites. We only pick the ones our default cipher string allows. - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F - TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3 - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F - TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2 - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 - TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B - TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x006A - TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 - TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 - TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x0040 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 - TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032 - TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D - TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C - TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D - TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C - TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F diff --git a/pype/vendor/requests/packages/urllib3/contrib/_securetransport/low_level.py b/pype/vendor/requests/packages/urllib3/contrib/_securetransport/low_level.py deleted file mode 100644 index 5e3494bce6..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/_securetransport/low_level.py +++ /dev/null @@ -1,343 +0,0 @@ -""" -Low-level helpers for the SecureTransport bindings. - -These are Python functions that are not directly related to the high-level APIs -but are necessary to get them to work. They include a whole bunch of low-level -CoreFoundation messing about and memory management. The concerns in this module -are almost entirely about trying to avoid memory leaks and providing -appropriate and useful assistance to the higher-level code. -""" -import base64 -import ctypes -import itertools -import re -import os -import ssl -import tempfile - -from .bindings import Security, CoreFoundation, CFConst - - -# This regular expression is used to grab PEM data out of a PEM bundle. -_PEM_CERTS_RE = re.compile( - b"-----BEGIN CERTIFICATE-----\n(.*?)\n-----END CERTIFICATE-----", re.DOTALL -) - - -def _cf_data_from_bytes(bytestring): - """ - Given a bytestring, create a CFData object from it. This CFData object must - be CFReleased by the caller. - """ - return CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, bytestring, len(bytestring) - ) - - -def _cf_dictionary_from_tuples(tuples): - """ - Given a list of Python tuples, create an associated CFDictionary. - """ - dictionary_size = len(tuples) - - # We need to get the dictionary keys and values out in the same order. - keys = (t[0] for t in tuples) - values = (t[1] for t in tuples) - cf_keys = (CoreFoundation.CFTypeRef * dictionary_size)(*keys) - cf_values = (CoreFoundation.CFTypeRef * dictionary_size)(*values) - - return CoreFoundation.CFDictionaryCreate( - CoreFoundation.kCFAllocatorDefault, - cf_keys, - cf_values, - dictionary_size, - CoreFoundation.kCFTypeDictionaryKeyCallBacks, - CoreFoundation.kCFTypeDictionaryValueCallBacks, - ) - - -def _cf_string_to_unicode(value): - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - - Yes, it annoys me quite a lot that this function is this complex. - """ - value_as_void_p = ctypes.cast(value, ctypes.POINTER(ctypes.c_void_p)) - - string = CoreFoundation.CFStringGetCStringPtr( - value_as_void_p, - CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - value_as_void_p, - buffer, - 1024, - CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError('Error copying C string from CFStringRef') - string = buffer.value - if string is not None: - string = string.decode('utf-8') - return string - - -def _assert_no_error(error, exception_class=None): - """ - Checks the return code and throws an exception if there is an error to - report - """ - if error == 0: - return - - cf_error_string = Security.SecCopyErrorMessageString(error, None) - output = _cf_string_to_unicode(cf_error_string) - CoreFoundation.CFRelease(cf_error_string) - - if output is None or output == u'': - output = u'OSStatus %s' % error - - if exception_class is None: - exception_class = ssl.SSLError - - raise exception_class(output) - - -def _cert_array_from_pem(pem_bundle): - """ - Given a bundle of certs in PEM format, turns them into a CFArray of certs - that can be used to validate a cert chain. - """ - der_certs = [ - base64.b64decode(match.group(1)) - for match in _PEM_CERTS_RE.finditer(pem_bundle) - ] - if not der_certs: - raise ssl.SSLError("No root certificates specified") - - cert_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks) - ) - if not cert_array: - raise ssl.SSLError("Unable to allocate memory!") - - try: - for der_bytes in der_certs: - certdata = _cf_data_from_bytes(der_bytes) - if not certdata: - raise ssl.SSLError("Unable to allocate memory!") - cert = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, certdata - ) - CoreFoundation.CFRelease(certdata) - if not cert: - raise ssl.SSLError("Unable to build cert object!") - - CoreFoundation.CFArrayAppendValue(cert_array, cert) - CoreFoundation.CFRelease(cert) - except Exception: - # We need to free the array before the exception bubbles further. - # We only want to do that if an error occurs: otherwise, the caller - # should free. - CoreFoundation.CFRelease(cert_array) - - return cert_array - - -def _is_cert(item): - """ - Returns True if a given CFTypeRef is a certificate. - """ - expected = Security.SecCertificateGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _is_identity(item): - """ - Returns True if a given CFTypeRef is an identity. - """ - expected = Security.SecIdentityGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _temporary_keychain(): - """ - This function creates a temporary Mac keychain that we can use to work with - credentials. This keychain uses a one-time password and a temporary file to - store the data. We expect to have one keychain per socket. The returned - SecKeychainRef must be freed by the caller, including calling - SecKeychainDelete. - - Returns a tuple of the SecKeychainRef and the path to the temporary - directory that contains it. - """ - # Unfortunately, SecKeychainCreate requires a path to a keychain. This - # means we cannot use mkstemp to use a generic temporary file. Instead, - # we're going to create a temporary directory and a filename to use there. - # This filename will be 8 random bytes expanded into base64. We also need - # some random bytes to password-protect the keychain we're creating, so we - # ask for 40 random bytes. - random_bytes = os.urandom(40) - filename = base64.b64encode(random_bytes[:8]).decode('utf-8') - password = base64.b64encode(random_bytes[8:]) # Must be valid UTF-8 - tempdirectory = tempfile.mkdtemp() - - keychain_path = os.path.join(tempdirectory, filename).encode('utf-8') - - # We now want to create the keychain itself. - keychain = Security.SecKeychainRef() - status = Security.SecKeychainCreate( - keychain_path, - len(password), - password, - False, - None, - ctypes.byref(keychain) - ) - _assert_no_error(status) - - # Having created the keychain, we want to pass it off to the caller. - return keychain, tempdirectory - - -def _load_items_from_file(keychain, path): - """ - Given a single file, loads all the trust objects from it into arrays and - the keychain. - Returns a tuple of lists: the first list is a list of identities, the - second a list of certs. - """ - certificates = [] - identities = [] - result_array = None - - with open(path, 'rb') as f: - raw_filedata = f.read() - - try: - filedata = CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, - raw_filedata, - len(raw_filedata) - ) - result_array = CoreFoundation.CFArrayRef() - result = Security.SecItemImport( - filedata, # cert data - None, # Filename, leaving it out for now - None, # What the type of the file is, we don't care - None, # what's in the file, we don't care - 0, # import flags - None, # key params, can include passphrase in the future - keychain, # The keychain to insert into - ctypes.byref(result_array) # Results - ) - _assert_no_error(result) - - # A CFArray is not very useful to us as an intermediary - # representation, so we are going to extract the objects we want - # and then free the array. We don't need to keep hold of keys: the - # keychain already has them! - result_count = CoreFoundation.CFArrayGetCount(result_array) - for index in range(result_count): - item = CoreFoundation.CFArrayGetValueAtIndex( - result_array, index - ) - item = ctypes.cast(item, CoreFoundation.CFTypeRef) - - if _is_cert(item): - CoreFoundation.CFRetain(item) - certificates.append(item) - elif _is_identity(item): - CoreFoundation.CFRetain(item) - identities.append(item) - finally: - if result_array: - CoreFoundation.CFRelease(result_array) - - CoreFoundation.CFRelease(filedata) - - return (identities, certificates) - - -def _load_client_cert_chain(keychain, *paths): - """ - Load certificates and maybe keys from a number of files. Has the end goal - of returning a CFArray containing one SecIdentityRef, and then zero or more - SecCertificateRef objects, suitable for use as a client certificate trust - chain. - """ - # Ok, the strategy. - # - # This relies on knowing that macOS will not give you a SecIdentityRef - # unless you have imported a key into a keychain. This is a somewhat - # artificial limitation of macOS (for example, it doesn't necessarily - # affect iOS), but there is nothing inside Security.framework that lets you - # get a SecIdentityRef without having a key in a keychain. - # - # So the policy here is we take all the files and iterate them in order. - # Each one will use SecItemImport to have one or more objects loaded from - # it. We will also point at a keychain that macOS can use to work with the - # private key. - # - # Once we have all the objects, we'll check what we actually have. If we - # already have a SecIdentityRef in hand, fab: we'll use that. Otherwise, - # we'll take the first certificate (which we assume to be our leaf) and - # ask the keychain to give us a SecIdentityRef with that cert's associated - # key. - # - # We'll then return a CFArray containing the trust chain: one - # SecIdentityRef and then zero-or-more SecCertificateRef objects. The - # responsibility for freeing this CFArray will be with the caller. This - # CFArray must remain alive for the entire connection, so in practice it - # will be stored with a single SSLSocket, along with the reference to the - # keychain. - certificates = [] - identities = [] - - # Filter out bad paths. - paths = (path for path in paths if path) - - try: - for file_path in paths: - new_identities, new_certs = _load_items_from_file( - keychain, file_path - ) - identities.extend(new_identities) - certificates.extend(new_certs) - - # Ok, we have everything. The question is: do we have an identity? If - # not, we want to grab one from the first cert we have. - if not identities: - new_identity = Security.SecIdentityRef() - status = Security.SecIdentityCreateWithCertificate( - keychain, - certificates[0], - ctypes.byref(new_identity) - ) - _assert_no_error(status) - identities.append(new_identity) - - # We now want to release the original certificate, as we no longer - # need it. - CoreFoundation.CFRelease(certificates.pop(0)) - - # We now need to build a new CFArray that holds the trust chain. - trust_chain = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - for item in itertools.chain(identities, certificates): - # ArrayAppendValue does a CFRetain on the item. That's fine, - # because the finally block will release our other refs to them. - CoreFoundation.CFArrayAppendValue(trust_chain, item) - - return trust_chain - finally: - for obj in itertools.chain(identities, certificates): - CoreFoundation.CFRelease(obj) diff --git a/pype/vendor/requests/packages/urllib3/contrib/appengine.py b/pype/vendor/requests/packages/urllib3/contrib/appengine.py deleted file mode 100644 index 814b0222d9..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/appengine.py +++ /dev/null @@ -1,296 +0,0 @@ -""" -This module provides a pool manager that uses Google App Engine's -`URLFetch Service `_. - -Example usage:: - - from urllib3 import PoolManager - from urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox - - if is_appengine_sandbox(): - # AppEngineManager uses AppEngine's URLFetch API behind the scenes - http = AppEngineManager() - else: - # PoolManager uses a socket-level API behind the scenes - http = PoolManager() - - r = http.request('GET', 'https://google.com/') - -There are `limitations `_ to the URLFetch service and it may not be -the best choice for your application. There are three options for using -urllib3 on Google App Engine: - -1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is - cost-effective in many circumstances as long as your usage is within the - limitations. -2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets. - Sockets also have `limitations and restrictions - `_ and have a lower free quota than URLFetch. - To use sockets, be sure to specify the following in your ``app.yaml``:: - - env_variables: - GAE_USE_SOCKETS_HTTPLIB : 'true' - -3. If you are using `App Engine Flexible -`_, you can use the standard -:class:`PoolManager` without any configuration or special environment variables. -""" - -from __future__ import absolute_import -import logging -import os -import warnings -from ..packages.six.moves.urllib.parse import urljoin - -from ..exceptions import ( - HTTPError, - HTTPWarning, - MaxRetryError, - ProtocolError, - TimeoutError, - SSLError -) - -from ..packages.six import BytesIO -from ..request import RequestMethods -from ..response import HTTPResponse -from ..util.timeout import Timeout -from ..util.retry import Retry - -try: - from google.appengine.api import urlfetch -except ImportError: - urlfetch = None - - -log = logging.getLogger(__name__) - - -class AppEnginePlatformWarning(HTTPWarning): - pass - - -class AppEnginePlatformError(HTTPError): - pass - - -class AppEngineManager(RequestMethods): - """ - Connection manager for Google App Engine sandbox applications. - - This manager uses the URLFetch service directly instead of using the - emulated httplib, and is subject to URLFetch limitations as described in - the App Engine documentation `here - `_. - - Notably it will raise an :class:`AppEnginePlatformError` if: - * URLFetch is not available. - * If you attempt to use this on App Engine Flexible, as full socket - support is available. - * If a request size is more than 10 megabytes. - * If a response size is more than 32 megabtyes. - * If you use an unsupported request method such as OPTIONS. - - Beyond those cases, it will raise normal urllib3 errors. - """ - - def __init__(self, headers=None, retries=None, validate_certificate=True, - urlfetch_retries=True): - if not urlfetch: - raise AppEnginePlatformError( - "URLFetch is not available in this environment.") - - if is_prod_appengine_mvms(): - raise AppEnginePlatformError( - "Use normal urllib3.PoolManager instead of AppEngineManager" - "on Managed VMs, as using URLFetch is not necessary in " - "this environment.") - - warnings.warn( - "urllib3 is using URLFetch on Google App Engine sandbox instead " - "of sockets. To use sockets directly instead of URLFetch see " - "https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html.", - AppEnginePlatformWarning) - - RequestMethods.__init__(self, headers) - self.validate_certificate = validate_certificate - self.urlfetch_retries = urlfetch_retries - - self.retries = retries or Retry.DEFAULT - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - # Return False to re-raise any potential exceptions - return False - - def urlopen(self, method, url, body=None, headers=None, - retries=None, redirect=True, timeout=Timeout.DEFAULT_TIMEOUT, - **response_kw): - - retries = self._get_retries(retries, redirect) - - try: - follow_redirects = ( - redirect and - retries.redirect != 0 and - retries.total) - response = urlfetch.fetch( - url, - payload=body, - method=method, - headers=headers or {}, - allow_truncated=False, - follow_redirects=self.urlfetch_retries and follow_redirects, - deadline=self._get_absolute_timeout(timeout), - validate_certificate=self.validate_certificate, - ) - except urlfetch.DeadlineExceededError as e: - raise TimeoutError(self, e) - - except urlfetch.InvalidURLError as e: - if 'too large' in str(e): - raise AppEnginePlatformError( - "URLFetch request too large, URLFetch only " - "supports requests up to 10mb in size.", e) - raise ProtocolError(e) - - except urlfetch.DownloadError as e: - if 'Too many redirects' in str(e): - raise MaxRetryError(self, url, reason=e) - raise ProtocolError(e) - - except urlfetch.ResponseTooLargeError as e: - raise AppEnginePlatformError( - "URLFetch response too large, URLFetch only supports" - "responses up to 32mb in size.", e) - - except urlfetch.SSLCertificateError as e: - raise SSLError(e) - - except urlfetch.InvalidMethodError as e: - raise AppEnginePlatformError( - "URLFetch does not support method: %s" % method, e) - - http_response = self._urlfetch_response_to_http_response( - response, retries=retries, **response_kw) - - # Handle redirect? - redirect_location = redirect and http_response.get_redirect_location() - if redirect_location: - # Check for redirect response - if (self.urlfetch_retries and retries.raise_on_redirect): - raise MaxRetryError(self, url, "too many redirects") - else: - if http_response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=http_response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - return http_response - - retries.sleep_for_retry(http_response) - log.debug("Redirecting %s -> %s", url, redirect_location) - redirect_url = urljoin(url, redirect_location) - return self.urlopen( - method, redirect_url, body, headers, - retries=retries, redirect=redirect, - timeout=timeout, **response_kw) - - # Check if we should retry the HTTP response. - has_retry_after = bool(http_response.getheader('Retry-After')) - if retries.is_retry(method, http_response.status, has_retry_after): - retries = retries.increment( - method, url, response=http_response, _pool=self) - log.debug("Retry: %s", url) - retries.sleep(http_response) - return self.urlopen( - method, url, - body=body, headers=headers, - retries=retries, redirect=redirect, - timeout=timeout, **response_kw) - - return http_response - - def _urlfetch_response_to_http_response(self, urlfetch_resp, **response_kw): - - if is_prod_appengine(): - # Production GAE handles deflate encoding automatically, but does - # not remove the encoding header. - content_encoding = urlfetch_resp.headers.get('content-encoding') - - if content_encoding == 'deflate': - del urlfetch_resp.headers['content-encoding'] - - transfer_encoding = urlfetch_resp.headers.get('transfer-encoding') - # We have a full response's content, - # so let's make sure we don't report ourselves as chunked data. - if transfer_encoding == 'chunked': - encodings = transfer_encoding.split(",") - encodings.remove('chunked') - urlfetch_resp.headers['transfer-encoding'] = ','.join(encodings) - - return HTTPResponse( - # In order for decoding to work, we must present the content as - # a file-like object. - body=BytesIO(urlfetch_resp.content), - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - **response_kw - ) - - def _get_absolute_timeout(self, timeout): - if timeout is Timeout.DEFAULT_TIMEOUT: - return None # Defer to URLFetch's default. - if isinstance(timeout, Timeout): - if timeout._read is not None or timeout._connect is not None: - warnings.warn( - "URLFetch does not support granular timeout settings, " - "reverting to total or default URLFetch timeout.", - AppEnginePlatformWarning) - return timeout.total - return timeout - - def _get_retries(self, retries, redirect): - if not isinstance(retries, Retry): - retries = Retry.from_int( - retries, redirect=redirect, default=self.retries) - - if retries.connect or retries.read or retries.redirect: - warnings.warn( - "URLFetch only supports total retries and does not " - "recognize connect, read, or redirect retry parameters.", - AppEnginePlatformWarning) - - return retries - - -def is_appengine(): - return (is_local_appengine() or - is_prod_appengine() or - is_prod_appengine_mvms()) - - -def is_appengine_sandbox(): - return is_appengine() and not is_prod_appengine_mvms() - - -def is_local_appengine(): - return ('APPENGINE_RUNTIME' in os.environ and - 'Development/' in os.environ['SERVER_SOFTWARE']) - - -def is_prod_appengine(): - return ('APPENGINE_RUNTIME' in os.environ and - 'Google App Engine/' in os.environ['SERVER_SOFTWARE'] and - not is_prod_appengine_mvms()) - - -def is_prod_appengine_mvms(): - return os.environ.get('GAE_VM', False) == 'true' diff --git a/pype/vendor/requests/packages/urllib3/contrib/ntlmpool.py b/pype/vendor/requests/packages/urllib3/contrib/ntlmpool.py deleted file mode 100644 index 642e99ed2d..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/ntlmpool.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -NTLM authenticating pool, contributed by erikcederstran - -Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 -""" -from __future__ import absolute_import - -from logging import getLogger -from ntlm import ntlm - -from .. import HTTPSConnectionPool -from ..packages.six.moves.http_client import HTTPSConnection - - -log = getLogger(__name__) - - -class NTLMConnectionPool(HTTPSConnectionPool): - """ - Implements an NTLM authentication version of an urllib3 connection pool - """ - - scheme = 'https' - - def __init__(self, user, pw, authurl, *args, **kwargs): - """ - authurl is a random URL on the server that is protected by NTLM. - user is the Windows user, probably in the DOMAIN\\username format. - pw is the password for the user. - """ - super(NTLMConnectionPool, self).__init__(*args, **kwargs) - self.authurl = authurl - self.rawuser = user - user_parts = user.split('\\', 1) - self.domain = user_parts[0].upper() - self.user = user_parts[1] - self.pw = pw - - def _new_conn(self): - # Performs the NTLM handshake that secures the connection. The socket - # must be kept open while requests are performed. - self.num_connections += 1 - log.debug('Starting NTLM HTTPS connection no. %d: https://%s%s', - self.num_connections, self.host, self.authurl) - - headers = {} - headers['Connection'] = 'Keep-Alive' - req_header = 'Authorization' - resp_header = 'www-authenticate' - - conn = HTTPSConnection(host=self.host, port=self.port) - - # Send negotiation message - headers[req_header] = ( - 'NTLM %s' % ntlm.create_NTLM_NEGOTIATE_MESSAGE(self.rawuser)) - log.debug('Request headers: %s', headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - reshdr = dict(res.getheaders()) - log.debug('Response status: %s %s', res.status, res.reason) - log.debug('Response headers: %s', reshdr) - log.debug('Response data: %s [...]', res.read(100)) - - # Remove the reference to the socket, so that it can not be closed by - # the response object (we want to keep the socket open) - res.fp = None - - # Server should respond with a challenge message - auth_header_values = reshdr[resp_header].split(', ') - auth_header_value = None - for s in auth_header_values: - if s[:5] == 'NTLM ': - auth_header_value = s[5:] - if auth_header_value is None: - raise Exception('Unexpected %s response header: %s' % - (resp_header, reshdr[resp_header])) - - # Send authentication message - ServerChallenge, NegotiateFlags = \ - ntlm.parse_NTLM_CHALLENGE_MESSAGE(auth_header_value) - auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(ServerChallenge, - self.user, - self.domain, - self.pw, - NegotiateFlags) - headers[req_header] = 'NTLM %s' % auth_msg - log.debug('Request headers: %s', headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - log.debug('Response status: %s %s', res.status, res.reason) - log.debug('Response headers: %s', dict(res.getheaders())) - log.debug('Response data: %s [...]', res.read()[:100]) - if res.status != 200: - if res.status == 401: - raise Exception('Server rejected request: wrong ' - 'username or password') - raise Exception('Wrong server response: %s %s' % - (res.status, res.reason)) - - res.fp = None - log.debug('Connection established') - return conn - - def urlopen(self, method, url, body=None, headers=None, retries=3, - redirect=True, assert_same_host=True): - if headers is None: - headers = {} - headers['Connection'] = 'Keep-Alive' - return super(NTLMConnectionPool, self).urlopen(method, url, body, - headers, retries, - redirect, - assert_same_host) diff --git a/pype/vendor/requests/packages/urllib3/contrib/pyopenssl.py b/pype/vendor/requests/packages/urllib3/contrib/pyopenssl.py deleted file mode 100644 index c5da28b7f7..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/pyopenssl.py +++ /dev/null @@ -1,452 +0,0 @@ -""" -SSL with SNI_-support for Python 2. Follow these instructions if you would -like to verify SSL certificates in Python 2. Note, the default libraries do -*not* do certificate checking; you need to do additional work to validate -certificates yourself. - -This needs the following packages installed: - -* pyOpenSSL (tested with 16.0.0) -* cryptography (minimum 1.3.4, from pyopenssl) -* idna (minimum 2.0, from cryptography) - -However, pyopenssl depends on cryptography, which depends on idna, so while we -use all three directly here we end up having relatively few packages required. - -You can install them with the following command: - - pip install pyopenssl cryptography idna - -To activate certificate checking, call -:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code -before you begin making HTTP requests. This can be done in a ``sitecustomize`` -module, or at any other time before your application begins using ``urllib3``, -like this:: - - try: - import urllib3.contrib.pyopenssl - urllib3.contrib.pyopenssl.inject_into_urllib3() - except ImportError: - pass - -Now you can use :mod:`urllib3` as you normally would, and it will support SNI -when the required modules are installed. - -Activating this module also has the positive side effect of disabling SSL/TLS -compression in Python 2 (see `CRIME attack`_). - -If you want to configure the default list of supported cipher suites, you can -set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable. - -.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication -.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit) -""" -from __future__ import absolute_import - -import OpenSSL.SSL -from cryptography import x509 -from cryptography.hazmat.backends.openssl import backend as openssl_backend -from cryptography.hazmat.backends.openssl.x509 import _Certificate - -from socket import timeout, error as SocketError -from io import BytesIO - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -import logging -import ssl -import six -import sys - -from .. import util - -__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] - -# SNI always works. -HAS_SNI = True - -# Map from urllib3 to PyOpenSSL compatible parameter-values. -_openssl_versions = { - ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD, - ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, -} - -if hasattr(ssl, 'PROTOCOL_TLSv1_1') and hasattr(OpenSSL.SSL, 'TLSv1_1_METHOD'): - _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD - -if hasattr(ssl, 'PROTOCOL_TLSv1_2') and hasattr(OpenSSL.SSL, 'TLSv1_2_METHOD'): - _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD - -try: - _openssl_versions.update({ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD}) -except AttributeError: - pass - -_stdlib_to_openssl_verify = { - ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, - ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, - ssl.CERT_REQUIRED: - OpenSSL.SSL.VERIFY_PEER + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, -} -_openssl_to_stdlib_verify = dict( - (v, k) for k, v in _stdlib_to_openssl_verify.items() -) - -# OpenSSL will only write 16K at a time -SSL_WRITE_BLOCKSIZE = 16384 - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - - -log = logging.getLogger(__name__) - - -def inject_into_urllib3(): - 'Monkey-patch urllib3 with PyOpenSSL-backed SSL-support.' - - _validate_dependencies_met() - - util.ssl_.SSLContext = PyOpenSSLContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_PYOPENSSL = True - util.ssl_.IS_PYOPENSSL = True - - -def extract_from_urllib3(): - 'Undo monkey-patching by :func:`inject_into_urllib3`.' - - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_PYOPENSSL = False - util.ssl_.IS_PYOPENSSL = False - - -def _validate_dependencies_met(): - """ - Verifies that PyOpenSSL's package-level dependencies have been met. - Throws `ImportError` if they are not met. - """ - # Method added in `cryptography==1.1`; not available in older versions - from cryptography.x509.extensions import Extensions - if getattr(Extensions, "get_extension_for_class", None) is None: - raise ImportError("'cryptography' module missing required functionality. " - "Try upgrading to v1.3.4 or newer.") - - # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 - # attribute is only present on those versions. - from OpenSSL.crypto import X509 - x509 = X509() - if getattr(x509, "_x509", None) is None: - raise ImportError("'pyOpenSSL' module missing required functionality. " - "Try upgrading to v0.14 or newer.") - - -def _dnsname_to_stdlib(name): - """ - Converts a dNSName SubjectAlternativeName field to the form used by the - standard library on the given Python version. - - Cryptography produces a dNSName as a unicode string that was idna-decoded - from ASCII bytes. We need to idna-encode that string to get it back, and - then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib - uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). - """ - def idna_encode(name): - """ - Borrowed wholesale from the Python Cryptography Project. It turns out - that we can't just safely call `idna.encode`: it can explode for - wildcard names. This avoids that problem. - """ - import idna - - for prefix in [u'*.', u'.']: - if name.startswith(prefix): - name = name[len(prefix):] - return prefix.encode('ascii') + idna.encode(name) - return idna.encode(name) - - name = idna_encode(name) - if sys.version_info >= (3, 0): - name = name.decode('utf-8') - return name - - -def get_subj_alt_name(peer_cert): - """ - Given an PyOpenSSL certificate, provides all the subject alternative names. - """ - # Pass the cert to cryptography, which has much better APIs for this. - # This is technically using private APIs, but should work across all - # relevant versions until PyOpenSSL gets something proper for this. - cert = _Certificate(openssl_backend, peer_cert._x509) - - # We want to find the SAN extension. Ask Cryptography to locate it (it's - # faster than looping in Python) - try: - ext = cert.extensions.get_extension_for_class( - x509.SubjectAlternativeName - ).value - except x509.ExtensionNotFound: - # No such extension, return the empty list. - return [] - except (x509.DuplicateExtension, x509.UnsupportedExtension, - x509.UnsupportedGeneralNameType, UnicodeError) as e: - # A problem has been found with the quality of the certificate. Assume - # no SAN field is present. - log.warning( - "A problem was encountered with the certificate that prevented " - "urllib3 from finding the SubjectAlternativeName field. This can " - "affect certificate validation. The error was %s", - e, - ) - return [] - - # We want to return dNSName and iPAddress fields. We need to cast the IPs - # back to strings because the match_hostname function wants them as - # strings. - # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 - # decoded. This is pretty frustrating, but that's what the standard library - # does with certificates, and so we need to attempt to do the same. - names = [ - ('DNS', _dnsname_to_stdlib(name)) - for name in ext.get_values_for_type(x509.DNSName) - ] - names.extend( - ('IP Address', str(name)) - for name in ext.get_values_for_type(x509.IPAddress) - ) - - return names - - -class WrappedSocket(object): - '''API-compatibility wrapper for Python OpenSSL's Connection-class. - - Note: _makefile_refs, _drop() and _reuse() are needed for the garbage - collector of pypy. - ''' - - def __init__(self, connection, socket, suppress_ragged_eofs=True): - self.connection = connection - self.socket = socket - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 - self._closed = False - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, *args, **kwargs): - try: - data = self.connection.recv(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): - return b'' - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError as e: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return b'' - else: - raise - except OpenSSL.SSL.WantReadError: - rd = util.wait_for_read(self.socket, self.socket.gettimeout()) - if not rd: - raise timeout('The read operation timed out') - else: - return self.recv(*args, **kwargs) - else: - return data - - def recv_into(self, *args, **kwargs): - try: - return self.connection.recv_into(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): - return 0 - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError as e: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return 0 - else: - raise - except OpenSSL.SSL.WantReadError: - rd = util.wait_for_read(self.socket, self.socket.gettimeout()) - if not rd: - raise timeout('The read operation timed out') - else: - return self.recv_into(*args, **kwargs) - - def settimeout(self, timeout): - return self.socket.settimeout(timeout) - - def _send_until_done(self, data): - while True: - try: - return self.connection.send(data) - except OpenSSL.SSL.WantWriteError: - wr = util.wait_for_write(self.socket, self.socket.gettimeout()) - if not wr: - raise timeout() - continue - except OpenSSL.SSL.SysCallError as e: - raise SocketError(str(e)) - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self._send_until_done(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - # FIXME rethrow compatible exceptions should we ever use this - self.connection.shutdown() - - def close(self): - if self._makefile_refs < 1: - try: - self._closed = True - return self.connection.close() - except OpenSSL.SSL.Error: - return - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - x509 = self.connection.get_peer_certificate() - - if not x509: - return x509 - - if binary_form: - return OpenSSL.crypto.dump_certificate( - OpenSSL.crypto.FILETYPE_ASN1, - x509) - - return { - 'subject': ( - (('commonName', x509.get_subject().CN),), - ), - 'subjectAltName': get_subj_alt_name(x509) - } - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) -else: # Platform-specific: Python 3 - makefile = backport_makefile - -WrappedSocket.makefile = makefile - - -class PyOpenSSLContext(object): - """ - I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible - for translating the interface of the standard library ``SSLContext`` object - to calls into PyOpenSSL. - """ - def __init__(self, protocol): - self.protocol = _openssl_versions[protocol] - self._ctx = OpenSSL.SSL.Context(self.protocol) - self._options = 0 - self.check_hostname = False - - @property - def options(self): - return self._options - - @options.setter - def options(self, value): - self._options = value - self._ctx.set_options(value) - - @property - def verify_mode(self): - return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] - - @verify_mode.setter - def verify_mode(self, value): - self._ctx.set_verify( - _stdlib_to_openssl_verify[value], - _verify_callback - ) - - def set_default_verify_paths(self): - self._ctx.set_default_verify_paths() - - def set_ciphers(self, ciphers): - if isinstance(ciphers, six.text_type): - ciphers = ciphers.encode('utf-8') - self._ctx.set_cipher_list(ciphers) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - if cafile is not None: - cafile = cafile.encode('utf-8') - if capath is not None: - capath = capath.encode('utf-8') - self._ctx.load_verify_locations(cafile, capath) - if cadata is not None: - self._ctx.load_verify_locations(BytesIO(cadata)) - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._ctx.use_certificate_file(certfile) - if password is not None: - self._ctx.set_passwd_cb(lambda max_length, prompt_twice, userdata: password) - self._ctx.use_privatekey_file(keyfile or certfile) - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, suppress_ragged_eofs=True, - server_hostname=None): - cnx = OpenSSL.SSL.Connection(self._ctx, sock) - - if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3 - server_hostname = server_hostname.encode('utf-8') - - if server_hostname is not None: - cnx.set_tlsext_host_name(server_hostname) - - cnx.set_connect_state() - - while True: - try: - cnx.do_handshake() - except OpenSSL.SSL.WantReadError: - rd = util.wait_for_read(sock, sock.gettimeout()) - if not rd: - raise timeout('select timed out') - continue - except OpenSSL.SSL.Error as e: - raise ssl.SSLError('bad handshake: %r' % e) - break - - return WrappedSocket(cnx, sock) - - -def _verify_callback(cnx, x509, err_no, err_depth, return_code): - return err_no == 0 diff --git a/pype/vendor/requests/packages/urllib3/contrib/securetransport.py b/pype/vendor/requests/packages/urllib3/contrib/securetransport.py deleted file mode 100644 index 72b23ab1c4..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/securetransport.py +++ /dev/null @@ -1,807 +0,0 @@ -""" -SecureTranport support for urllib3 via ctypes. - -This makes platform-native TLS available to urllib3 users on macOS without the -use of a compiler. This is an important feature because the Python Package -Index is moving to become a TLSv1.2-or-higher server, and the default OpenSSL -that ships with macOS is not capable of doing TLSv1.2. The only way to resolve -this is to give macOS users an alternative solution to the problem, and that -solution is to use SecureTransport. - -We use ctypes here because this solution must not require a compiler. That's -because pip is not allowed to require a compiler either. - -This is not intended to be a seriously long-term solution to this problem. -The hope is that PEP 543 will eventually solve this issue for us, at which -point we can retire this contrib module. But in the short term, we need to -solve the impending tire fire that is Python on Mac without this kind of -contrib module. So...here we are. - -To use this module, simply import and inject it:: - - import urllib3.contrib.securetransport - urllib3.contrib.securetransport.inject_into_urllib3() - -Happy TLSing! -""" -from __future__ import absolute_import - -import contextlib -import ctypes -import errno -import os.path -import shutil -import socket -import ssl -import threading -import weakref - -from .. import util -from ._securetransport.bindings import ( - Security, SecurityConst, CoreFoundation -) -from ._securetransport.low_level import ( - _assert_no_error, _cert_array_from_pem, _temporary_keychain, - _load_client_cert_chain -) - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -try: - memoryview(b'') -except NameError: - raise ImportError("SecureTransport only works on Pythons with memoryview") - -__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] - -# SNI always works -HAS_SNI = True - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - -# This dictionary is used by the read callback to obtain a handle to the -# calling wrapped socket. This is a pretty silly approach, but for now it'll -# do. I feel like I should be able to smuggle a handle to the wrapped socket -# directly in the SSLConnectionRef, but for now this approach will work I -# guess. -# -# We need to lock around this structure for inserts, but we don't do it for -# reads/writes in the callbacks. The reasoning here goes as follows: -# -# 1. It is not possible to call into the callbacks before the dictionary is -# populated, so once in the callback the id must be in the dictionary. -# 2. The callbacks don't mutate the dictionary, they only read from it, and -# so cannot conflict with any of the insertions. -# -# This is good: if we had to lock in the callbacks we'd drastically slow down -# the performance of this code. -_connection_refs = weakref.WeakValueDictionary() -_connection_ref_lock = threading.Lock() - -# Limit writes to 16kB. This is OpenSSL's limit, but we'll cargo-cult it over -# for no better reason than we need *a* limit, and this one is right there. -SSL_WRITE_BLOCKSIZE = 16384 - -# This is our equivalent of util.ssl_.DEFAULT_CIPHERS, but expanded out to -# individual cipher suites. We need to do this becuase this is how -# SecureTransport wants them. -CIPHER_SUITES = [ - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA, -] - -# Basically this is simple: for PROTOCOL_SSLv23 we turn it into a low of -# TLSv1 and a high of TLSv1.2. For everything else, we pin to that version. -_protocol_to_min_max = { - ssl.PROTOCOL_SSLv23: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), -} - -if hasattr(ssl, "PROTOCOL_SSLv2"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv2] = ( - SecurityConst.kSSLProtocol2, SecurityConst.kSSLProtocol2 - ) -if hasattr(ssl, "PROTOCOL_SSLv3"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv3] = ( - SecurityConst.kSSLProtocol3, SecurityConst.kSSLProtocol3 - ) -if hasattr(ssl, "PROTOCOL_TLSv1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1] = ( - SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol1 - ) -if hasattr(ssl, "PROTOCOL_TLSv1_1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_1] = ( - SecurityConst.kTLSProtocol11, SecurityConst.kTLSProtocol11 - ) -if hasattr(ssl, "PROTOCOL_TLSv1_2"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_2] = ( - SecurityConst.kTLSProtocol12, SecurityConst.kTLSProtocol12 - ) -if hasattr(ssl, "PROTOCOL_TLS"): - _protocol_to_min_max[ssl.PROTOCOL_TLS] = _protocol_to_min_max[ssl.PROTOCOL_SSLv23] - - -def inject_into_urllib3(): - """ - Monkey-patch urllib3 with SecureTransport-backed SSL-support. - """ - util.ssl_.SSLContext = SecureTransportContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_SECURETRANSPORT = True - util.ssl_.IS_SECURETRANSPORT = True - - -def extract_from_urllib3(): - """ - Undo monkey-patching by :func:`inject_into_urllib3`. - """ - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_SECURETRANSPORT = False - util.ssl_.IS_SECURETRANSPORT = False - - -def _read_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport read callback. This is called by ST to request that data - be returned from the socket. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - requested_length = data_length_pointer[0] - - timeout = wrapped_socket.gettimeout() - error = None - read_count = 0 - buffer = (ctypes.c_char * requested_length).from_address(data_buffer) - buffer_view = memoryview(buffer) - - try: - while read_count < requested_length: - if timeout is None or timeout >= 0: - readables = util.wait_for_read([base_socket], timeout) - if not readables: - raise socket.error(errno.EAGAIN, 'timed out') - - # We need to tell ctypes that we have a buffer that can be - # written to. Upsettingly, we do that like this: - chunk_size = base_socket.recv_into( - buffer_view[read_count:requested_length] - ) - read_count += chunk_size - if not chunk_size: - if not read_count: - return SecurityConst.errSSLClosedGraceful - break - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - if error == errno.ECONNRESET: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = read_count - - if read_count != requested_length: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -def _write_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport write callback. This is called by ST to request that data - actually be sent on the network. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - bytes_to_write = data_length_pointer[0] - data = ctypes.string_at(data_buffer, bytes_to_write) - - timeout = wrapped_socket.gettimeout() - error = None - sent = 0 - - try: - while sent < bytes_to_write: - if timeout is None or timeout >= 0: - writables = util.wait_for_write([base_socket], timeout) - if not writables: - raise socket.error(errno.EAGAIN, 'timed out') - chunk_sent = base_socket.send(data) - sent += chunk_sent - - # This has some needless copying here, but I'm not sure there's - # much value in optimising this data path. - data = data[chunk_sent:] - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - if error == errno.ECONNRESET: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = sent - if sent != bytes_to_write: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -# We need to keep these two objects references alive: if they get GC'd while -# in use then SecureTransport could attempt to call a function that is in freed -# memory. That would be...uh...bad. Yeah, that's the word. Bad. -_read_callback_pointer = Security.SSLReadFunc(_read_callback) -_write_callback_pointer = Security.SSLWriteFunc(_write_callback) - - -class WrappedSocket(object): - """ - API-compatibility wrapper for Python's OpenSSL wrapped socket object. - - Note: _makefile_refs, _drop(), and _reuse() are needed for the garbage - collector of PyPy. - """ - def __init__(self, socket): - self.socket = socket - self.context = None - self._makefile_refs = 0 - self._closed = False - self._exception = None - self._keychain = None - self._keychain_dir = None - self._client_cert_chain = None - - # We save off the previously-configured timeout and then set it to - # zero. This is done because we use select and friends to handle the - # timeouts, but if we leave the timeout set on the lower socket then - # Python will "kindly" call select on that socket again for us. Avoid - # that by forcing the timeout to zero. - self._timeout = self.socket.gettimeout() - self.socket.settimeout(0) - - @contextlib.contextmanager - def _raise_on_error(self): - """ - A context manager that can be used to wrap calls that do I/O from - SecureTransport. If any of the I/O callbacks hit an exception, this - context manager will correctly propagate the exception after the fact. - This avoids silently swallowing those exceptions. - - It also correctly forces the socket closed. - """ - self._exception = None - - # We explicitly don't catch around this yield because in the unlikely - # event that an exception was hit in the block we don't want to swallow - # it. - yield - if self._exception is not None: - exception, self._exception = self._exception, None - self.close() - raise exception - - def _set_ciphers(self): - """ - Sets up the allowed ciphers. By default this matches the set in - util.ssl_.DEFAULT_CIPHERS, at least as supported by macOS. This is done - custom and doesn't allow changing at this time, mostly because parsing - OpenSSL cipher strings is going to be a freaking nightmare. - """ - ciphers = (Security.SSLCipherSuite * len(CIPHER_SUITES))(*CIPHER_SUITES) - result = Security.SSLSetEnabledCiphers( - self.context, ciphers, len(CIPHER_SUITES) - ) - _assert_no_error(result) - - def _custom_validate(self, verify, trust_bundle): - """ - Called when we have set custom validation. We do this in two cases: - first, when cert validation is entirely disabled; and second, when - using a custom trust DB. - """ - # If we disabled cert validation, just say: cool. - if not verify: - return - - # We want data in memory, so load it up. - if os.path.isfile(trust_bundle): - with open(trust_bundle, 'rb') as f: - trust_bundle = f.read() - - cert_array = None - trust = Security.SecTrustRef() - - try: - # Get a CFArray that contains the certs we want. - cert_array = _cert_array_from_pem(trust_bundle) - - # Ok, now the hard part. We want to get the SecTrustRef that ST has - # created for this connection, shove our CAs into it, tell ST to - # ignore everything else it knows, and then ask if it can build a - # chain. This is a buuuunch of code. - result = Security.SSLCopyPeerTrust( - self.context, ctypes.byref(trust) - ) - _assert_no_error(result) - if not trust: - raise ssl.SSLError("Failed to copy trust reference") - - result = Security.SecTrustSetAnchorCertificates(trust, cert_array) - _assert_no_error(result) - - result = Security.SecTrustSetAnchorCertificatesOnly(trust, True) - _assert_no_error(result) - - trust_result = Security.SecTrustResultType() - result = Security.SecTrustEvaluate( - trust, ctypes.byref(trust_result) - ) - _assert_no_error(result) - finally: - if trust: - CoreFoundation.CFRelease(trust) - - if cert_array is None: - CoreFoundation.CFRelease(cert_array) - - # Ok, now we can look at what the result was. - successes = ( - SecurityConst.kSecTrustResultUnspecified, - SecurityConst.kSecTrustResultProceed - ) - if trust_result.value not in successes: - raise ssl.SSLError( - "certificate verify failed, error code: %d" % - trust_result.value - ) - - def handshake(self, - server_hostname, - verify, - trust_bundle, - min_version, - max_version, - client_cert, - client_key, - client_key_passphrase): - """ - Actually performs the TLS handshake. This is run automatically by - wrapped socket, and shouldn't be needed in user code. - """ - # First, we do the initial bits of connection setup. We need to create - # a context, set its I/O funcs, and set the connection reference. - self.context = Security.SSLCreateContext( - None, SecurityConst.kSSLClientSide, SecurityConst.kSSLStreamType - ) - result = Security.SSLSetIOFuncs( - self.context, _read_callback_pointer, _write_callback_pointer - ) - _assert_no_error(result) - - # Here we need to compute the handle to use. We do this by taking the - # id of self modulo 2**31 - 1. If this is already in the dictionary, we - # just keep incrementing by one until we find a free space. - with _connection_ref_lock: - handle = id(self) % 2147483647 - while handle in _connection_refs: - handle = (handle + 1) % 2147483647 - _connection_refs[handle] = self - - result = Security.SSLSetConnection(self.context, handle) - _assert_no_error(result) - - # If we have a server hostname, we should set that too. - if server_hostname: - if not isinstance(server_hostname, bytes): - server_hostname = server_hostname.encode('utf-8') - - result = Security.SSLSetPeerDomainName( - self.context, server_hostname, len(server_hostname) - ) - _assert_no_error(result) - - # Setup the ciphers. - self._set_ciphers() - - # Set the minimum and maximum TLS versions. - result = Security.SSLSetProtocolVersionMin(self.context, min_version) - _assert_no_error(result) - result = Security.SSLSetProtocolVersionMax(self.context, max_version) - _assert_no_error(result) - - # If there's a trust DB, we need to use it. We do that by telling - # SecureTransport to break on server auth. We also do that if we don't - # want to validate the certs at all: we just won't actually do any - # authing in that case. - if not verify or trust_bundle is not None: - result = Security.SSLSetSessionOption( - self.context, - SecurityConst.kSSLSessionOptionBreakOnServerAuth, - True - ) - _assert_no_error(result) - - # If there's a client cert, we need to use it. - if client_cert: - self._keychain, self._keychain_dir = _temporary_keychain() - self._client_cert_chain = _load_client_cert_chain( - self._keychain, client_cert, client_key - ) - result = Security.SSLSetCertificate( - self.context, self._client_cert_chain - ) - _assert_no_error(result) - - while True: - with self._raise_on_error(): - result = Security.SSLHandshake(self.context) - - if result == SecurityConst.errSSLWouldBlock: - raise socket.timeout("handshake timed out") - elif result == SecurityConst.errSSLServerAuthCompleted: - self._custom_validate(verify, trust_bundle) - continue - else: - _assert_no_error(result) - break - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, bufsiz): - buffer = ctypes.create_string_buffer(bufsiz) - bytes_read = self.recv_into(buffer, bufsiz) - data = buffer[:bytes_read] - return data - - def recv_into(self, buffer, nbytes=None): - # Read short on EOF. - if self._closed: - return 0 - - if nbytes is None: - nbytes = len(buffer) - - buffer = (ctypes.c_char * nbytes).from_buffer(buffer) - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLRead( - self.context, buffer, nbytes, ctypes.byref(processed_bytes) - ) - - # There are some result codes that we want to treat as "not always - # errors". Specifically, those are errSSLWouldBlock, - # errSSLClosedGraceful, and errSSLClosedNoNotify. - if (result == SecurityConst.errSSLWouldBlock): - # If we didn't process any bytes, then this was just a time out. - # However, we can get errSSLWouldBlock in situations when we *did* - # read some data, and in those cases we should just read "short" - # and return. - if processed_bytes.value == 0: - # Timed out, no data read. - raise socket.timeout("recv timed out") - elif result in (SecurityConst.errSSLClosedGraceful, SecurityConst.errSSLClosedNoNotify): - # The remote peer has closed this connection. We should do so as - # well. Note that we don't actually return here because in - # principle this could actually be fired along with return data. - # It's unlikely though. - self.close() - else: - _assert_no_error(result) - - # Ok, we read and probably succeeded. We should return whatever data - # was actually read. - return processed_bytes.value - - def settimeout(self, timeout): - self._timeout = timeout - - def gettimeout(self): - return self._timeout - - def send(self, data): - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLWrite( - self.context, data, len(data), ctypes.byref(processed_bytes) - ) - - if result == SecurityConst.errSSLWouldBlock and processed_bytes.value == 0: - # Timed out - raise socket.timeout("send timed out") - else: - _assert_no_error(result) - - # We sent, and probably succeeded. Tell them how much we sent. - return processed_bytes.value - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self.send(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - with self._raise_on_error(): - Security.SSLClose(self.context) - - def close(self): - # TODO: should I do clean shutdown here? Do I have to? - if self._makefile_refs < 1: - self._closed = True - if self.context: - CoreFoundation.CFRelease(self.context) - self.context = None - if self._client_cert_chain: - CoreFoundation.CFRelease(self._client_cert_chain) - self._client_cert_chain = None - if self._keychain: - Security.SecKeychainDelete(self._keychain) - CoreFoundation.CFRelease(self._keychain) - shutil.rmtree(self._keychain_dir) - self._keychain = self._keychain_dir = None - return self.socket.close() - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - # Urgh, annoying. - # - # Here's how we do this: - # - # 1. Call SSLCopyPeerTrust to get hold of the trust object for this - # connection. - # 2. Call SecTrustGetCertificateAtIndex for index 0 to get the leaf. - # 3. To get the CN, call SecCertificateCopyCommonName and process that - # string so that it's of the appropriate type. - # 4. To get the SAN, we need to do something a bit more complex: - # a. Call SecCertificateCopyValues to get the data, requesting - # kSecOIDSubjectAltName. - # b. Mess about with this dictionary to try to get the SANs out. - # - # This is gross. Really gross. It's going to be a few hundred LoC extra - # just to repeat something that SecureTransport can *already do*. So my - # operating assumption at this time is that what we want to do is - # instead to just flag to urllib3 that it shouldn't do its own hostname - # validation when using SecureTransport. - if not binary_form: - raise ValueError( - "SecureTransport only supports dumping binary certs" - ) - trust = Security.SecTrustRef() - certdata = None - der_bytes = None - - try: - # Grab the trust store. - result = Security.SSLCopyPeerTrust( - self.context, ctypes.byref(trust) - ) - _assert_no_error(result) - if not trust: - # Probably we haven't done the handshake yet. No biggie. - return None - - cert_count = Security.SecTrustGetCertificateCount(trust) - if not cert_count: - # Also a case that might happen if we haven't handshaked. - # Handshook? Handshaken? - return None - - leaf = Security.SecTrustGetCertificateAtIndex(trust, 0) - assert leaf - - # Ok, now we want the DER bytes. - certdata = Security.SecCertificateCopyData(leaf) - assert certdata - - data_length = CoreFoundation.CFDataGetLength(certdata) - data_buffer = CoreFoundation.CFDataGetBytePtr(certdata) - der_bytes = ctypes.string_at(data_buffer, data_length) - finally: - if certdata: - CoreFoundation.CFRelease(certdata) - if trust: - CoreFoundation.CFRelease(trust) - - return der_bytes - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) -else: # Platform-specific: Python 3 - def makefile(self, mode="r", buffering=None, *args, **kwargs): - # We disable buffering with SecureTransport because it conflicts with - # the buffering that ST does internally (see issue #1153 for more). - buffering = 0 - return backport_makefile(self, mode, buffering, *args, **kwargs) - -WrappedSocket.makefile = makefile - - -class SecureTransportContext(object): - """ - I am a wrapper class for the SecureTransport library, to translate the - interface of the standard library ``SSLContext`` object to calls into - SecureTransport. - """ - def __init__(self, protocol): - self._min_version, self._max_version = _protocol_to_min_max[protocol] - self._options = 0 - self._verify = False - self._trust_bundle = None - self._client_cert = None - self._client_key = None - self._client_key_passphrase = None - - @property - def check_hostname(self): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - return True - - @check_hostname.setter - def check_hostname(self, value): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - pass - - @property - def options(self): - # TODO: Well, crap. - # - # So this is the bit of the code that is the most likely to cause us - # trouble. Essentially we need to enumerate all of the SSL options that - # users might want to use and try to see if we can sensibly translate - # them, or whether we should just ignore them. - return self._options - - @options.setter - def options(self, value): - # TODO: Update in line with above. - self._options = value - - @property - def verify_mode(self): - return ssl.CERT_REQUIRED if self._verify else ssl.CERT_NONE - - @verify_mode.setter - def verify_mode(self, value): - self._verify = True if value == ssl.CERT_REQUIRED else False - - def set_default_verify_paths(self): - # So, this has to do something a bit weird. Specifically, what it does - # is nothing. - # - # This means that, if we had previously had load_verify_locations - # called, this does not undo that. We need to do that because it turns - # out that the rest of the urllib3 code will attempt to load the - # default verify paths if it hasn't been told about any paths, even if - # the context itself was sometime earlier. We resolve that by just - # ignoring it. - pass - - def load_default_certs(self): - return self.set_default_verify_paths() - - def set_ciphers(self, ciphers): - # For now, we just require the default cipher string. - if ciphers != util.ssl_.DEFAULT_CIPHERS: - raise ValueError( - "SecureTransport doesn't support custom cipher strings" - ) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - # OK, we only really support cadata and cafile. - if capath is not None: - raise ValueError( - "SecureTransport does not support cert directories" - ) - - self._trust_bundle = cafile or cadata - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._client_cert = certfile - self._client_key = keyfile - self._client_cert_passphrase = password - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, suppress_ragged_eofs=True, - server_hostname=None): - # So, what do we do here? Firstly, we assert some properties. This is a - # stripped down shim, so there is some functionality we don't support. - # See PEP 543 for the real deal. - assert not server_side - assert do_handshake_on_connect - assert suppress_ragged_eofs - - # Ok, we're good to go. Now we want to create the wrapped socket object - # and store it in the appropriate place. - wrapped_socket = WrappedSocket(sock) - - # Now we can handshake - wrapped_socket.handshake( - server_hostname, self._verify, self._trust_bundle, - self._min_version, self._max_version, self._client_cert, - self._client_key, self._client_key_passphrase - ) - return wrapped_socket diff --git a/pype/vendor/requests/packages/urllib3/contrib/socks.py b/pype/vendor/requests/packages/urllib3/contrib/socks.py deleted file mode 100644 index 39e92fde19..0000000000 --- a/pype/vendor/requests/packages/urllib3/contrib/socks.py +++ /dev/null @@ -1,188 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module contains provisional support for SOCKS proxies from within -urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and -SOCKS5. To enable its functionality, either install PySocks or install this -module with the ``socks`` extra. - -The SOCKS implementation supports the full range of urllib3 features. It also -supports the following SOCKS features: - -- SOCKS4 -- SOCKS4a -- SOCKS5 -- Usernames and passwords for the SOCKS proxy - -Known Limitations: - -- Currently PySocks does not support contacting remote websites via literal - IPv6 addresses. Any such connection attempt will fail. You must use a domain - name. -- Currently PySocks does not support IPv6 connections to the SOCKS proxy. Any - such connection attempt will fail. -""" -from __future__ import absolute_import - -try: - import socks -except ImportError: - import warnings - from ..exceptions import DependencyWarning - - warnings.warn(( - 'SOCKS support in urllib3 requires the installation of optional ' - 'dependencies: specifically, PySocks. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies' - ), - DependencyWarning - ) - raise - -from socket import error as SocketError, timeout as SocketTimeout - -from ..connection import ( - HTTPConnection, HTTPSConnection -) -from ..connectionpool import ( - HTTPConnectionPool, HTTPSConnectionPool -) -from ..exceptions import ConnectTimeoutError, NewConnectionError -from ..poolmanager import PoolManager -from ..util.url import parse_url - -try: - import ssl -except ImportError: - ssl = None - - -class SOCKSConnection(HTTPConnection): - """ - A plain-text HTTP connection that connects via a SOCKS proxy. - """ - def __init__(self, *args, **kwargs): - self._socks_options = kwargs.pop('_socks_options') - super(SOCKSConnection, self).__init__(*args, **kwargs) - - def _new_conn(self): - """ - Establish a new connection via the SOCKS proxy. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = socks.create_connection( - (self.host, self.port), - proxy_type=self._socks_options['socks_version'], - proxy_addr=self._socks_options['proxy_host'], - proxy_port=self._socks_options['proxy_port'], - proxy_username=self._socks_options['username'], - proxy_password=self._socks_options['password'], - proxy_rdns=self._socks_options['rdns'], - timeout=self.timeout, - **extra_kw - ) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - except socks.ProxyError as e: - # This is fragile as hell, but it seems to be the only way to raise - # useful errors here. - if e.socket_err: - error = e.socket_err - if isinstance(error, SocketTimeout): - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout) - ) - else: - raise NewConnectionError( - self, - "Failed to establish a new connection: %s" % error - ) - else: - raise NewConnectionError( - self, - "Failed to establish a new connection: %s" % e - ) - - except SocketError as e: # Defensive: PySocks should catch all these. - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e) - - return conn - - -# We don't need to duplicate the Verified/Unverified distinction from -# urllib3/connection.py here because the HTTPSConnection will already have been -# correctly set to either the Verified or Unverified form by that module. This -# means the SOCKSHTTPSConnection will automatically be the correct type. -class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): - pass - - -class SOCKSHTTPConnectionPool(HTTPConnectionPool): - ConnectionCls = SOCKSConnection - - -class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): - ConnectionCls = SOCKSHTTPSConnection - - -class SOCKSProxyManager(PoolManager): - """ - A version of the urllib3 ProxyManager that routes connections via the - defined SOCKS proxy. - """ - pool_classes_by_scheme = { - 'http': SOCKSHTTPConnectionPool, - 'https': SOCKSHTTPSConnectionPool, - } - - def __init__(self, proxy_url, username=None, password=None, - num_pools=10, headers=None, **connection_pool_kw): - parsed = parse_url(proxy_url) - - if parsed.scheme == 'socks5': - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = False - elif parsed.scheme == 'socks5h': - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = True - elif parsed.scheme == 'socks4': - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = False - elif parsed.scheme == 'socks4a': - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = True - else: - raise ValueError( - "Unable to determine SOCKS version from %s" % proxy_url - ) - - self.proxy_url = proxy_url - - socks_options = { - 'socks_version': socks_version, - 'proxy_host': parsed.host, - 'proxy_port': parsed.port, - 'username': username, - 'password': password, - 'rdns': rdns - } - connection_pool_kw['_socks_options'] = socks_options - - super(SOCKSProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw - ) - - self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/pype/vendor/requests/packages/urllib3/exceptions.py b/pype/vendor/requests/packages/urllib3/exceptions.py deleted file mode 100644 index 6c4be58106..0000000000 --- a/pype/vendor/requests/packages/urllib3/exceptions.py +++ /dev/null @@ -1,246 +0,0 @@ -from __future__ import absolute_import -from .packages.six.moves.http_client import ( - IncompleteRead as httplib_IncompleteRead -) -# Base Exceptions - - -class HTTPError(Exception): - "Base exception used by this module." - pass - - -class HTTPWarning(Warning): - "Base warning used by this module." - pass - - -class PoolError(HTTPError): - "Base exception for errors caused within a pool." - def __init__(self, pool, message): - self.pool = pool - HTTPError.__init__(self, "%s: %s" % (pool, message)) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, None) - - -class RequestError(PoolError): - "Base exception for PoolErrors that have associated URLs." - def __init__(self, pool, url, message): - self.url = url - PoolError.__init__(self, pool, message) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, self.url, None) - - -class SSLError(HTTPError): - "Raised when SSL certificate fails in an HTTPS connection." - pass - - -class ProxyError(HTTPError): - "Raised when the connection to a proxy fails." - pass - - -class DecodeError(HTTPError): - "Raised when automatic decoding based on Content-Type fails." - pass - - -class ProtocolError(HTTPError): - "Raised when something unexpected happens mid-request/response." - pass - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -# Leaf Exceptions - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param string url: The requested Url - :param exceptions.Exception reason: The underlying error - - """ - - def __init__(self, pool, url, reason=None): - self.reason = reason - - message = "Max retries exceeded with url: %s (Caused by %r)" % ( - url, reason) - - RequestError.__init__(self, pool, url, message) - - -class HostChangedError(RequestError): - "Raised when an existing pool gets a request for a foreign host." - - def __init__(self, pool, url, retries=3): - message = "Tried to open a foreign host with url: %s" % url - RequestError.__init__(self, pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """ Raised when passing an invalid state to a timeout """ - pass - - -class TimeoutError(HTTPError): - """ Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - ` and :exc:`ConnectTimeoutErrors `. - """ - pass - - -class ReadTimeoutError(TimeoutError, RequestError): - "Raised when a socket timeout occurs while receiving data from a server" - pass - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - "Raised when a socket timeout occurs while connecting to a server" - pass - - -class NewConnectionError(ConnectTimeoutError, PoolError): - "Raised when we fail to establish a new connection. Usually ECONNREFUSED." - pass - - -class EmptyPoolError(PoolError): - "Raised when a pool runs out of connections and no more are allowed." - pass - - -class ClosedPoolError(PoolError): - "Raised when a request enters a pool after the pool has been closed." - pass - - -class LocationValueError(ValueError, HTTPError): - "Raised when there is something wrong with a given URL input." - pass - - -class LocationParseError(LocationValueError): - "Raised when get_host or similar fails to parse the URL input." - - def __init__(self, location): - message = "Failed to parse: %s" % location - HTTPError.__init__(self, message) - - self.location = location - - -class ResponseError(HTTPError): - "Used as a container for an error reason supplied in a MaxRetryError." - GENERIC_ERROR = 'too many error responses' - SPECIFIC_ERROR = 'too many {status_code} error responses' - - -class SecurityWarning(HTTPWarning): - "Warned when perfoming security reducing actions" - pass - - -class SubjectAltNameWarning(SecurityWarning): - "Warned when connecting to a host with a certificate missing a SAN." - pass - - -class InsecureRequestWarning(SecurityWarning): - "Warned when making an unverified HTTPS request." - pass - - -class SystemTimeWarning(SecurityWarning): - "Warned when system time is suspected to be wrong" - pass - - -class InsecurePlatformWarning(SecurityWarning): - "Warned when certain SSL configuration is not available on a platform." - pass - - -class SNIMissingWarning(HTTPWarning): - "Warned when making a HTTPS request without SNI available." - pass - - -class DependencyWarning(HTTPWarning): - """ - Warned when an attempt is made to import a module with missing optional - dependencies. - """ - pass - - -class ResponseNotChunked(ProtocolError, ValueError): - "Response needs to be chunked in order to read it as chunks." - pass - - -class BodyNotHttplibCompatible(HTTPError): - """ - Body should be httplib.HTTPResponse like (have an fp attribute which - returns raw chunks) for read_chunked(). - """ - pass - - -class IncompleteRead(HTTPError, httplib_IncompleteRead): - """ - Response length doesn't match expected Content-Length - - Subclass of http_client.IncompleteRead to allow int value - for `partial` to avoid creating large objects on streamed - reads. - """ - def __init__(self, partial, expected): - super(IncompleteRead, self).__init__(partial, expected) - - def __repr__(self): - return ('IncompleteRead(%i bytes read, ' - '%i more expected)' % (self.partial, self.expected)) - - -class InvalidHeader(HTTPError): - "The header provided was somehow invalid." - pass - - -class ProxySchemeUnknown(AssertionError, ValueError): - "ProxyManager does not support the supplied scheme" - # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. - - def __init__(self, scheme): - message = "Not supported proxy scheme %s" % scheme - super(ProxySchemeUnknown, self).__init__(message) - - -class HeaderParsingError(HTTPError): - "Raised by assert_header_parsing, but we convert it to a log.warning statement." - def __init__(self, defects, unparsed_data): - message = '%s, unparsed data: %r' % (defects or 'Unknown', unparsed_data) - super(HeaderParsingError, self).__init__(message) - - -class UnrewindableBodyError(HTTPError): - "urllib3 encountered an error when trying to rewind a body" - pass diff --git a/pype/vendor/requests/packages/urllib3/fields.py b/pype/vendor/requests/packages/urllib3/fields.py deleted file mode 100644 index 19b0ae0c88..0000000000 --- a/pype/vendor/requests/packages/urllib3/fields.py +++ /dev/null @@ -1,178 +0,0 @@ -from __future__ import absolute_import -import email.utils -import mimetypes - -from .packages import six - - -def guess_content_type(filename, default='application/octet-stream'): - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param(name, value): - """ - Helper function to format and quote a single header parameter. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows RFC 2231, as - suggested by RFC 2388 Section 4.4. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - if not any(ch in value for ch in '"\\\r\n'): - result = '%s="%s"' % (name, value) - try: - result.encode('ascii') - except (UnicodeEncodeError, UnicodeDecodeError): - pass - else: - return result - if not six.PY3 and isinstance(value, six.text_type): # Python 2: - value = value.encode('utf-8') - value = email.utils.encode_rfc2231(value, 'utf-8') - value = '%s*=%s' % (name, value) - return value - - -class RequestField(object): - """ - A data container for request body parameters. - - :param name: - The name of this request field. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. - :param headers: - An optional dict-like object of headers to initially use for the field. - """ - def __init__(self, name, data, filename=None, headers=None): - self._name = name - self._filename = filename - self.data = data - self.headers = {} - if headers: - self.headers = dict(headers) - - @classmethod - def from_tuples(cls, fieldname, value): - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls(fieldname, data, filename=filename) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name, value): - """ - Overridable helper function to format a single header parameter. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - return format_header_param(name, value) - - def _render_parts(self, header_parts): - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) typles or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - parts = [] - iterable = header_parts - if isinstance(header_parts, dict): - iterable = header_parts.items() - - for name, value in iterable: - if value is not None: - parts.append(self._render_part(name, value)) - - return '; '.join(parts) - - def render_headers(self): - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ['Content-Disposition', 'Content-Type', 'Content-Location'] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append('%s: %s' % (sort_key, self.headers[sort_key])) - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append('%s: %s' % (header_name, header_value)) - - lines.append('\r\n') - return '\r\n'.join(lines) - - def make_multipart(self, content_disposition=None, content_type=None, - content_location=None): - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - self.headers['Content-Disposition'] = content_disposition or 'form-data' - self.headers['Content-Disposition'] += '; '.join([ - '', self._render_parts( - (('name', self._name), ('filename', self._filename)) - ) - ]) - self.headers['Content-Type'] = content_type - self.headers['Content-Location'] = content_location diff --git a/pype/vendor/requests/packages/urllib3/filepost.py b/pype/vendor/requests/packages/urllib3/filepost.py deleted file mode 100644 index cd11cee464..0000000000 --- a/pype/vendor/requests/packages/urllib3/filepost.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import absolute_import -import codecs - -from uuid import uuid4 -from io import BytesIO - -from .packages import six -from .packages.six import b -from .fields import RequestField - -writer = codecs.lookup('utf-8')[3] - - -def choose_boundary(): - """ - Our embarrassingly-simple replacement for mimetools.choose_boundary. - """ - return uuid4().hex - - -def iter_field_objects(fields): - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - if isinstance(fields, dict): - i = six.iteritems(fields) - else: - i = iter(fields) - - for field in i: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def iter_fields(fields): - """ - .. deprecated:: 1.6 - - Iterate over fields. - - The addition of :class:`~urllib3.fields.RequestField` makes this function - obsolete. Instead, use :func:`iter_field_objects`, which returns - :class:`~urllib3.fields.RequestField` objects. - - Supports list of (k, v) tuples and dicts. - """ - if isinstance(fields, dict): - return ((k, v) for k, v in six.iteritems(fields)) - - return ((k, v) for k, v in fields) - - -def encode_multipart_formdata(fields, boundary=None): - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`mimetools.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(b('--%s\r\n' % (boundary))) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, six.text_type): - writer(body).write(data) - else: - body.write(data) - - body.write(b'\r\n') - - body.write(b('--%s--\r\n' % (boundary))) - - content_type = str('multipart/form-data; boundary=%s' % boundary) - - return body.getvalue(), content_type diff --git a/pype/vendor/requests/packages/urllib3/packages/__init__.py b/pype/vendor/requests/packages/urllib3/packages/__init__.py deleted file mode 100644 index 170e974c15..0000000000 --- a/pype/vendor/requests/packages/urllib3/packages/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import absolute_import - -from . import ssl_match_hostname - -__all__ = ('ssl_match_hostname', ) diff --git a/pype/vendor/requests/packages/urllib3/packages/backports/__init__.py b/pype/vendor/requests/packages/urllib3/packages/backports/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/pype/vendor/requests/packages/urllib3/packages/backports/makefile.py b/pype/vendor/requests/packages/urllib3/packages/backports/makefile.py deleted file mode 100644 index 75b80dcf84..0000000000 --- a/pype/vendor/requests/packages/urllib3/packages/backports/makefile.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.makefile -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``socket.makefile`` method for use with anything that -wants to create a "fake" socket object. -""" -import io - -from socket import SocketIO - - -def backport_makefile(self, mode="r", buffering=None, encoding=None, - errors=None, newline=None): - """ - Backport of ``socket.makefile`` from Python 3.5. - """ - if not set(mode) <= set(["r", "w", "b"]): - raise ValueError( - "invalid mode %r (only r, w, b allowed)" % (mode,) - ) - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = SocketIO(self, rawmode) - self._makefile_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text diff --git a/pype/vendor/requests/packages/urllib3/packages/ordered_dict.py b/pype/vendor/requests/packages/urllib3/packages/ordered_dict.py deleted file mode 100644 index 4479363cc4..0000000000 --- a/pype/vendor/requests/packages/urllib3/packages/ordered_dict.py +++ /dev/null @@ -1,259 +0,0 @@ -# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. -# Passes Python2.7's test suite and incorporates all the latest updates. -# Copyright 2009 Raymond Hettinger, released under the MIT License. -# http://code.activestate.com/recipes/576693/ -try: - from thread import get_ident as _get_ident -except ImportError: - from dummy_thread import get_ident as _get_ident - -try: - from _abcoll import KeysView, ValuesView, ItemsView -except ImportError: - pass - - -class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args),)) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running={}): - 'od.__repr__() <==> repr(od)' - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) diff --git a/pype/vendor/requests/packages/urllib3/packages/six.py b/pype/vendor/requests/packages/urllib3/packages/six.py deleted file mode 100644 index 190c0239cd..0000000000 --- a/pype/vendor/requests/packages/urllib3/packages/six.py +++ /dev/null @@ -1,868 +0,0 @@ -"""Utilities for writing code that runs on Python 2 and 3""" - -# Copyright (c) 2010-2015 Benjamin Peterson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson " -__version__ = "1.10.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - raise tp, value, tb -""") - - -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - if from_value is None: - raise value - raise value from from_value -""") -elif sys.version_info[:2] > (3, 2): - exec_("""def raise_from(value, from_value): - raise value from from_value -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(meta): - - def __new__(cls, name, this_bases, d): - return meta(name, bases, d) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def python_2_unicode_compatible(klass): - """ - A decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py b/pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py deleted file mode 100644 index d6594eb264..0000000000 --- a/pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -import sys - -try: - # Our match_hostname function is the same as 3.5's, so we only want to - # import the match_hostname function if it's at least that good. - if sys.version_info < (3, 5): - raise ImportError("Fallback to vendored code") - - from ssl import CertificateError, match_hostname -except ImportError: - try: - # Backport of the function from a pypi module - from backports.ssl_match_hostname import CertificateError, match_hostname - except ImportError: - # Our vendored copy - from ._implementation import CertificateError, match_hostname - -# Not needed, but documenting what we provide. -__all__ = ('CertificateError', 'match_hostname') diff --git a/pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py b/pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py deleted file mode 100644 index 1fd42f38ae..0000000000 --- a/pype/vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +++ /dev/null @@ -1,157 +0,0 @@ -"""The match_hostname() function from Python 3.3.3, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html - -import re -import sys - -# ipaddress has been backported to 2.6+ in pypi. If it is installed on the -# system, use it to handle IPAddress ServerAltnames (this was added in -# python-3.5) otherwise only do DNS matching. This allows -# backports.ssl_match_hostname to continue to be used all the way back to -# python-2.4. -try: - import ipaddress -except ImportError: - ipaddress = None - -__version__ = '3.5.0.1' - - -class CertificateError(ValueError): - pass - - -def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r'.') - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - -def _to_unicode(obj): - if isinstance(obj, str) and sys.version_info < (3,): - obj = unicode(obj, encoding='ascii', errors='strict') - return obj - -def _ipaddress_match(ipname, host_ip): - """Exact matching of IP addresses. - - RFC 6125 explicitly doesn't define an algorithm for this - (section 1.7.2 - "Out of Scope"). - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address - # Divergence from upstream: ipaddress can't handle byte str - ip = ipaddress.ip_address(_to_unicode(ipname).rstrip()) - return ip == host_ip - - -def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - try: - # Divergence from upstream: ipaddress can't handle byte str - host_ip = ipaddress.ip_address(_to_unicode(hostname)) - except ValueError: - # Not an IP address (common case) - host_ip = None - except UnicodeError: - # Divergence from upstream: Have to deal with ipaddress not taking - # byte strings. addresses should be all ascii, so we consider it not - # an ipaddress in this case - host_ip = None - except AttributeError: - # Divergence from upstream: Make ipaddress library optional - if ipaddress is None: - host_ip = None - else: - raise - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if host_ip is None and _dnsname_match(value, hostname): - return - dnsnames.append(value) - elif key == 'IP Address': - if host_ip is not None and _ipaddress_match(value, host_ip): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" - % (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" - % (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") diff --git a/pype/vendor/requests/packages/urllib3/poolmanager.py b/pype/vendor/requests/packages/urllib3/poolmanager.py deleted file mode 100644 index 4ae91744db..0000000000 --- a/pype/vendor/requests/packages/urllib3/poolmanager.py +++ /dev/null @@ -1,440 +0,0 @@ -from __future__ import absolute_import -import collections -import functools -import logging - -from ._collections import RecentlyUsedContainer -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from .connectionpool import port_by_scheme -from .exceptions import LocationValueError, MaxRetryError, ProxySchemeUnknown -from .packages.six.moves.urllib.parse import urljoin -from .request import RequestMethods -from .util.url import parse_url -from .util.retry import Retry - - -__all__ = ['PoolManager', 'ProxyManager', 'proxy_from_url'] - - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ('key_file', 'cert_file', 'cert_reqs', 'ca_certs', - 'ssl_version', 'ca_cert_dir', 'ssl_context') - -# All known keyword arguments that could be provided to the pool manager, its -# pools, or the underlying connections. This is used to construct a pool key. -_key_fields = ( - 'key_scheme', # str - 'key_host', # str - 'key_port', # int - 'key_timeout', # int or float or Timeout - 'key_retries', # int or Retry - 'key_strict', # bool - 'key_block', # bool - 'key_source_address', # str - 'key_key_file', # str - 'key_cert_file', # str - 'key_cert_reqs', # str - 'key_ca_certs', # str - 'key_ssl_version', # str - 'key_ca_cert_dir', # str - 'key_ssl_context', # instance of ssl.SSLContext or urllib3.util.ssl_.SSLContext - 'key_maxsize', # int - 'key_headers', # dict - 'key__proxy', # parsed proxy url - 'key__proxy_headers', # dict - 'key_socket_options', # list of (level (int), optname (int), value (int or str)) tuples - 'key__socks_options', # dict - 'key_assert_hostname', # bool or string - 'key_assert_fingerprint', # str -) - -#: The namedtuple class used to construct keys for the connection pool. -#: All custom key schemes should include the fields in this key at a minimum. -PoolKey = collections.namedtuple('PoolKey', _key_fields) - - -def _default_key_normalizer(key_class, request_context): - """ - Create a pool key out of a request context dictionary. - - According to RFC 3986, both the scheme and host are case-insensitive. - Therefore, this function normalizes both before constructing the pool - key for an HTTPS request. If you wish to change this behaviour, provide - alternate callables to ``key_fn_by_scheme``. - - :param key_class: - The class to use when constructing the key. This should be a namedtuple - with the ``scheme`` and ``host`` keys at a minimum. - :type key_class: namedtuple - :param request_context: - A dictionary-like object that contain the context for a request. - :type request_context: dict - - :return: A namedtuple that can be used as a connection pool key. - :rtype: PoolKey - """ - # Since we mutate the dictionary, make a copy first - context = request_context.copy() - context['scheme'] = context['scheme'].lower() - context['host'] = context['host'].lower() - - # These are both dictionaries and need to be transformed into frozensets - for key in ('headers', '_proxy_headers', '_socks_options'): - if key in context and context[key] is not None: - context[key] = frozenset(context[key].items()) - - # The socket_options key may be a list and needs to be transformed into a - # tuple. - socket_opts = context.get('socket_options') - if socket_opts is not None: - context['socket_options'] = tuple(socket_opts) - - # Map the kwargs to the names in the namedtuple - this is necessary since - # namedtuples can't have fields starting with '_'. - for key in list(context.keys()): - context['key_' + key] = context.pop(key) - - # Default to ``None`` for keys missing from the context - for field in key_class._fields: - if field not in context: - context[field] = None - - return key_class(**context) - - -#: A dictionary that maps a scheme to a callable that creates a pool key. -#: This can be used to alter the way pool keys are constructed, if desired. -#: Each PoolManager makes a copy of this dictionary so they can be configured -#: globally here, or individually on the instance. -key_fn_by_scheme = { - 'http': functools.partial(_default_key_normalizer, PoolKey), - 'https': functools.partial(_default_key_normalizer, PoolKey), -} - -pool_classes_by_scheme = { - 'http': HTTPConnectionPool, - 'https': HTTPSConnectionPool, -} - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \\**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example:: - - >>> manager = PoolManager(num_pools=2) - >>> r = manager.request('GET', 'http://google.com/') - >>> r = manager.request('GET', 'http://google.com/mail') - >>> r = manager.request('GET', 'http://yahoo.com/') - >>> len(manager.pools) - 2 - - """ - - proxy = None - - def __init__(self, num_pools=10, headers=None, **connection_pool_kw): - RequestMethods.__init__(self, headers) - self.connection_pool_kw = connection_pool_kw - self.pools = RecentlyUsedContainer(num_pools, - dispose_func=lambda p: p.close()) - - # Locally set the pool classes and keys so other PoolManagers can - # override them. - self.pool_classes_by_scheme = pool_classes_by_scheme - self.key_fn_by_scheme = key_fn_by_scheme.copy() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool(self, scheme, host, port, request_context=None): - """ - Create a new :class:`ConnectionPool` based on host, port, scheme, and - any additional pool keyword arguments. - - If ``request_context`` is provided, it is provided as keyword arguments - to the pool class used. This method is used to actually create the - connection pools handed out by :meth:`connection_from_url` and - companion methods. It is intended to be overridden for customization. - """ - pool_cls = self.pool_classes_by_scheme[scheme] - if request_context is None: - request_context = self.connection_pool_kw.copy() - - # Although the context has everything necessary to create the pool, - # this function has historically only used the scheme, host, and port - # in the positional args. When an API change is acceptable these can - # be removed. - for key in ('scheme', 'host', 'port'): - request_context.pop(key, None) - - if scheme == 'http': - for kw in SSL_KEYWORDS: - request_context.pop(kw, None) - - return pool_cls(host, port, **request_context) - - def clear(self): - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host(self, host, port=None, scheme='http', pool_kwargs=None): - """ - Get a :class:`ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is - provided, it is merged with the instance's ``connection_pool_kw`` - variable and used to create the new connection pool, if one is - needed. - """ - - if not host: - raise LocationValueError("No host specified.") - - request_context = self._merge_pool_kwargs(pool_kwargs) - request_context['scheme'] = scheme or 'http' - if not port: - port = port_by_scheme.get(request_context['scheme'].lower(), 80) - request_context['port'] = port - request_context['host'] = host - - return self.connection_from_context(request_context) - - def connection_from_context(self, request_context): - """ - Get a :class:`ConnectionPool` based on the request context. - - ``request_context`` must at least contain the ``scheme`` key and its - value must be a key in ``key_fn_by_scheme`` instance variable. - """ - scheme = request_context['scheme'].lower() - pool_key_constructor = self.key_fn_by_scheme[scheme] - pool_key = pool_key_constructor(request_context) - - return self.connection_from_pool_key(pool_key, request_context=request_context) - - def connection_from_pool_key(self, pool_key, request_context=None): - """ - Get a :class:`ConnectionPool` based on the provided pool key. - - ``pool_key`` should be a namedtuple that only contains immutable - objects. At a minimum it must have the ``scheme``, ``host``, and - ``port`` fields. - """ - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - scheme = request_context['scheme'] - host = request_context['host'] - port = request_context['port'] - pool = self._new_pool(scheme, host, port, request_context=request_context) - self.pools[pool_key] = pool - - return pool - - def connection_from_url(self, url, pool_kwargs=None): - """ - Similar to :func:`urllib3.connectionpool.connection_from_url`. - - If ``pool_kwargs`` is not provided and a new pool needs to be - constructed, ``self.connection_pool_kw`` is used to initialize - the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` - is provided, it is used instead. Note that if a new pool does not - need to be created for the request, the provided ``pool_kwargs`` are - not used. - """ - u = parse_url(url) - return self.connection_from_host(u.host, port=u.port, scheme=u.scheme, - pool_kwargs=pool_kwargs) - - def _merge_pool_kwargs(self, override): - """ - Merge a dictionary of override values for self.connection_pool_kw. - - This does not modify self.connection_pool_kw and returns a new dict. - Any keys in the override dictionary with a value of ``None`` are - removed from the merged dictionary. - """ - base_pool_kwargs = self.connection_pool_kw.copy() - if override: - for key, value in override.items(): - if value is None: - try: - del base_pool_kwargs[key] - except KeyError: - pass - else: - base_pool_kwargs[key] = value - return base_pool_kwargs - - def urlopen(self, method, url, redirect=True, **kw): - """ - Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw['assert_same_host'] = False - kw['redirect'] = False - if 'headers' not in kw: - kw['headers'] = self.headers - - if self.proxy is not None and u.scheme == "http": - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - # RFC 7231, Section 6.4.4 - if response.status == 303: - method = 'GET' - - retries = kw.get('retries') - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - raise - return response - - kw['retries'] = retries - kw['redirect'] = redirect - - log.info("Redirecting %s -> %s", url, redirect_location) - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary contaning headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - Example: - >>> proxy = urllib3.ProxyManager('http://localhost:3128/') - >>> r1 = proxy.request('GET', 'http://google.com/') - >>> r2 = proxy.request('GET', 'http://httpbin.org/') - >>> len(proxy.pools) - 1 - >>> r3 = proxy.request('GET', 'https://httpbin.org/') - >>> r4 = proxy.request('GET', 'https://twitter.com/') - >>> len(proxy.pools) - 3 - - """ - - def __init__(self, proxy_url, num_pools=10, headers=None, - proxy_headers=None, **connection_pool_kw): - - if isinstance(proxy_url, HTTPConnectionPool): - proxy_url = '%s://%s:%i' % (proxy_url.scheme, proxy_url.host, - proxy_url.port) - proxy = parse_url(proxy_url) - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - if proxy.scheme not in ("http", "https"): - raise ProxySchemeUnknown(proxy.scheme) - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - - connection_pool_kw['_proxy'] = self.proxy - connection_pool_kw['_proxy_headers'] = self.proxy_headers - - super(ProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw) - - def connection_from_host(self, host, port=None, scheme='http', pool_kwargs=None): - if scheme == "https": - return super(ProxyManager, self).connection_from_host( - host, port, scheme, pool_kwargs=pool_kwargs) - - return super(ProxyManager, self).connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs) - - def _set_proxy_headers(self, url, headers=None): - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {'Accept': '*/*'} - - netloc = parse_url(url).netloc - if netloc: - headers_['Host'] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen(self, method, url, redirect=True, **kw): - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - - if u.scheme == "http": - # For proxied HTTPS requests, httplib sets the necessary headers - # on the CONNECT to the proxy. For HTTP, we'll definitely - # need to set 'Host' at the very least. - headers = kw.get('headers', self.headers) - kw['headers'] = self._set_proxy_headers(url, headers) - - return super(ProxyManager, self).urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url, **kw): - return ProxyManager(proxy_url=url, **kw) diff --git a/pype/vendor/requests/packages/urllib3/request.py b/pype/vendor/requests/packages/urllib3/request.py deleted file mode 100644 index c0fddff042..0000000000 --- a/pype/vendor/requests/packages/urllib3/request.py +++ /dev/null @@ -1,148 +0,0 @@ -from __future__ import absolute_import - -from .filepost import encode_multipart_formdata -from .packages.six.moves.urllib.parse import urlencode - - -__all__ = ['RequestMethods'] - - -class RequestMethods(object): - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`~urllib3.connectionpool.HTTPConnectionPool` and - :class:`~urllib3.poolmanager.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = set(['DELETE', 'GET', 'HEAD', 'OPTIONS']) - - def __init__(self, headers=None): - self.headers = headers or {} - - def urlopen(self, method, url, body=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **kw): # Abstract - raise NotImplemented("Classes extending RequestMethods must implement " - "their own ``urlopen`` method.") - - def request(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - """ - method = method.upper() - - if method in self._encode_url_methods: - return self.request_encode_url(method, url, fields=fields, - headers=headers, - **urlopen_kw) - else: - return self.request_encode_body(method, url, fields=fields, - headers=headers, - **urlopen_kw) - - def request_encode_url(self, method, url, fields=None, headers=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': headers} - extra_kw.update(urlopen_kw) - - if fields: - url += '?' + urlencode(fields) - - return self.urlopen(method, url, **extra_kw) - - def request_encode_body(self, method, url, fields=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :meth:`urllib.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimick behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': {}} - - if fields: - if 'body' in urlopen_kw: - raise TypeError( - "request got values for both 'fields' and 'body', can only specify one.") - - if encode_multipart: - body, content_type = encode_multipart_formdata(fields, boundary=multipart_boundary) - else: - body, content_type = urlencode(fields), 'application/x-www-form-urlencoded' - - extra_kw['body'] = body - extra_kw['headers'] = {'Content-Type': content_type} - - extra_kw['headers'].update(headers) - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) diff --git a/pype/vendor/requests/packages/urllib3/response.py b/pype/vendor/requests/packages/urllib3/response.py deleted file mode 100644 index 408d9996a5..0000000000 --- a/pype/vendor/requests/packages/urllib3/response.py +++ /dev/null @@ -1,622 +0,0 @@ -from __future__ import absolute_import -from contextlib import contextmanager -import zlib -import io -import logging -from socket import timeout as SocketTimeout -from socket import error as SocketError - -from ._collections import HTTPHeaderDict -from .exceptions import ( - BodyNotHttplibCompatible, ProtocolError, DecodeError, ReadTimeoutError, - ResponseNotChunked, IncompleteRead, InvalidHeader -) -from .packages.six import string_types as basestring, binary_type, PY3 -from .packages.six.moves import http_client as httplib -from .connection import HTTPException, BaseSSLError -from .util.response import is_fp_closed, is_response_to_head - -log = logging.getLogger(__name__) - - -class DeflateDecoder(object): - - def __init__(self): - self._first_try = True - self._data = binary_type() - self._obj = zlib.decompressobj() - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - - if not self._first_try: - return self._obj.decompress(data) - - self._data += data - try: - decompressed = self._obj.decompress(data) - if decompressed: - self._first_try = False - self._data = None - return decompressed - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress(self._data) - finally: - self._data = None - - -class GzipDecoder(object): - - def __init__(self): - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - return self._obj.decompress(data) - - -def _get_decoder(mode): - if mode == 'gzip': - return GzipDecoder() - - return DeflateDecoder() - - -class HTTPResponse(io.IOBase): - """ - HTTP Response container. - - Backwards-compatible to httplib's HTTPResponse but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in httplib.HTTPResponse: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, attempts to decode specific content-encoding's based on headers - (like 'gzip' and 'deflate') will be skipped and raw data will be used - instead. - - :param original_response: - When this HTTPResponse wrapper is generated from an httplib.HTTPResponse - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - - :param retries: - The retries contains the last :class:`~urllib3.util.retry.Retry` that - was used during the request. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - - CONTENT_DECODERS = ['gzip', 'deflate'] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - def __init__(self, body='', headers=None, status=0, version=0, reason=None, - strict=0, preload_content=True, decode_content=True, - original_response=None, pool=None, connection=None, - retries=None, enforce_content_length=False, request_method=None): - - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) - self.status = status - self.version = version - self.reason = reason - self.strict = strict - self.decode_content = decode_content - self.retries = retries - self.enforce_content_length = enforce_content_length - - self._decoder = None - self._body = None - self._fp = None - self._original_response = original_response - self._fp_bytes_read = 0 - - if body and isinstance(body, (basestring, binary_type)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, 'read'): - self._fp = body - - # Are we using the chunked-style of transfer encoding? - self.chunked = False - self.chunk_left = None - tr_enc = self.headers.get('transfer-encoding', '').lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - # Determine length of response - self.length_remaining = self._init_length(request_method) - - # If requested, preload the body. - if preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def get_redirect_location(self): - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get('location') - - return False - - def release_conn(self): - if not self._pool or not self._connection: - return - - self._pool._put_conn(self._connection) - self._connection = None - - @property - def data(self): - # For backwords-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body - - if self._fp: - return self.read(cache_content=True) - - @property - def connection(self): - return self._connection - - def tell(self): - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``HTTPResponse.read`` if bytes - are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_length(self, request_method): - """ - Set initial length value for Response content if available. - """ - length = self.headers.get('content-length') - - if length is not None and self.chunked: - # This Response will fail with an IncompleteRead if it can't be - # received as chunked. This method falls back to attempt reading - # the response before raising an exception. - log.warning("Received response with both Content-Length and " - "Transfer-Encoding set. This is expressly forbidden " - "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " - "attempting to process response as Transfer-Encoding: " - "chunked.") - return None - - elif length is not None: - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = set([int(val) for val in length.split(',')]) - if len(lengths) > 1: - raise InvalidHeader("Content-Length contained multiple " - "unmatching values (%s)" % length) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - # Convert status to int for comparison - # In some cases, httplib returns a status of "_UNKNOWN" - try: - status = int(self.status) - except ValueError: - status = 0 - - # Check for responses that shouldn't include a body - if status in (204, 304) or 100 <= status < 200 or request_method == 'HEAD': - length = 0 - - return length - - def _init_decoder(self): - """ - Set-up the _decoder attribute if necessary. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get('content-encoding', '').lower() - if self._decoder is None and content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - - def _decode(self, data, decode_content, flush_decoder): - """ - Decode the data passed in and potentially flush the decoder. - """ - try: - if decode_content and self._decoder: - data = self._decoder.decompress(data) - except (IOError, zlib.error) as e: - content_encoding = self.headers.get('content-encoding', '').lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, e) - - if flush_decoder and decode_content: - data += self._flush_decoder() - - return data - - def _flush_decoder(self): - """ - Flushes the decoder. Should only be called if the decoder is actually - being used. - """ - if self._decoder: - buf = self._decoder.decompress(b'') - return buf + self._decoder.flush() - - return b'' - - @contextmanager - def _error_catcher(self): - """ - Catch low-level python exceptions, instead re-raising urllib3 - variants, so that low-level exceptions are not leaked in the - high-level api. - - On exit, release the connection back to the pool. - """ - clean_exit = False - - try: - try: - yield - - except SocketTimeout: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if 'read operation timed out' not in str(e): # Defensive: - # This shouldn't happen but just in case we're missing an edge - # case, let's avoid swallowing SSL errors. - raise - - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except (HTTPException, SocketError) as e: - # This includes IncompleteRead. - raise ProtocolError('Connection broken: %r' % e, e) - - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now to ensure that the connection is - # released back to the pool. - if self._original_response: - self._original_response.close() - - # Closing the response may not actually be sufficient to close - # everything, so if we have a hold of the connection close that - # too. - if self._connection: - self._connection.close() - - # If we hold the original response but it's closed now, we should - # return the connection back to the pool. - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def read(self, amt=None, decode_content=None, cache_content=False): - """ - Similar to :meth:`httplib.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if self._fp is None: - return - - flush_decoder = False - data = None - - with self._error_catcher(): - if amt is None: - # cStringIO doesn't like amt=None - data = self._fp.read() - flush_decoder = True - else: - cache_content = False - data = self._fp.read(amt) - if amt != 0 and not data: # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - flush_decoder = True - if self.enforce_content_length and self.length_remaining not in (0, None): - # This is an edge case that httplib failed to cover due - # to concerns of backward compatibility. We're - # addressing it here to make sure IncompleteRead is - # raised during streaming, so all calls with incorrect - # Content-Length are caught. - raise IncompleteRead(self._fp_bytes_read, self.length_remaining) - - if data: - self._fp_bytes_read += len(data) - if self.length_remaining is not None: - self.length_remaining -= len(data) - - data = self._decode(data, decode_content, flush_decoder) - - if cache_content: - self._body = data - - return data - - def stream(self, amt=2**16, decode_content=None): - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked and self.supports_chunked_reads(): - for line in self.read_chunked(amt, decode_content=decode_content): - yield line - else: - while not is_fp_closed(self._fp): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - @classmethod - def from_httplib(ResponseCls, r, **response_kw): - """ - Given an :class:`httplib.HTTPResponse` instance ``r``, return a - corresponding :class:`urllib3.response.HTTPResponse` object. - - Remaining parameters are passed to the HTTPResponse constructor, along - with ``original_response=r``. - """ - headers = r.msg - - if not isinstance(headers, HTTPHeaderDict): - if PY3: # Python 3 - headers = HTTPHeaderDict(headers.items()) - else: # Python 2 - headers = HTTPHeaderDict.from_httplib(headers) - - # HTTPResponse objects in Python 3 don't have a .strict attribute - strict = getattr(r, 'strict', 0) - resp = ResponseCls(body=r, - headers=headers, - status=r.status, - version=r.version, - reason=r.reason, - strict=strict, - original_response=r, - **response_kw) - return resp - - # Backwards-compatibility methods for httplib.HTTPResponse - def getheaders(self): - return self.headers - - def getheader(self, name, default=None): - return self.headers.get(name, default) - - # Overrides from io.IOBase - def close(self): - if not self.closed: - self._fp.close() - - if self._connection: - self._connection.close() - - @property - def closed(self): - if self._fp is None: - return True - elif hasattr(self._fp, 'isclosed'): - return self._fp.isclosed() - elif hasattr(self._fp, 'closed'): - return self._fp.closed - else: - return True - - def fileno(self): - if self._fp is None: - raise IOError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise IOError("The file-like object this HTTPResponse is wrapped " - "around has no file descriptor") - - def flush(self): - if self._fp is not None and hasattr(self._fp, 'flush'): - return self._fp.flush() - - def readable(self): - # This method is required for `io` module compatibility. - return True - - def readinto(self, b): - # This method is required for `io` module compatibility. - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[:len(temp)] = temp - return len(temp) - - def supports_chunked_reads(self): - """ - Checks if the underlying file-like object looks like a - httplib.HTTPResponse object. We do this by testing for the fp - attribute. If it is present we assume it returns raw chunks as - processed by read_chunked(). - """ - return hasattr(self._fp, 'fp') - - def _update_chunk_length(self): - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return - line = self._fp.fp.readline() - line = line.split(b';', 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - # Invalid chunked protocol response, abort. - self.close() - raise httplib.IncompleteRead(line) - - def _handle_chunk(self, amt): - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) - returned_chunk = chunk - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif amt < self.chunk_left: - value = self._fp._safe_read(amt) - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk - - def read_chunked(self, amt=None, decode_content=None): - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked( - "Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing.") - if not self.supports_chunked_reads(): - raise BodyNotHttplibCompatible( - "Body should be httplib.HTTPResponse like. " - "It should have have an fp attribute which returns raw chunks.") - - # Don't bother reading the body of a HEAD request. - if self._original_response and is_response_to_head(self._original_response): - self._original_response.close() - return - - with self._error_catcher(): - while True: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - decoded = self._decode(chunk, decode_content=decode_content, - flush_decoder=False) - if decoded: - yield decoded - - if decode_content: - # On CPython and PyPy, we should never need to flush the - # decoder. However, on Jython we *might* need to, so - # lets defensively do it anyway. - decoded = self._flush_decoder() - if decoded: # Platform-specific: Jython. - yield decoded - - # Chunk content ends with \r\n: discard it. - while True: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b'\r\n': - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() diff --git a/pype/vendor/requests/packages/urllib3/util/__init__.py b/pype/vendor/requests/packages/urllib3/util/__init__.py deleted file mode 100644 index 2f2770b622..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import absolute_import -# For backwards compatibility, provide imports that used to be here. -from .connection import is_connection_dropped -from .request import make_headers -from .response import is_fp_closed -from .ssl_ import ( - SSLContext, - HAS_SNI, - IS_PYOPENSSL, - IS_SECURETRANSPORT, - assert_fingerprint, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import ( - current_time, - Timeout, -) - -from .retry import Retry -from .url import ( - get_host, - parse_url, - split_first, - Url, -) -from .wait import ( - wait_for_read, - wait_for_write -) - -__all__ = ( - 'HAS_SNI', - 'IS_PYOPENSSL', - 'IS_SECURETRANSPORT', - 'SSLContext', - 'Retry', - 'Timeout', - 'Url', - 'assert_fingerprint', - 'current_time', - 'is_connection_dropped', - 'is_fp_closed', - 'get_host', - 'parse_url', - 'make_headers', - 'resolve_cert_reqs', - 'resolve_ssl_version', - 'split_first', - 'ssl_wrap_socket', - 'wait_for_read', - 'wait_for_write' -) diff --git a/pype/vendor/requests/packages/urllib3/util/connection.py b/pype/vendor/requests/packages/urllib3/util/connection.py deleted file mode 100644 index bf699cfd0e..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/connection.py +++ /dev/null @@ -1,130 +0,0 @@ -from __future__ import absolute_import -import socket -from .wait import wait_for_read -from .selectors import HAS_SELECT, SelectorError - - -def is_connection_dropped(conn): # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - - :param conn: - :class:`httplib.HTTPConnection` object. - - Note: For platforms like AppEngine, this will always return ``False`` to - let the platform handle connection recycling transparently for us. - """ - sock = getattr(conn, 'sock', False) - if sock is False: # Platform-specific: AppEngine - return False - if sock is None: # Connection already closed (such as by httplib). - return True - - if not HAS_SELECT: - return False - - try: - return bool(wait_for_read(sock, timeout=0.0)) - except SelectorError: - return True - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -# One additional modification is that we avoid binding to IPv6 servers -# discovered in DNS if the system doesn't have IPv6 functionality. -def create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, socket_options=None): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - if host.startswith('['): - host = host.strip('[]') - err = None - - # Using the value from allowed_gai_family() in the context of getaddrinfo lets - # us select whether to work with IPv4 DNS records, IPv6 records, or both. - # The original create_connection function always returns all records. - family = allowed_gai_family() - - for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - _set_socket_options(sock, socket_options) - - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error as e: - err = e - if sock is not None: - sock.close() - sock = None - - if err is not None: - raise err - - raise socket.error("getaddrinfo returns an empty list") - - -def _set_socket_options(sock, options): - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) - - -def allowed_gai_family(): - """This function is designed to work in the context of - getaddrinfo, where family=socket.AF_UNSPEC is the default and - will perform a DNS search for both IPv6 and IPv4 records.""" - - family = socket.AF_INET - if HAS_IPV6: - family = socket.AF_UNSPEC - return family - - -def _has_ipv6(host): - """ Returns True if the system can bind an IPv6 address. """ - sock = None - has_ipv6 = False - - if socket.has_ipv6: - # has_ipv6 returns true if cPython was compiled with IPv6 support. - # It does not tell us if the system has IPv6 support enabled. To - # determine that we must bind to an IPv6 address. - # https://github.com/shazow/urllib3/pull/611 - # https://bugs.python.org/issue658327 - try: - sock = socket.socket(socket.AF_INET6) - sock.bind((host, 0)) - has_ipv6 = True - except Exception: - pass - - if sock: - sock.close() - return has_ipv6 - - -HAS_IPV6 = _has_ipv6('::1') diff --git a/pype/vendor/requests/packages/urllib3/util/request.py b/pype/vendor/requests/packages/urllib3/util/request.py deleted file mode 100644 index 3ddfcd5594..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/request.py +++ /dev/null @@ -1,118 +0,0 @@ -from __future__ import absolute_import -from base64 import b64encode - -from ..packages.six import b, integer_types -from ..exceptions import UnrewindableBodyError - -ACCEPT_ENCODING = 'gzip,deflate' -_FAILEDTELL = object() - - -def make_headers(keep_alive=None, accept_encoding=None, user_agent=None, - basic_auth=None, proxy_basic_auth=None, disable_cache=None): - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example:: - - >>> make_headers(keep_alive=True, user_agent="Batman/1.0") - {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - >>> make_headers(accept_encoding=True) - {'accept-encoding': 'gzip,deflate'} - """ - headers = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ','.join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers['accept-encoding'] = accept_encoding - - if user_agent: - headers['user-agent'] = user_agent - - if keep_alive: - headers['connection'] = 'keep-alive' - - if basic_auth: - headers['authorization'] = 'Basic ' + \ - b64encode(b(basic_auth)).decode('utf-8') - - if proxy_basic_auth: - headers['proxy-authorization'] = 'Basic ' + \ - b64encode(b(proxy_basic_auth)).decode('utf-8') - - if disable_cache: - headers['cache-control'] = 'no-cache' - - return headers - - -def set_file_position(body, pos): - """ - If a position is provided, move file to that point. - Otherwise, we'll attempt to record a position for future use. - """ - if pos is not None: - rewind_body(body, pos) - elif getattr(body, 'tell', None) is not None: - try: - pos = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body. - pos = _FAILEDTELL - - return pos - - -def rewind_body(body, body_pos): - """ - Attempt to rewind body to a certain position. - Primarily used for request redirects and retries. - - :param body: - File-like object that supports seek. - - :param int pos: - Position to seek to in file. - """ - body_seek = getattr(body, 'seek', None) - if body_seek is not None and isinstance(body_pos, integer_types): - try: - body_seek(body_pos) - except (IOError, OSError): - raise UnrewindableBodyError("An error occurred when rewinding request " - "body for redirect/retry.") - elif body_pos is _FAILEDTELL: - raise UnrewindableBodyError("Unable to record file position for rewinding " - "request body during a redirect/retry.") - else: - raise ValueError("body_pos must be of type integer, " - "instead it was %s." % type(body_pos)) diff --git a/pype/vendor/requests/packages/urllib3/util/response.py b/pype/vendor/requests/packages/urllib3/util/response.py deleted file mode 100644 index 67cf730ab0..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/response.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import absolute_import -from ..packages.six.moves import http_client as httplib - -from ..exceptions import HeaderParsingError - - -def is_fp_closed(obj): - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check `isclosed()` first, in case Python3 doesn't set `closed`. - # GH Issue #928 - return obj.isclosed() - except AttributeError: - pass - - try: - # Check via the official file-like-object way. - return obj.closed - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") - - -def assert_header_parsing(headers): - """ - Asserts whether all headers have been successfully parsed. - Extracts encountered errors from the result of parsing headers. - - Only works on Python 3. - - :param headers: Headers to verify. - :type headers: `httplib.HTTPMessage`. - - :raises urllib3.exceptions.HeaderParsingError: - If parsing errors are found. - """ - - # This will fail silently if we pass in the wrong kind of parameter. - # To make debugging easier add an explicit check. - if not isinstance(headers, httplib.HTTPMessage): - raise TypeError('expected httplib.Message, got {0}.'.format( - type(headers))) - - defects = getattr(headers, 'defects', None) - get_payload = getattr(headers, 'get_payload', None) - - unparsed_data = None - if get_payload: # Platform-specific: Python 3. - unparsed_data = get_payload() - - if defects or unparsed_data: - raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) - - -def is_response_to_head(response): - """ - Checks whether the request of a response has been a HEAD-request. - Handles the quirks of AppEngine. - - :param conn: - :type conn: :class:`httplib.HTTPResponse` - """ - # FIXME: Can we do this somehow without accessing private httplib _method? - method = response._method - if isinstance(method, int): # Platform-specific: Appengine - return method == 3 - return method.upper() == 'HEAD' diff --git a/pype/vendor/requests/packages/urllib3/util/retry.py b/pype/vendor/requests/packages/urllib3/util/retry.py deleted file mode 100644 index c603cb4904..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/retry.py +++ /dev/null @@ -1,401 +0,0 @@ -from __future__ import absolute_import -import time -import logging -from collections import namedtuple -from itertools import takewhile -import email -import re - -from ..exceptions import ( - ConnectTimeoutError, - MaxRetryError, - ProtocolError, - ReadTimeoutError, - ResponseError, - InvalidHeader, -) -from ..packages import six - - -log = logging.getLogger(__name__) - -# Data structure for representing the metadata of requests that result in a retry. -RequestHistory = namedtuple('RequestHistory', ["method", "url", "error", - "status", "redirect_location"]) - - -class Retry(object): - """ Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool:: - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', retries=Retry(10)) - - Retries can be disabled by passing ``False``:: - - response = http.request('GET', 'http://example.com/', retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. It's a good idea to set this to some sensibly-high value to - account for unexpected edge cases and avoid infinite retry loops. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int status: - How many times to retry on bad status codes. - - These are retries made on responses, where status code matches - ``status_forcelist``. - - Set to ``0`` to fail on the first retry of this type. - - :param iterable method_whitelist: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - idempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_METHOD_WHITELIST`. - - Set to a ``False`` value to retry on any verb. - - :param iterable status_forcelist: - A set of integer HTTP status codes that we should force a retry on. - A retry is initiated if the request method is in ``method_whitelist`` - and the response status code is in ``status_forcelist``. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts after the second try - (most errors are resolved immediately by a second try without a - delay). urllib3 will sleep for:: - - {backoff factor} * (2 ^ ({number of total retries} - 1)) - - seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep - for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer - than :attr:`Retry.BACKOFF_MAX`. - - By default, backoff is disabled (set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - - :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: - whether we should raise an exception, or return a response, - if status falls in ``status_forcelist`` range and retries have - been exhausted. - - :param tuple history: The history of the request encountered during - each call to :meth:`~Retry.increment`. The list is in the order - the requests occurred. Each list item is of class :class:`RequestHistory`. - - :param bool respect_retry_after_header: - Whether to respect Retry-After header on status codes defined as - :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. - - """ - - DEFAULT_METHOD_WHITELIST = frozenset([ - 'HEAD', 'GET', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']) - - RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) - - #: Maximum backoff time. - BACKOFF_MAX = 120 - - def __init__(self, total=10, connect=None, read=None, redirect=None, status=None, - method_whitelist=DEFAULT_METHOD_WHITELIST, status_forcelist=None, - backoff_factor=0, raise_on_redirect=True, raise_on_status=True, - history=None, respect_retry_after_header=True): - - self.total = total - self.connect = connect - self.read = read - self.status = status - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.method_whitelist = method_whitelist - self.backoff_factor = backoff_factor - self.raise_on_redirect = raise_on_redirect - self.raise_on_status = raise_on_status - self.history = history or tuple() - self.respect_retry_after_header = respect_retry_after_header - - def new(self, **kw): - params = dict( - total=self.total, - connect=self.connect, read=self.read, redirect=self.redirect, status=self.status, - method_whitelist=self.method_whitelist, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - raise_on_redirect=self.raise_on_redirect, - raise_on_status=self.raise_on_status, - history=self.history, - ) - params.update(kw) - return type(self)(**params) - - @classmethod - def from_int(cls, retries, redirect=True, default=None): - """ Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r", retries, new_retries) - return new_retries - - def get_backoff_time(self): - """ Formula for computing the current backoff - - :rtype: float - """ - # We want to consider only the last consecutive errors sequence (Ignore redirects). - consecutive_errors_len = len(list(takewhile(lambda x: x.redirect_location is None, - reversed(self.history)))) - if consecutive_errors_len <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) - return min(self.BACKOFF_MAX, backoff_value) - - def parse_retry_after(self, retry_after): - # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 - if re.match(r"^\s*[0-9]+\s*$", retry_after): - seconds = int(retry_after) - else: - retry_date_tuple = email.utils.parsedate(retry_after) - if retry_date_tuple is None: - raise InvalidHeader("Invalid Retry-After header: %s" % retry_after) - retry_date = time.mktime(retry_date_tuple) - seconds = retry_date - time.time() - - if seconds < 0: - seconds = 0 - - return seconds - - def get_retry_after(self, response): - """ Get the value of Retry-After in seconds. """ - - retry_after = response.getheader("Retry-After") - - if retry_after is None: - return None - - return self.parse_retry_after(retry_after) - - def sleep_for_retry(self, response=None): - retry_after = self.get_retry_after(response) - if retry_after: - time.sleep(retry_after) - return True - - return False - - def _sleep_backoff(self): - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def sleep(self, response=None): - """ Sleep between retry attempts. - - This method will respect a server's ``Retry-After`` response header - and sleep the duration of the time requested. If that is not present, it - will use an exponential backoff. By default, the backoff factor is 0 and - this method will return immediately. - """ - - if response: - slept = self.sleep_for_retry(response) - if slept: - return - - self._sleep_backoff() - - def _is_connection_error(self, err): - """ Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err): - """ Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def _is_method_retryable(self, method): - """ Checks if a given HTTP method should be retried upon, depending if - it is included on the method whitelist. - """ - if self.method_whitelist and method.upper() not in self.method_whitelist: - return False - - return True - - def is_retry(self, method, status_code, has_retry_after=False): - """ Is this method/status code retryable? (Based on whitelists and control - variables such as the number of total retries to allow, whether to - respect the Retry-After header, whether this header is present, and - whether the returned status code is on the list of status codes to - be retried upon on the presence of the aforementioned header) - """ - if not self._is_method_retryable(method): - return False - - if self.status_forcelist and status_code in self.status_forcelist: - return True - - return (self.total and self.respect_retry_after_header and - has_retry_after and (status_code in self.RETRY_AFTER_STATUS_CODES)) - - def is_exhausted(self): - """ Are we out of retries? """ - retry_counts = (self.total, self.connect, self.read, self.redirect, self.status) - retry_counts = list(filter(None, retry_counts)) - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment(self, method=None, url=None, response=None, error=None, - _pool=None, _stacktrace=None): - """ Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.HTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise six.reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - connect = self.connect - read = self.read - redirect = self.redirect - status_count = self.status - cause = 'unknown' - status = None - redirect_location = None - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise six.reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False or not self._is_method_retryable(method): - raise six.reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = 'too many redirects' - redirect_location = response.get_redirect_location() - status = response.status - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and a the given method is in the whitelist - cause = ResponseError.GENERIC_ERROR - if response and response.status: - if status_count is not None: - status_count -= 1 - cause = ResponseError.SPECIFIC_ERROR.format( - status_code=response.status) - status = response.status - - history = self.history + (RequestHistory(method, url, error, status, redirect_location),) - - new_retry = self.new( - total=total, - connect=connect, read=read, redirect=redirect, status=status_count, - history=history) - - if new_retry.is_exhausted(): - raise MaxRetryError(_pool, url, error or ResponseError(cause)) - - log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) - - return new_retry - - def __repr__(self): - return ('{cls.__name__}(total={self.total}, connect={self.connect}, ' - 'read={self.read}, redirect={self.redirect}, status={self.status})').format( - cls=type(self), self=self) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/pype/vendor/requests/packages/urllib3/util/selectors.py b/pype/vendor/requests/packages/urllib3/util/selectors.py deleted file mode 100644 index d75cb266bc..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/selectors.py +++ /dev/null @@ -1,581 +0,0 @@ -# Backport of selectors.py from Python 3.5+ to support Python < 3.4 -# Also has the behavior specified in PEP 475 which is to retry syscalls -# in the case of an EINTR error. This module is required because selectors34 -# does not follow this behavior and instead returns that no dile descriptor -# events have occurred rather than retry the syscall. The decision to drop -# support for select.devpoll is made to maintain 100% test coverage. - -import errno -import math -import select -import socket -import sys -import time -from collections import namedtuple, Mapping - -try: - monotonic = time.monotonic -except (AttributeError, ImportError): # Python 3.3< - monotonic = time.time - -EVENT_READ = (1 << 0) -EVENT_WRITE = (1 << 1) - -HAS_SELECT = True # Variable that shows whether the platform has a selector. -_SYSCALL_SENTINEL = object() # Sentinel in case a system call returns None. -_DEFAULT_SELECTOR = None - - -class SelectorError(Exception): - def __init__(self, errcode): - super(SelectorError, self).__init__() - self.errno = errcode - - def __repr__(self): - return "".format(self.errno) - - def __str__(self): - return self.__repr__() - - -def _fileobj_to_fd(fileobj): - """ Return a file descriptor from a file object. If - given an integer will simply return that integer back. """ - if isinstance(fileobj, int): - fd = fileobj - else: - try: - fd = int(fileobj.fileno()) - except (AttributeError, TypeError, ValueError): - raise ValueError("Invalid file object: {0!r}".format(fileobj)) - if fd < 0: - raise ValueError("Invalid file descriptor: {0}".format(fd)) - return fd - - -# Determine which function to use to wrap system calls because Python 3.5+ -# already handles the case when system calls are interrupted. -if sys.version_info >= (3, 5): - def _syscall_wrapper(func, _, *args, **kwargs): - """ This is the short-circuit version of the below logic - because in Python 3.5+ all system calls automatically restart - and recalculate their timeouts. """ - try: - return func(*args, **kwargs) - except (OSError, IOError, select.error) as e: - errcode = None - if hasattr(e, "errno"): - errcode = e.errno - raise SelectorError(errcode) -else: - def _syscall_wrapper(func, recalc_timeout, *args, **kwargs): - """ Wrapper function for syscalls that could fail due to EINTR. - All functions should be retried if there is time left in the timeout - in accordance with PEP 475. """ - timeout = kwargs.get("timeout", None) - if timeout is None: - expires = None - recalc_timeout = False - else: - timeout = float(timeout) - if timeout < 0.0: # Timeout less than 0 treated as no timeout. - expires = None - else: - expires = monotonic() + timeout - - args = list(args) - if recalc_timeout and "timeout" not in kwargs: - raise ValueError( - "Timeout must be in args or kwargs to be recalculated") - - result = _SYSCALL_SENTINEL - while result is _SYSCALL_SENTINEL: - try: - result = func(*args, **kwargs) - # OSError is thrown by select.select - # IOError is thrown by select.epoll.poll - # select.error is thrown by select.poll.poll - # Aren't we thankful for Python 3.x rework for exceptions? - except (OSError, IOError, select.error) as e: - # select.error wasn't a subclass of OSError in the past. - errcode = None - if hasattr(e, "errno"): - errcode = e.errno - elif hasattr(e, "args"): - errcode = e.args[0] - - # Also test for the Windows equivalent of EINTR. - is_interrupt = (errcode == errno.EINTR or (hasattr(errno, "WSAEINTR") and - errcode == errno.WSAEINTR)) - - if is_interrupt: - if expires is not None: - current_time = monotonic() - if current_time > expires: - raise OSError(errno=errno.ETIMEDOUT) - if recalc_timeout: - if "timeout" in kwargs: - kwargs["timeout"] = expires - current_time - continue - if errcode: - raise SelectorError(errcode) - else: - raise - return result - - -SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data']) - - -class _SelectorMapping(Mapping): - """ Mapping of file objects to selector keys """ - - def __init__(self, selector): - self._selector = selector - - def __len__(self): - return len(self._selector._fd_to_key) - - def __getitem__(self, fileobj): - try: - fd = self._selector._fileobj_lookup(fileobj) - return self._selector._fd_to_key[fd] - except KeyError: - raise KeyError("{0!r} is not registered.".format(fileobj)) - - def __iter__(self): - return iter(self._selector._fd_to_key) - - -class BaseSelector(object): - """ Abstract Selector class - - A selector supports registering file objects to be monitored - for specific I/O events. - - A file object is a file descriptor or any object with a - `fileno()` method. An arbitrary object can be attached to the - file object which can be used for example to store context info, - a callback, etc. - - A selector can use various implementations (select(), poll(), epoll(), - and kqueue()) depending on the platform. The 'DefaultSelector' class uses - the most efficient implementation for the current platform. - """ - def __init__(self): - # Maps file descriptors to keys. - self._fd_to_key = {} - - # Read-only mapping returned by get_map() - self._map = _SelectorMapping(self) - - def _fileobj_lookup(self, fileobj): - """ Return a file descriptor from a file object. - This wraps _fileobj_to_fd() to do an exhaustive - search in case the object is invalid but we still - have it in our map. Used by unregister() so we can - unregister an object that was previously registered - even if it is closed. It is also used by _SelectorMapping - """ - try: - return _fileobj_to_fd(fileobj) - except ValueError: - - # Search through all our mapped keys. - for key in self._fd_to_key.values(): - if key.fileobj is fileobj: - return key.fd - - # Raise ValueError after all. - raise - - def register(self, fileobj, events, data=None): - """ Register a file object for a set of events to monitor. """ - if (not events) or (events & ~(EVENT_READ | EVENT_WRITE)): - raise ValueError("Invalid events: {0!r}".format(events)) - - key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data) - - if key.fd in self._fd_to_key: - raise KeyError("{0!r} (FD {1}) is already registered" - .format(fileobj, key.fd)) - - self._fd_to_key[key.fd] = key - return key - - def unregister(self, fileobj): - """ Unregister a file object from being monitored. """ - try: - key = self._fd_to_key.pop(self._fileobj_lookup(fileobj)) - except KeyError: - raise KeyError("{0!r} is not registered".format(fileobj)) - - # Getting the fileno of a closed socket on Windows errors with EBADF. - except socket.error as e: # Platform-specific: Windows. - if e.errno != errno.EBADF: - raise - else: - for key in self._fd_to_key.values(): - if key.fileobj is fileobj: - self._fd_to_key.pop(key.fd) - break - else: - raise KeyError("{0!r} is not registered".format(fileobj)) - return key - - def modify(self, fileobj, events, data=None): - """ Change a registered file object monitored events and data. """ - # NOTE: Some subclasses optimize this operation even further. - try: - key = self._fd_to_key[self._fileobj_lookup(fileobj)] - except KeyError: - raise KeyError("{0!r} is not registered".format(fileobj)) - - if events != key.events: - self.unregister(fileobj) - key = self.register(fileobj, events, data) - - elif data != key.data: - # Use a shortcut to update the data. - key = key._replace(data=data) - self._fd_to_key[key.fd] = key - - return key - - def select(self, timeout=None): - """ Perform the actual selection until some monitored file objects - are ready or the timeout expires. """ - raise NotImplementedError() - - def close(self): - """ Close the selector. This must be called to ensure that all - underlying resources are freed. """ - self._fd_to_key.clear() - self._map = None - - def get_key(self, fileobj): - """ Return the key associated with a registered file object. """ - mapping = self.get_map() - if mapping is None: - raise RuntimeError("Selector is closed") - try: - return mapping[fileobj] - except KeyError: - raise KeyError("{0!r} is not registered".format(fileobj)) - - def get_map(self): - """ Return a mapping of file objects to selector keys """ - return self._map - - def _key_from_fd(self, fd): - """ Return the key associated to a given file descriptor - Return None if it is not found. """ - try: - return self._fd_to_key[fd] - except KeyError: - return None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - -# Almost all platforms have select.select() -if hasattr(select, "select"): - class SelectSelector(BaseSelector): - """ Select-based selector. """ - def __init__(self): - super(SelectSelector, self).__init__() - self._readers = set() - self._writers = set() - - def register(self, fileobj, events, data=None): - key = super(SelectSelector, self).register(fileobj, events, data) - if events & EVENT_READ: - self._readers.add(key.fd) - if events & EVENT_WRITE: - self._writers.add(key.fd) - return key - - def unregister(self, fileobj): - key = super(SelectSelector, self).unregister(fileobj) - self._readers.discard(key.fd) - self._writers.discard(key.fd) - return key - - def _select(self, r, w, timeout=None): - """ Wrapper for select.select because timeout is a positional arg """ - return select.select(r, w, [], timeout) - - def select(self, timeout=None): - # Selecting on empty lists on Windows errors out. - if not len(self._readers) and not len(self._writers): - return [] - - timeout = None if timeout is None else max(timeout, 0.0) - ready = [] - r, w, _ = _syscall_wrapper(self._select, True, self._readers, - self._writers, timeout) - r = set(r) - w = set(w) - for fd in r | w: - events = 0 - if fd in r: - events |= EVENT_READ - if fd in w: - events |= EVENT_WRITE - - key = self._key_from_fd(fd) - if key: - ready.append((key, events & key.events)) - return ready - - -if hasattr(select, "poll"): - class PollSelector(BaseSelector): - """ Poll-based selector """ - def __init__(self): - super(PollSelector, self).__init__() - self._poll = select.poll() - - def register(self, fileobj, events, data=None): - key = super(PollSelector, self).register(fileobj, events, data) - event_mask = 0 - if events & EVENT_READ: - event_mask |= select.POLLIN - if events & EVENT_WRITE: - event_mask |= select.POLLOUT - self._poll.register(key.fd, event_mask) - return key - - def unregister(self, fileobj): - key = super(PollSelector, self).unregister(fileobj) - self._poll.unregister(key.fd) - return key - - def _wrap_poll(self, timeout=None): - """ Wrapper function for select.poll.poll() so that - _syscall_wrapper can work with only seconds. """ - if timeout is not None: - if timeout <= 0: - timeout = 0 - else: - # select.poll.poll() has a resolution of 1 millisecond, - # round away from zero to wait *at least* timeout seconds. - timeout = math.ceil(timeout * 1e3) - - result = self._poll.poll(timeout) - return result - - def select(self, timeout=None): - ready = [] - fd_events = _syscall_wrapper(self._wrap_poll, True, timeout=timeout) - for fd, event_mask in fd_events: - events = 0 - if event_mask & ~select.POLLIN: - events |= EVENT_WRITE - if event_mask & ~select.POLLOUT: - events |= EVENT_READ - - key = self._key_from_fd(fd) - if key: - ready.append((key, events & key.events)) - - return ready - - -if hasattr(select, "epoll"): - class EpollSelector(BaseSelector): - """ Epoll-based selector """ - def __init__(self): - super(EpollSelector, self).__init__() - self._epoll = select.epoll() - - def fileno(self): - return self._epoll.fileno() - - def register(self, fileobj, events, data=None): - key = super(EpollSelector, self).register(fileobj, events, data) - events_mask = 0 - if events & EVENT_READ: - events_mask |= select.EPOLLIN - if events & EVENT_WRITE: - events_mask |= select.EPOLLOUT - _syscall_wrapper(self._epoll.register, False, key.fd, events_mask) - return key - - def unregister(self, fileobj): - key = super(EpollSelector, self).unregister(fileobj) - try: - _syscall_wrapper(self._epoll.unregister, False, key.fd) - except SelectorError: - # This can occur when the fd was closed since registry. - pass - return key - - def select(self, timeout=None): - if timeout is not None: - if timeout <= 0: - timeout = 0.0 - else: - # select.epoll.poll() has a resolution of 1 millisecond - # but luckily takes seconds so we don't need a wrapper - # like PollSelector. Just for better rounding. - timeout = math.ceil(timeout * 1e3) * 1e-3 - timeout = float(timeout) - else: - timeout = -1.0 # epoll.poll() must have a float. - - # We always want at least 1 to ensure that select can be called - # with no file descriptors registered. Otherwise will fail. - max_events = max(len(self._fd_to_key), 1) - - ready = [] - fd_events = _syscall_wrapper(self._epoll.poll, True, - timeout=timeout, - maxevents=max_events) - for fd, event_mask in fd_events: - events = 0 - if event_mask & ~select.EPOLLIN: - events |= EVENT_WRITE - if event_mask & ~select.EPOLLOUT: - events |= EVENT_READ - - key = self._key_from_fd(fd) - if key: - ready.append((key, events & key.events)) - return ready - - def close(self): - self._epoll.close() - super(EpollSelector, self).close() - - -if hasattr(select, "kqueue"): - class KqueueSelector(BaseSelector): - """ Kqueue / Kevent-based selector """ - def __init__(self): - super(KqueueSelector, self).__init__() - self._kqueue = select.kqueue() - - def fileno(self): - return self._kqueue.fileno() - - def register(self, fileobj, events, data=None): - key = super(KqueueSelector, self).register(fileobj, events, data) - if events & EVENT_READ: - kevent = select.kevent(key.fd, - select.KQ_FILTER_READ, - select.KQ_EV_ADD) - - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - - if events & EVENT_WRITE: - kevent = select.kevent(key.fd, - select.KQ_FILTER_WRITE, - select.KQ_EV_ADD) - - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - - return key - - def unregister(self, fileobj): - key = super(KqueueSelector, self).unregister(fileobj) - if key.events & EVENT_READ: - kevent = select.kevent(key.fd, - select.KQ_FILTER_READ, - select.KQ_EV_DELETE) - try: - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - except SelectorError: - pass - if key.events & EVENT_WRITE: - kevent = select.kevent(key.fd, - select.KQ_FILTER_WRITE, - select.KQ_EV_DELETE) - try: - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - except SelectorError: - pass - - return key - - def select(self, timeout=None): - if timeout is not None: - timeout = max(timeout, 0) - - max_events = len(self._fd_to_key) * 2 - ready_fds = {} - - kevent_list = _syscall_wrapper(self._kqueue.control, True, - None, max_events, timeout) - - for kevent in kevent_list: - fd = kevent.ident - event_mask = kevent.filter - events = 0 - if event_mask == select.KQ_FILTER_READ: - events |= EVENT_READ - if event_mask == select.KQ_FILTER_WRITE: - events |= EVENT_WRITE - - key = self._key_from_fd(fd) - if key: - if key.fd not in ready_fds: - ready_fds[key.fd] = (key, events & key.events) - else: - old_events = ready_fds[key.fd][1] - ready_fds[key.fd] = (key, (events | old_events) & key.events) - - return list(ready_fds.values()) - - def close(self): - self._kqueue.close() - super(KqueueSelector, self).close() - - -if not hasattr(select, 'select'): # Platform-specific: AppEngine - HAS_SELECT = False - - -def _can_allocate(struct): - """ Checks that select structs can be allocated by the underlying - operating system, not just advertised by the select module. We don't - check select() because we'll be hopeful that most platforms that - don't have it available will not advertise it. (ie: GAE) """ - try: - # select.poll() objects won't fail until used. - if struct == 'poll': - p = select.poll() - p.poll(0) - - # All others will fail on allocation. - else: - getattr(select, struct)().close() - return True - except (OSError, AttributeError) as e: - return False - - -# Choose the best implementation, roughly: -# kqueue == epoll > poll > select. Devpoll not supported. (See above) -# select() also can't accept a FD > FD_SETSIZE (usually around 1024) -def DefaultSelector(): - """ This function serves as a first call for DefaultSelector to - detect if the select module is being monkey-patched incorrectly - by eventlet, greenlet, and preserve proper behavior. """ - global _DEFAULT_SELECTOR - if _DEFAULT_SELECTOR is None: - if _can_allocate('kqueue'): - _DEFAULT_SELECTOR = KqueueSelector - elif _can_allocate('epoll'): - _DEFAULT_SELECTOR = EpollSelector - elif _can_allocate('poll'): - _DEFAULT_SELECTOR = PollSelector - elif hasattr(select, 'select'): - _DEFAULT_SELECTOR = SelectSelector - else: # Platform-specific: AppEngine - raise ValueError('Platform does not have a selector') - return _DEFAULT_SELECTOR() diff --git a/pype/vendor/requests/packages/urllib3/util/ssl_.py b/pype/vendor/requests/packages/urllib3/util/ssl_.py deleted file mode 100644 index 33d428ed85..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/ssl_.py +++ /dev/null @@ -1,337 +0,0 @@ -from __future__ import absolute_import -import errno -import warnings -import hmac - -from binascii import hexlify, unhexlify -from hashlib import md5, sha1, sha256 - -from ..exceptions import SSLError, InsecurePlatformWarning, SNIMissingWarning - - -SSLContext = None -HAS_SNI = False -IS_PYOPENSSL = False -IS_SECURETRANSPORT = False - -# Maps the length of a digest to a possible hash function producing this digest -HASHFUNC_MAP = { - 32: md5, - 40: sha1, - 64: sha256, -} - - -def _const_compare_digest_backport(a, b): - """ - Compare two digests of equal length in constant time. - - The digests must be of type str/bytes. - Returns True if the digests match, and False otherwise. - """ - result = abs(len(a) - len(b)) - for l, r in zip(bytearray(a), bytearray(b)): - result |= l ^ r - return result == 0 - - -_const_compare_digest = getattr(hmac, 'compare_digest', - _const_compare_digest_backport) - - -try: # Test for SSL features - import ssl - from ssl import wrap_socket, CERT_NONE, PROTOCOL_SSLv23 - from ssl import HAS_SNI # Has SNI? -except ImportError: - pass - - -try: - from ssl import OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION -except ImportError: - OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 - OP_NO_COMPRESSION = 0x20000 - -# A secure default. -# Sources for more information on TLS ciphers: -# -# - https://wiki.mozilla.org/Security/Server_Side_TLS -# - https://www.ssllabs.com/projects/best-practices/index.html -# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ -# -# The general intent is: -# - Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE), -# - prefer ECDHE over DHE for better performance, -# - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and -# security, -# - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common, -# - disable NULL authentication, MD5 MACs and DSS for security reasons. -DEFAULT_CIPHERS = ':'.join([ - 'ECDH+AESGCM', - 'ECDH+CHACHA20', - 'DH+AESGCM', - 'DH+CHACHA20', - 'ECDH+AES256', - 'DH+AES256', - 'ECDH+AES128', - 'DH+AES', - 'RSA+AESGCM', - 'RSA+AES', - '!aNULL', - '!eNULL', - '!MD5', -]) - -try: - from ssl import SSLContext # Modern SSL? -except ImportError: - import sys - - class SSLContext(object): # Platform-specific: Python 2 & 3.1 - supports_set_ciphers = ((2, 7) <= sys.version_info < (3,) or - (3, 2) <= sys.version_info) - - def __init__(self, protocol_version): - self.protocol = protocol_version - # Use default values from a real SSLContext - self.check_hostname = False - self.verify_mode = ssl.CERT_NONE - self.ca_certs = None - self.options = 0 - self.certfile = None - self.keyfile = None - self.ciphers = None - - def load_cert_chain(self, certfile, keyfile): - self.certfile = certfile - self.keyfile = keyfile - - def load_verify_locations(self, cafile=None, capath=None): - self.ca_certs = cafile - - if capath is not None: - raise SSLError("CA directories not supported in older Pythons") - - def set_ciphers(self, cipher_suite): - if not self.supports_set_ciphers: - raise TypeError( - 'Your version of Python does not support setting ' - 'a custom cipher suite. Please upgrade to Python ' - '2.7, 3.2, or later if you need this functionality.' - ) - self.ciphers = cipher_suite - - def wrap_socket(self, socket, server_hostname=None, server_side=False): - warnings.warn( - 'A true SSLContext object is not available. This prevents ' - 'urllib3 from configuring SSL appropriately and may cause ' - 'certain SSL connections to fail. You can upgrade to a newer ' - 'version of Python to solve this. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings', - InsecurePlatformWarning - ) - kwargs = { - 'keyfile': self.keyfile, - 'certfile': self.certfile, - 'ca_certs': self.ca_certs, - 'cert_reqs': self.verify_mode, - 'ssl_version': self.protocol, - 'server_side': server_side, - } - if self.supports_set_ciphers: # Platform-specific: Python 2.7+ - return wrap_socket(socket, ciphers=self.ciphers, **kwargs) - else: # Platform-specific: Python 2.6 - return wrap_socket(socket, **kwargs) - - -def assert_fingerprint(cert, fingerprint): - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - fingerprint = fingerprint.replace(':', '').lower() - digest_length = len(fingerprint) - hashfunc = HASHFUNC_MAP.get(digest_length) - if not hashfunc: - raise SSLError( - 'Fingerprint of invalid length: {0}'.format(fingerprint)) - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - cert_digest = hashfunc(cert).digest() - - if not _const_compare_digest(cert_digest, fingerprint_bytes): - raise SSLError('Fingerprints did not match. Expected "{0}", got "{1}".' - .format(fingerprint, hexlify(cert_digest))) - - -def resolve_cert_reqs(candidate): - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_NONE`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbrevation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_NONE - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'CERT_' + candidate) - return res - - return candidate - - -def resolve_ssl_version(candidate): - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_SSLv23 - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'PROTOCOL_' + candidate) - return res - - return candidate - - -def create_urllib3_context(ssl_version=None, cert_reqs=None, - options=None, ciphers=None): - """All arguments have the same meaning as ``ssl_wrap_socket``. - - By default, this function does a lot of the same work that - ``ssl.create_default_context`` does on Python 3.4+. It: - - - Disables SSLv2, SSLv3, and compression - - Sets a restricted set of server ciphers - - If you wish to enable SSLv3, you can do:: - - from urllib3.util import ssl_ - context = ssl_.create_urllib3_context() - context.options &= ~ssl_.OP_NO_SSLv3 - - You can do the same to enable compression (substituting ``COMPRESSION`` - for ``SSLv3`` in the last line above). - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``. - :param ciphers: - Which cipher suites to allow the server to select. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - context = SSLContext(ssl_version or ssl.PROTOCOL_SSLv23) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - - context.options |= options - - if getattr(context, 'supports_set_ciphers', True): # Platform-specific: Python 2.6 - context.set_ciphers(ciphers or DEFAULT_CIPHERS) - - context.verify_mode = cert_reqs - if getattr(context, 'check_hostname', None) is not None: # Platform-specific: Python 3.2 - # We do our own verification, including fingerprints and alternative - # hostnames. So disable it here - context.check_hostname = False - return context - - -def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, - ca_certs=None, server_hostname=None, - ssl_version=None, ciphers=None, ssl_context=None, - ca_cert_dir=None): - """ - All arguments except for server_hostname, ssl_context, and ca_cert_dir have - the same meaning as they do when using :func:`ssl.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. This is not - supported on Python 2.6 as the ssl module does not support it. - :param ca_cert_dir: - A directory containing CA certificates in multiple separate files, as - supported by OpenSSL's -CApath flag or the capath argument to - SSLContext.load_verify_locations(). - """ - context = ssl_context - if context is None: - # Note: This branch of code and all the variables in it are no longer - # used by urllib3 itself. We should consider deprecating and removing - # this code. - context = create_urllib3_context(ssl_version, cert_reqs, - ciphers=ciphers) - - if ca_certs or ca_cert_dir: - try: - context.load_verify_locations(ca_certs, ca_cert_dir) - except IOError as e: # Platform-specific: Python 2.6, 2.7, 3.2 - raise SSLError(e) - # Py33 raises FileNotFoundError which subclasses OSError - # These are not equivalent unless we check the errno attribute - except OSError as e: # Platform-specific: Python 3.3 and beyond - if e.errno == errno.ENOENT: - raise SSLError(e) - raise - elif getattr(context, 'load_default_certs', None) is not None: - # try to load OS default certs; works well on Windows (require Python3.4+) - context.load_default_certs() - - if certfile: - context.load_cert_chain(certfile, keyfile) - if HAS_SNI: # Platform-specific: OpenSSL with enabled SNI - return context.wrap_socket(sock, server_hostname=server_hostname) - - warnings.warn( - 'An HTTPS request has been made, but the SNI (Subject Name ' - 'Indication) extension to TLS is not available on this platform. ' - 'This may cause the server to present an incorrect TLS ' - 'certificate, which can cause validation failures. You can upgrade to ' - 'a newer version of Python to solve this. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings', - SNIMissingWarning - ) - return context.wrap_socket(sock) diff --git a/pype/vendor/requests/packages/urllib3/util/timeout.py b/pype/vendor/requests/packages/urllib3/util/timeout.py deleted file mode 100644 index cec817e6ef..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/timeout.py +++ /dev/null @@ -1,242 +0,0 @@ -from __future__ import absolute_import -# The default socket timeout, used by httplib to indicate that no timeout was -# specified by the user -from socket import _GLOBAL_DEFAULT_TIMEOUT -import time - -from ..exceptions import TimeoutStateError - -# A sentinel value to indicate that no timeout was specified by the user in -# urllib3 -_Default = object() - - -# Use time.monotonic if available. -current_time = getattr(time, "monotonic", time.time) - - -class Timeout(object): - """ Timeout configuration. - - Timeouts can be defined as a default for a pool:: - - timeout = Timeout(connect=2.0, read=7.0) - http = PoolManager(timeout=timeout) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``:: - - no_timeout = Timeout(connect=None, read=None) - response = http.request('GET', 'http://example.com/, timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: integer, float, or None - - :param connect: - The maximum amount of time to wait for a connection attempt to a server - to succeed. Omitting the parameter will default the connect timeout to - the system default, probably `the global default timeout in socket.py - `_. - None will set an infinite timeout for connection attempts. - - :type connect: integer, float, or None - - :param read: - The maximum amount of time to wait between consecutive - read operations for a response from the server. Omitting - the parameter will default the read timeout to the system - default, probably `the global default timeout in socket.py - `_. - None will set an infinite timeout. - - :type read: integer, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - - If your goal is to cut off any request after a set amount of wall clock - time, consider having a second "watcher" thread to cut off a slow - request. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT - - def __init__(self, total=None, connect=_Default, read=_Default): - self._connect = self._validate_timeout(connect, 'connect') - self._read = self._validate_timeout(read, 'read') - self.total = self._validate_timeout(total, 'total') - self._start_connect = None - - def __str__(self): - return '%s(connect=%r, read=%r, total=%r)' % ( - type(self).__name__, self._connect, self._read, self.total) - - @classmethod - def _validate_timeout(cls, value, name): - """ Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If it is a numeric value less than or equal to - zero, or the type is not an integer, float, or None. - """ - if value is _Default: - return cls.DEFAULT_TIMEOUT - - if value is None or value is cls.DEFAULT_TIMEOUT: - return value - - if isinstance(value, bool): - raise ValueError("Timeout cannot be a boolean value. It must " - "be an int, float or None.") - try: - float(value) - except (TypeError, ValueError): - raise ValueError("Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value)) - - try: - if value <= 0: - raise ValueError("Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than or equal to 0." % (name, value)) - except TypeError: # Python 3 - raise ValueError("Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value)) - - return value - - @classmethod - def from_float(cls, timeout): - """ Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, sentinel default object, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self): - """ Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, - total=self.total) - - def start_connect(self): - """ Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = current_time() - return self._start_connect - - def get_connect_duration(self): - """ Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError("Can't get connect duration for timer " - "that has not started.") - return current_time() - self._start_connect - - @property - def connect_timeout(self): - """ Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is self.DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) - - @property - def read_timeout(self): - """ Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if (self.total is not None and - self.total is not self.DEFAULT_TIMEOUT and - self._read is not None and - self._read is not self.DEFAULT_TIMEOUT): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), - self._read)) - elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self._read diff --git a/pype/vendor/requests/packages/urllib3/util/url.py b/pype/vendor/requests/packages/urllib3/util/url.py deleted file mode 100644 index 6b6f9968d7..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/url.py +++ /dev/null @@ -1,230 +0,0 @@ -from __future__ import absolute_import -from collections import namedtuple - -from ..exceptions import LocationParseError - - -url_attrs = ['scheme', 'auth', 'host', 'port', 'path', 'query', 'fragment'] - -# We only want to normalize urls with an HTTP(S) scheme. -# urllib3 infers URLs without a scheme (None) to be http. -NORMALIZABLE_SCHEMES = ('http', 'https', None) - - -class Url(namedtuple('Url', url_attrs)): - """ - Datastructure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. Both the scheme and host are normalized as they are - both case-insensitive according to RFC 3986. - """ - __slots__ = () - - def __new__(cls, scheme=None, auth=None, host=None, port=None, path=None, - query=None, fragment=None): - if path and not path.startswith('/'): - path = '/' + path - if scheme: - scheme = scheme.lower() - if host and scheme in NORMALIZABLE_SCHEMES: - host = host.lower() - return super(Url, cls).__new__(cls, scheme, auth, host, port, path, - query, fragment) - - @property - def hostname(self): - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self): - """Absolute path including the query string.""" - uri = self.path or '/' - - if self.query is not None: - uri += '?' + self.query - - return uri - - @property - def netloc(self): - """Network location including host and port""" - if self.port: - return '%s:%d' % (self.host, self.port) - return self.host - - @property - def url(self): - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: :: - - >>> U = parse_url('http://google.com/mail/') - >>> U.url - 'http://google.com/mail/' - >>> Url('http', 'username:password', 'host.com', 80, - ... '/path', 'query', 'fragment').url - 'http://username:password@host.com:80/path?query#fragment' - """ - scheme, auth, host, port, path, query, fragment = self - url = '' - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + '://' - if auth is not None: - url += auth + '@' - if host is not None: - url += host - if port is not None: - url += ':' + str(port) - if path is not None: - url += path - if query is not None: - url += '?' + query - if fragment is not None: - url += '#' + fragment - - return url - - def __str__(self): - return self.url - - -def split_first(s, delims): - """ - Given a string and an iterable of delimiters, split on the first found - delimiter. Return two split parts and the matched delimiter. - - If not found, then the first part is the full input string. - - Example:: - - >>> split_first('foo/bar?baz', '?/=') - ('foo', 'bar?baz', '/') - >>> split_first('foo/bar?baz', '123') - ('foo/bar?baz', '', None) - - Scales linearly with number of delims. Not ideal for large number of delims. - """ - min_idx = None - min_delim = None - for d in delims: - idx = s.find(d) - if idx < 0: - continue - - if min_idx is None or idx < min_idx: - min_idx = idx - min_delim = d - - if min_idx is None or min_idx < 0: - return s, '', None - - return s[:min_idx], s[min_idx + 1:], min_delim - - -def parse_url(url): - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - - Partly backwards-compatible with :mod:`urlparse`. - - Example:: - - >>> parse_url('http://google.com/mail/') - Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - >>> parse_url('google.com:80') - Url(scheme=None, host='google.com', port=80, path=None, ...) - >>> parse_url('/foo?bar') - Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - - # While this code has overlap with stdlib's urlparse, it is much - # simplified for our needs and less annoying. - # Additionally, this implementations does silly things to be optimal - # on CPython. - - if not url: - # Empty - return Url() - - scheme = None - auth = None - host = None - port = None - path = None - fragment = None - query = None - - # Scheme - if '://' in url: - scheme, url = url.split('://', 1) - - # Find the earliest Authority Terminator - # (http://tools.ietf.org/html/rfc3986#section-3.2) - url, path_, delim = split_first(url, ['/', '?', '#']) - - if delim: - # Reassemble the path - path = delim + path_ - - # Auth - if '@' in url: - # Last '@' denotes end of auth part - auth, url = url.rsplit('@', 1) - - # IPv6 - if url and url[0] == '[': - host, url = url.split(']', 1) - host += ']' - - # Port - if ':' in url: - _host, port = url.split(':', 1) - - if not host: - host = _host - - if port: - # If given, ports must be integers. No whitespace, no plus or - # minus prefixes, no non-integer digits such as ^2 (superscript). - if not port.isdigit(): - raise LocationParseError(url) - try: - port = int(port) - except ValueError: - raise LocationParseError(url) - else: - # Blank ports are cool, too. (rfc3986#section-3.2.3) - port = None - - elif not host and url: - host = url - - if not path: - return Url(scheme, auth, host, port, path, query, fragment) - - # Fragment - if '#' in path: - path, fragment = path.split('#', 1) - - # Query - if '?' in path: - path, query = path.split('?', 1) - - return Url(scheme, auth, host, port, path, query, fragment) - - -def get_host(url): - """ - Deprecated. Use :func:`parse_url` instead. - """ - p = parse_url(url) - return p.scheme or 'http', p.hostname, p.port diff --git a/pype/vendor/requests/packages/urllib3/util/wait.py b/pype/vendor/requests/packages/urllib3/util/wait.py deleted file mode 100644 index cb396e508c..0000000000 --- a/pype/vendor/requests/packages/urllib3/util/wait.py +++ /dev/null @@ -1,40 +0,0 @@ -from .selectors import ( - HAS_SELECT, - DefaultSelector, - EVENT_READ, - EVENT_WRITE -) - - -def _wait_for_io_events(socks, events, timeout=None): - """ Waits for IO events to be available from a list of sockets - or optionally a single socket if passed in. Returns a list of - sockets that can be interacted with immediately. """ - if not HAS_SELECT: - raise ValueError('Platform does not have a selector') - if not isinstance(socks, list): - # Probably just a single socket. - if hasattr(socks, "fileno"): - socks = [socks] - # Otherwise it might be a non-list iterable. - else: - socks = list(socks) - with DefaultSelector() as selector: - for sock in socks: - selector.register(sock, events) - return [key[0].fileobj for key in - selector.select(timeout) if key[1] & events] - - -def wait_for_read(socks, timeout=None): - """ Waits for reading to be available from a list of sockets - or optionally a single socket if passed in. Returns a list of - sockets that can be read from immediately. """ - return _wait_for_io_events(socks, EVENT_READ, timeout) - - -def wait_for_write(socks, timeout=None): - """ Waits for writing to be available from a list of sockets - or optionally a single socket if passed in. Returns a list of - sockets that can be written to immediately. """ - return _wait_for_io_events(socks, EVENT_WRITE, timeout) diff --git a/pype/vendor/requests/sessions.py b/pype/vendor/requests/sessions.py index ba135268ab..d73d700fa6 100644 --- a/pype/vendor/requests/sessions.py +++ b/pype/vendor/requests/sessions.py @@ -19,7 +19,7 @@ from .cookies import ( from .models import Request, PreparedRequest, DEFAULT_REDIRECT_LIMIT from .hooks import default_hooks, dispatch_hook from ._internal_utils import to_native_string -from .utils import to_key_val_list, default_headers +from .utils import to_key_val_list, default_headers, DEFAULT_PORTS from .exceptions import ( TooManyRedirects, InvalidSchema, ChunkedEncodingError, ContentDecodingError) @@ -115,6 +115,31 @@ class SessionRedirectMixin(object): return to_native_string(location, 'utf8') return None + def should_strip_auth(self, old_url, new_url): + """Decide whether Authorization header should be removed when redirecting""" + old_parsed = urlparse(old_url) + new_parsed = urlparse(new_url) + if old_parsed.hostname != new_parsed.hostname: + return True + # Special case: allow http -> https redirect when using the standard + # ports. This isn't specified by RFC 7235, but is kept to avoid + # breaking backwards compatibility with older versions of requests + # that allowed any redirects on the same host. + if (old_parsed.scheme == 'http' and old_parsed.port in (80, None) + and new_parsed.scheme == 'https' and new_parsed.port in (443, None)): + return False + + # Handle default port usage corresponding to scheme. + changed_port = old_parsed.port != new_parsed.port + changed_scheme = old_parsed.scheme != new_parsed.scheme + default_port = (DEFAULT_PORTS.get(old_parsed.scheme, None), None) + if (not changed_scheme and old_parsed.port in default_port + and new_parsed.port in default_port): + return False + + # Standard case: root URI must match + return changed_port or changed_scheme + def resolve_redirects(self, resp, req, stream=False, timeout=None, verify=True, cert=None, proxies=None, yield_requests=False, **adapter_kwargs): """Receives a Response. Returns a generator of Responses or Requests.""" @@ -236,14 +261,10 @@ class SessionRedirectMixin(object): headers = prepared_request.headers url = prepared_request.url - if 'Authorization' in headers: + if 'Authorization' in headers and self.should_strip_auth(response.request.url, url): # If we get redirected to a new host, we should strip out any # authentication headers. - original_parsed = urlparse(response.request.url) - redirect_parsed = urlparse(url) - - if (original_parsed.hostname != redirect_parsed.hostname): - del headers['Authorization'] + del headers['Authorization'] # .netrc might have more auth for us on our new host. new_auth = get_netrc_auth(url) if self.trust_env else None @@ -299,7 +320,7 @@ class SessionRedirectMixin(object): """ method = prepared_request.method - # http://tools.ietf.org/html/rfc7231#section-6.4.4 + # https://tools.ietf.org/html/rfc7231#section-6.4.4 if response.status_code == codes.see_other and method != 'HEAD': method = 'GET' @@ -325,13 +346,13 @@ class Session(SessionRedirectMixin): >>> import requests >>> s = requests.Session() - >>> s.get('http://httpbin.org/get') + >>> s.get('https://httpbin.org/get') Or as a context manager:: >>> with requests.Session() as s: - >>> s.get('http://httpbin.org/get') + >>> s.get('https://httpbin.org/get') """ @@ -453,8 +474,8 @@ class Session(SessionRedirectMixin): :param url: URL for the new :class:`Request` object. :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param data: (optional) Dictionary, bytes, or file-like object to send - in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param json: (optional) json to send in the body of the :class:`Request`. :param headers: (optional) Dictionary of HTTP Headers to send with the @@ -550,7 +571,8 @@ class Session(SessionRedirectMixin): r"""Sends a POST request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param json: (optional) json to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :rtype: requests.Response @@ -562,7 +584,8 @@ class Session(SessionRedirectMixin): r"""Sends a PUT request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :rtype: requests.Response """ @@ -573,7 +596,8 @@ class Session(SessionRedirectMixin): r"""Sends a PATCH request. Returns :class:`Response` object. :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. + :param data: (optional) Dictionary, list of tuples, bytes, or file-like + object to send in the body of the :class:`Request`. :param \*\*kwargs: Optional arguments that ``request`` takes. :rtype: requests.Response """ @@ -723,7 +747,7 @@ class Session(SessionRedirectMixin): self.adapters[key] = self.adapters.pop(key) def __getstate__(self): - state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__) + state = {attr: getattr(self, attr, None) for attr in self.__attrs__} return state def __setstate__(self, state): @@ -735,7 +759,12 @@ def session(): """ Returns a :class:`Session` for context-management. + .. deprecated:: 1.0.0 + + This method has been deprecated since version 1.0.0 and is only kept for + backwards compatibility. New code should use :class:`~requests.sessions.Session` + to create a session. This may be removed at a future date. + :rtype: Session """ - return Session() diff --git a/pype/vendor/requests/status_codes.py b/pype/vendor/requests/status_codes.py index ff462c6c69..813e8c4e62 100644 --- a/pype/vendor/requests/status_codes.py +++ b/pype/vendor/requests/status_codes.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -""" +r""" The ``codes`` object defines a mapping from common names for HTTP statuses to their numerical codes, accessible either as attributes or as dictionary items. diff --git a/pype/vendor/requests/utils.py b/pype/vendor/requests/utils.py index 431f6be074..8170a8d2c4 100644 --- a/pype/vendor/requests/utils.py +++ b/pype/vendor/requests/utils.py @@ -38,6 +38,8 @@ NETRC_FILES = ('.netrc', '_netrc') DEFAULT_CA_BUNDLE_PATH = certs.where() +DEFAULT_PORTS = {'http': 80, 'https': 443} + if sys.platform == 'win32': # provide a proxy_bypass version on Windows without DNS lookups @@ -173,10 +175,10 @@ def get_netrc_auth(url, raise_errors=False): for f in NETRC_FILES: try: - loc = os.path.expanduser('~/{0}'.format(f)) + loc = os.path.expanduser('~/{}'.format(f)) except KeyError: # os.path.expanduser can fail when $HOME is undefined and - # getpwuid fails. See http://bugs.python.org/issue20164 & + # getpwuid fails. See https://bugs.python.org/issue20164 & # https://github.com/requests/requests/issues/1846 return @@ -264,7 +266,7 @@ def from_key_val_list(value): >>> from_key_val_list([('key', 'val')]) OrderedDict([('key', 'val')]) >>> from_key_val_list('string') - ValueError: need more than 1 value to unpack + ValueError: cannot encode objects that are not 2-tuples >>> from_key_val_list({'key': 'val'}) OrderedDict([('key', 'val')]) @@ -466,7 +468,7 @@ def _parse_content_type_header(header): if index_of_equals != -1: key = param[:index_of_equals].strip(items_to_strip) value = param[index_of_equals + 1:].strip(items_to_strip) - params_dict[key] = value + params_dict[key.lower()] = value return content_type, params_dict @@ -706,6 +708,10 @@ def should_bypass_proxies(url, no_proxy): no_proxy = get_proxy('no_proxy') parsed = urlparse(url) + if parsed.hostname is None: + # URLs don't always have hostnames, e.g. file:/// urls. + return True + if no_proxy: # We need to check whether we match here. We need to see if we match # the end of the hostname, both with and without the port. @@ -725,7 +731,7 @@ def should_bypass_proxies(url, no_proxy): else: host_with_port = parsed.hostname if parsed.port: - host_with_port += ':{0}'.format(parsed.port) + host_with_port += ':{}'.format(parsed.port) for host in no_proxy: if parsed.hostname.endswith(host) or host_with_port.endswith(host): @@ -733,13 +739,8 @@ def should_bypass_proxies(url, no_proxy): # to apply the proxies on this URL. return True - # If the system proxy settings indicate that this URL should be bypassed, - # don't proxy. - # The proxy_bypass function is incredibly buggy on OS X in early versions - # of Python 2.6, so allow this call to fail. Only catch the specific - # exceptions we've seen, though: this call failing in other ways can reveal - # legitimate problems. with set_environ('no_proxy', no_proxy_arg): + # parsed.hostname can be `None` in cases such as a file URI. try: bypass = proxy_bypass(parsed.hostname) except (TypeError, socket.gaierror): diff --git a/pype/vendor/werkzeug/__init__.py b/pype/vendor/werkzeug/__init__.py new file mode 100644 index 0000000000..56404f4c1f --- /dev/null +++ b/pype/vendor/werkzeug/__init__.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +""" + werkzeug + ~~~~~~~~ + + Werkzeug is the Swiss Army knife of Python web development. + + It provides useful classes and functions for any WSGI application to make + the life of a python web developer much easier. All of the provided + classes are independent from each other so you can mix it with any other + library. + + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +from types import ModuleType +import sys + +from werkzeug._compat import iteritems + +__version__ = '0.14.1' + + +# This import magic raises concerns quite often which is why the implementation +# and motivation is explained here in detail now. +# +# The majority of the functions and classes provided by Werkzeug work on the +# HTTP and WSGI layer. There is no useful grouping for those which is why +# they are all importable from "werkzeug" instead of the modules where they are +# implemented. The downside of that is, that now everything would be loaded at +# once, even if unused. +# +# The implementation of a lazy-loading module in this file replaces the +# werkzeug package when imported from within. Attribute access to the werkzeug +# module will then lazily import from the modules that implement the objects. + + +# import mapping to objects in other modules +all_by_module = { + 'werkzeug.debug': ['DebuggedApplication'], + 'werkzeug.local': ['Local', 'LocalManager', 'LocalProxy', 'LocalStack', + 'release_local'], + 'werkzeug.serving': ['run_simple'], + 'werkzeug.test': ['Client', 'EnvironBuilder', 'create_environ', + 'run_wsgi_app'], + 'werkzeug.testapp': ['test_app'], + 'werkzeug.exceptions': ['abort', 'Aborter'], + 'werkzeug.urls': ['url_decode', 'url_encode', 'url_quote', + 'url_quote_plus', 'url_unquote', 'url_unquote_plus', + 'url_fix', 'Href', 'iri_to_uri', 'uri_to_iri'], + 'werkzeug.formparser': ['parse_form_data'], + 'werkzeug.utils': ['escape', 'environ_property', 'append_slash_redirect', + 'redirect', 'cached_property', 'import_string', + 'dump_cookie', 'parse_cookie', 'unescape', + 'format_string', 'find_modules', 'header_property', + 'html', 'xhtml', 'HTMLBuilder', 'validate_arguments', + 'ArgumentValidationError', 'bind_arguments', + 'secure_filename'], + 'werkzeug.wsgi': ['get_current_url', 'get_host', 'pop_path_info', + 'peek_path_info', 'SharedDataMiddleware', + 'DispatcherMiddleware', 'ClosingIterator', 'FileWrapper', + 'make_line_iter', 'LimitedStream', 'responder', + 'wrap_file', 'extract_path_info'], + 'werkzeug.datastructures': ['MultiDict', 'CombinedMultiDict', 'Headers', + 'EnvironHeaders', 'ImmutableList', + 'ImmutableDict', 'ImmutableMultiDict', + 'TypeConversionDict', + 'ImmutableTypeConversionDict', 'Accept', + 'MIMEAccept', 'CharsetAccept', + 'LanguageAccept', 'RequestCacheControl', + 'ResponseCacheControl', 'ETags', 'HeaderSet', + 'WWWAuthenticate', 'Authorization', + 'FileMultiDict', 'CallbackDict', 'FileStorage', + 'OrderedMultiDict', 'ImmutableOrderedMultiDict' + ], + 'werkzeug.useragents': ['UserAgent'], + 'werkzeug.http': ['parse_etags', 'parse_date', 'http_date', 'cookie_date', + 'parse_cache_control_header', 'is_resource_modified', + 'parse_accept_header', 'parse_set_header', 'quote_etag', + 'unquote_etag', 'generate_etag', 'dump_header', + 'parse_list_header', 'parse_dict_header', + 'parse_authorization_header', + 'parse_www_authenticate_header', 'remove_entity_headers', + 'is_entity_header', 'remove_hop_by_hop_headers', + 'parse_options_header', 'dump_options_header', + 'is_hop_by_hop_header', 'unquote_header_value', + 'quote_header_value', 'HTTP_STATUS_CODES'], + 'werkzeug.wrappers': ['BaseResponse', 'BaseRequest', 'Request', 'Response', + 'AcceptMixin', 'ETagRequestMixin', + 'ETagResponseMixin', 'ResponseStreamMixin', + 'CommonResponseDescriptorsMixin', 'UserAgentMixin', + 'AuthorizationMixin', 'WWWAuthenticateMixin', + 'CommonRequestDescriptorsMixin'], + 'werkzeug.security': ['generate_password_hash', 'check_password_hash'], + # the undocumented easteregg ;-) + 'werkzeug._internal': ['_easteregg'] +} + +# modules that should be imported when accessed as attributes of werkzeug +attribute_modules = frozenset(['exceptions', 'routing']) + + +object_origins = {} +for module, items in iteritems(all_by_module): + for item in items: + object_origins[item] = module + + +class module(ModuleType): + + """Automatically import objects from the modules.""" + + def __getattr__(self, name): + if name in object_origins: + module = __import__(object_origins[name], None, None, [name]) + for extra_name in all_by_module[module.__name__]: + setattr(self, extra_name, getattr(module, extra_name)) + return getattr(module, name) + elif name in attribute_modules: + __import__('werkzeug.' + name) + return ModuleType.__getattribute__(self, name) + + def __dir__(self): + """Just show what we want to show.""" + result = list(new_module.__all__) + result.extend(('__file__', '__doc__', '__all__', + '__docformat__', '__name__', '__path__', + '__package__', '__version__')) + return result + +# keep a reference to this module so that it's not garbage collected +old_module = sys.modules['werkzeug'] + + +# setup the new module and patch it into the dict of loaded modules +new_module = sys.modules['werkzeug'] = module('werkzeug') +new_module.__dict__.update({ + '__file__': __file__, + '__package__': 'werkzeug', + '__path__': __path__, + '__doc__': __doc__, + '__version__': __version__, + '__all__': tuple(object_origins) + tuple(attribute_modules), + '__docformat__': 'restructuredtext en' +}) + + +# Due to bootstrapping issues we need to import exceptions here. +# Don't ask :-( +__import__('werkzeug.exceptions') diff --git a/pype/vendor/werkzeug/_compat.py b/pype/vendor/werkzeug/_compat.py new file mode 100644 index 0000000000..fda038b97b --- /dev/null +++ b/pype/vendor/werkzeug/_compat.py @@ -0,0 +1,206 @@ +# flake8: noqa +# This whole file is full of lint errors +import codecs +import sys +import operator +import functools +import warnings + +try: + import builtins +except ImportError: + import __builtin__ as builtins + + +PY2 = sys.version_info[0] == 2 +WIN = sys.platform.startswith('win') + +_identity = lambda x: x + +if PY2: + unichr = unichr + text_type = unicode + string_types = (str, unicode) + integer_types = (int, long) + + iterkeys = lambda d, *args, **kwargs: d.iterkeys(*args, **kwargs) + itervalues = lambda d, *args, **kwargs: d.itervalues(*args, **kwargs) + iteritems = lambda d, *args, **kwargs: d.iteritems(*args, **kwargs) + + iterlists = lambda d, *args, **kwargs: d.iterlists(*args, **kwargs) + iterlistvalues = lambda d, *args, **kwargs: d.iterlistvalues(*args, **kwargs) + + int_to_byte = chr + iter_bytes = iter + + exec('def reraise(tp, value, tb=None):\n raise tp, value, tb') + + def fix_tuple_repr(obj): + def __repr__(self): + cls = self.__class__ + return '%s(%s)' % (cls.__name__, ', '.join( + '%s=%r' % (field, self[index]) + for index, field in enumerate(cls._fields) + )) + obj.__repr__ = __repr__ + return obj + + def implements_iterator(cls): + cls.next = cls.__next__ + del cls.__next__ + return cls + + def implements_to_string(cls): + cls.__unicode__ = cls.__str__ + cls.__str__ = lambda x: x.__unicode__().encode('utf-8') + return cls + + def native_string_result(func): + def wrapper(*args, **kwargs): + return func(*args, **kwargs).encode('utf-8') + return functools.update_wrapper(wrapper, func) + + def implements_bool(cls): + cls.__nonzero__ = cls.__bool__ + del cls.__bool__ + return cls + + from itertools import imap, izip, ifilter + range_type = xrange + + from StringIO import StringIO + from cStringIO import StringIO as BytesIO + NativeStringIO = BytesIO + + def make_literal_wrapper(reference): + return _identity + + def normalize_string_tuple(tup): + """Normalizes a string tuple to a common type. Following Python 2 + rules, upgrades to unicode are implicit. + """ + if any(isinstance(x, text_type) for x in tup): + return tuple(to_unicode(x) for x in tup) + return tup + + def try_coerce_native(s): + """Try to coerce a unicode string to native if possible. Otherwise, + leave it as unicode. + """ + try: + return to_native(s) + except UnicodeError: + return s + + wsgi_get_bytes = _identity + + def wsgi_decoding_dance(s, charset='utf-8', errors='replace'): + return s.decode(charset, errors) + + def wsgi_encoding_dance(s, charset='utf-8', errors='replace'): + if isinstance(s, bytes): + return s + return s.encode(charset, errors) + + def to_bytes(x, charset=sys.getdefaultencoding(), errors='strict'): + if x is None: + return None + if isinstance(x, (bytes, bytearray, buffer)): + return bytes(x) + if isinstance(x, unicode): + return x.encode(charset, errors) + raise TypeError('Expected bytes') + + def to_native(x, charset=sys.getdefaultencoding(), errors='strict'): + if x is None or isinstance(x, str): + return x + return x.encode(charset, errors) + +else: + unichr = chr + text_type = str + string_types = (str, ) + integer_types = (int, ) + + iterkeys = lambda d, *args, **kwargs: iter(d.keys(*args, **kwargs)) + itervalues = lambda d, *args, **kwargs: iter(d.values(*args, **kwargs)) + iteritems = lambda d, *args, **kwargs: iter(d.items(*args, **kwargs)) + + iterlists = lambda d, *args, **kwargs: iter(d.lists(*args, **kwargs)) + iterlistvalues = lambda d, *args, **kwargs: iter(d.listvalues(*args, **kwargs)) + + int_to_byte = operator.methodcaller('to_bytes', 1, 'big') + iter_bytes = functools.partial(map, int_to_byte) + + def reraise(tp, value, tb=None): + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + + fix_tuple_repr = _identity + implements_iterator = _identity + implements_to_string = _identity + implements_bool = _identity + native_string_result = _identity + imap = map + izip = zip + ifilter = filter + range_type = range + + from io import StringIO, BytesIO + NativeStringIO = StringIO + + _latin1_encode = operator.methodcaller('encode', 'latin1') + + def make_literal_wrapper(reference): + if isinstance(reference, text_type): + return _identity + return _latin1_encode + + def normalize_string_tuple(tup): + """Ensures that all types in the tuple are either strings + or bytes. + """ + tupiter = iter(tup) + is_text = isinstance(next(tupiter, None), text_type) + for arg in tupiter: + if isinstance(arg, text_type) != is_text: + raise TypeError('Cannot mix str and bytes arguments (got %s)' + % repr(tup)) + return tup + + try_coerce_native = _identity + wsgi_get_bytes = _latin1_encode + + def wsgi_decoding_dance(s, charset='utf-8', errors='replace'): + return s.encode('latin1').decode(charset, errors) + + def wsgi_encoding_dance(s, charset='utf-8', errors='replace'): + if isinstance(s, text_type): + s = s.encode(charset) + return s.decode('latin1', errors) + + def to_bytes(x, charset=sys.getdefaultencoding(), errors='strict'): + if x is None: + return None + if isinstance(x, (bytes, bytearray, memoryview)): # noqa + return bytes(x) + if isinstance(x, str): + return x.encode(charset, errors) + raise TypeError('Expected bytes') + + def to_native(x, charset=sys.getdefaultencoding(), errors='strict'): + if x is None or isinstance(x, str): + return x + return x.decode(charset, errors) + + +def to_unicode(x, charset=sys.getdefaultencoding(), errors='strict', + allow_none_charset=False): + if x is None: + return None + if not isinstance(x, bytes): + return text_type(x) + if charset is None and allow_none_charset: + return x + return x.decode(charset, errors) diff --git a/pype/vendor/werkzeug/_internal.py b/pype/vendor/werkzeug/_internal.py new file mode 100644 index 0000000000..28bfd9fe4a --- /dev/null +++ b/pype/vendor/werkzeug/_internal.py @@ -0,0 +1,419 @@ +# -*- coding: utf-8 -*- +""" + werkzeug._internal + ~~~~~~~~~~~~~~~~~~ + + This module provides internally used helpers and constants. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import re +import string +import inspect +from weakref import WeakKeyDictionary +from datetime import datetime, date +from itertools import chain + +from werkzeug._compat import iter_bytes, text_type, BytesIO, int_to_byte, \ + range_type, integer_types + + +_logger = None +_empty_stream = BytesIO() +_signature_cache = WeakKeyDictionary() +_epoch_ord = date(1970, 1, 1).toordinal() +_cookie_params = set((b'expires', b'path', b'comment', + b'max-age', b'secure', b'httponly', + b'version')) +_legal_cookie_chars = (string.ascii_letters + + string.digits + + u"/=!#$%&'*+-.^_`|~:").encode('ascii') + +_cookie_quoting_map = { + b',': b'\\054', + b';': b'\\073', + b'"': b'\\"', + b'\\': b'\\\\', +} +for _i in chain(range_type(32), range_type(127, 256)): + _cookie_quoting_map[int_to_byte(_i)] = ('\\%03o' % _i).encode('latin1') + + +_octal_re = re.compile(br'\\[0-3][0-7][0-7]') +_quote_re = re.compile(br'[\\].') +_legal_cookie_chars_re = br'[\w\d!#%&\'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=]' +_cookie_re = re.compile(br""" + (?P[^=;]+) + (?:\s*=\s* + (?P + "(?:[^\\"]|\\.)*" | + (?:.*?) + ) + )? + \s*; +""", flags=re.VERBOSE) + + +class _Missing(object): + + def __repr__(self): + return 'no value' + + def __reduce__(self): + return '_missing' + +_missing = _Missing() + + +def _get_environ(obj): + env = getattr(obj, 'environ', obj) + assert isinstance(env, dict), \ + '%r is not a WSGI environment (has to be a dict)' % type(obj).__name__ + return env + + +def _log(type, message, *args, **kwargs): + """Log into the internal werkzeug logger.""" + global _logger + if _logger is None: + import logging + _logger = logging.getLogger('werkzeug') + # Only set up a default log handler if the + # end-user application didn't set anything up. + if not logging.root.handlers and _logger.level == logging.NOTSET: + _logger.setLevel(logging.INFO) + handler = logging.StreamHandler() + _logger.addHandler(handler) + getattr(_logger, type)(message.rstrip(), *args, **kwargs) + + +def _parse_signature(func): + """Return a signature object for the function.""" + if hasattr(func, 'im_func'): + func = func.im_func + + # if we have a cached validator for this function, return it + parse = _signature_cache.get(func) + if parse is not None: + return parse + + # inspect the function signature and collect all the information + if hasattr(inspect, 'getfullargspec'): + tup = inspect.getfullargspec(func) + else: + tup = inspect.getargspec(func) + positional, vararg_var, kwarg_var, defaults = tup[:4] + defaults = defaults or () + arg_count = len(positional) + arguments = [] + for idx, name in enumerate(positional): + if isinstance(name, list): + raise TypeError('cannot parse functions that unpack tuples ' + 'in the function signature') + try: + default = defaults[idx - arg_count] + except IndexError: + param = (name, False, None) + else: + param = (name, True, default) + arguments.append(param) + arguments = tuple(arguments) + + def parse(args, kwargs): + new_args = [] + missing = [] + extra = {} + + # consume as many arguments as positional as possible + for idx, (name, has_default, default) in enumerate(arguments): + try: + new_args.append(args[idx]) + except IndexError: + try: + new_args.append(kwargs.pop(name)) + except KeyError: + if has_default: + new_args.append(default) + else: + missing.append(name) + else: + if name in kwargs: + extra[name] = kwargs.pop(name) + + # handle extra arguments + extra_positional = args[arg_count:] + if vararg_var is not None: + new_args.extend(extra_positional) + extra_positional = () + if kwargs and kwarg_var is None: + extra.update(kwargs) + kwargs = {} + + return new_args, kwargs, missing, extra, extra_positional, \ + arguments, vararg_var, kwarg_var + _signature_cache[func] = parse + return parse + + +def _date_to_unix(arg): + """Converts a timetuple, integer or datetime object into the seconds from + epoch in utc. + """ + if isinstance(arg, datetime): + arg = arg.utctimetuple() + elif isinstance(arg, integer_types + (float,)): + return int(arg) + year, month, day, hour, minute, second = arg[:6] + days = date(year, month, 1).toordinal() - _epoch_ord + day - 1 + hours = days * 24 + hour + minutes = hours * 60 + minute + seconds = minutes * 60 + second + return seconds + + +class _DictAccessorProperty(object): + + """Baseclass for `environ_property` and `header_property`.""" + read_only = False + + def __init__(self, name, default=None, load_func=None, dump_func=None, + read_only=None, doc=None): + self.name = name + self.default = default + self.load_func = load_func + self.dump_func = dump_func + if read_only is not None: + self.read_only = read_only + self.__doc__ = doc + + def __get__(self, obj, type=None): + if obj is None: + return self + storage = self.lookup(obj) + if self.name not in storage: + return self.default + rv = storage[self.name] + if self.load_func is not None: + try: + rv = self.load_func(rv) + except (ValueError, TypeError): + rv = self.default + return rv + + def __set__(self, obj, value): + if self.read_only: + raise AttributeError('read only property') + if self.dump_func is not None: + value = self.dump_func(value) + self.lookup(obj)[self.name] = value + + def __delete__(self, obj): + if self.read_only: + raise AttributeError('read only property') + self.lookup(obj).pop(self.name, None) + + def __repr__(self): + return '<%s %s>' % ( + self.__class__.__name__, + self.name + ) + + +def _cookie_quote(b): + buf = bytearray() + all_legal = True + _lookup = _cookie_quoting_map.get + _push = buf.extend + + for char in iter_bytes(b): + if char not in _legal_cookie_chars: + all_legal = False + char = _lookup(char, char) + _push(char) + + if all_legal: + return bytes(buf) + return bytes(b'"' + buf + b'"') + + +def _cookie_unquote(b): + if len(b) < 2: + return b + if b[:1] != b'"' or b[-1:] != b'"': + return b + + b = b[1:-1] + + i = 0 + n = len(b) + rv = bytearray() + _push = rv.extend + + while 0 <= i < n: + o_match = _octal_re.search(b, i) + q_match = _quote_re.search(b, i) + if not o_match and not q_match: + rv.extend(b[i:]) + break + j = k = -1 + if o_match: + j = o_match.start(0) + if q_match: + k = q_match.start(0) + if q_match and (not o_match or k < j): + _push(b[i:k]) + _push(b[k + 1:k + 2]) + i = k + 2 + else: + _push(b[i:j]) + rv.append(int(b[j + 1:j + 4], 8)) + i = j + 4 + + return bytes(rv) + + +def _cookie_parse_impl(b): + """Lowlevel cookie parsing facility that operates on bytes.""" + i = 0 + n = len(b) + + while i < n: + match = _cookie_re.search(b + b';', i) + if not match: + break + + key = match.group('key').strip() + value = match.group('val') or b'' + i = match.end(0) + + # Ignore parameters. We have no interest in them. + if key.lower() not in _cookie_params: + yield _cookie_unquote(key), _cookie_unquote(value) + + +def _encode_idna(domain): + # If we're given bytes, make sure they fit into ASCII + if not isinstance(domain, text_type): + domain.decode('ascii') + return domain + + # Otherwise check if it's already ascii, then return + try: + return domain.encode('ascii') + except UnicodeError: + pass + + # Otherwise encode each part separately + parts = domain.split('.') + for idx, part in enumerate(parts): + parts[idx] = part.encode('idna') + return b'.'.join(parts) + + +def _decode_idna(domain): + # If the input is a string try to encode it to ascii to + # do the idna decoding. if that fails because of an + # unicode error, then we already have a decoded idna domain + if isinstance(domain, text_type): + try: + domain = domain.encode('ascii') + except UnicodeError: + return domain + + # Decode each part separately. If a part fails, try to + # decode it with ascii and silently ignore errors. This makes + # most sense because the idna codec does not have error handling + parts = domain.split(b'.') + for idx, part in enumerate(parts): + try: + parts[idx] = part.decode('idna') + except UnicodeError: + parts[idx] = part.decode('ascii', 'ignore') + + return '.'.join(parts) + + +def _make_cookie_domain(domain): + if domain is None: + return None + domain = _encode_idna(domain) + if b':' in domain: + domain = domain.split(b':', 1)[0] + if b'.' in domain: + return domain + raise ValueError( + 'Setting \'domain\' for a cookie on a server running locally (ex: ' + 'localhost) is not supported by complying browsers. You should ' + 'have something like: \'127.0.0.1 localhost dev.localhost\' on ' + 'your hosts file and then point your server to run on ' + '\'dev.localhost\' and also set \'domain\' for \'dev.localhost\'' + ) + + +def _easteregg(app=None): + """Like the name says. But who knows how it works?""" + def bzzzzzzz(gyver): + import base64 + import zlib + return zlib.decompress(base64.b64decode(gyver)).decode('ascii') + gyver = u'\n'.join([x + (77 - len(x)) * u' ' for x in bzzzzzzz(b''' +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 +7f2zLkGNv8b191cD/3vs9Q833z8t''').splitlines()]) + + def easteregged(environ, start_response): + def injecting_start_response(status, headers, exc_info=None): + headers.append(('X-Powered-By', 'Werkzeug')) + return start_response(status, headers, exc_info) + if app is not None and environ.get('QUERY_STRING') != 'macgybarchakku': + return app(environ, injecting_start_response) + injecting_start_response('200 OK', [('Content-Type', 'text/html')]) + return [(u''' + + + +About Werkzeug + + + +
    +

    the Swiss Army knife of Python web development.

    +
    %s\n\n\n
    + +''' % gyver).encode('latin1')] + return easteregged diff --git a/pype/vendor/werkzeug/_reloader.py b/pype/vendor/werkzeug/_reloader.py new file mode 100644 index 0000000000..0d23dba4eb --- /dev/null +++ b/pype/vendor/werkzeug/_reloader.py @@ -0,0 +1,277 @@ +import os +import sys +import time +import subprocess +import threading +from itertools import chain + +from werkzeug._internal import _log +from werkzeug._compat import PY2, iteritems, text_type + + +def _iter_module_files(): + """This iterates over all relevant Python files. It goes through all + loaded files from modules, all files in folders of already loaded modules + as well as all files reachable through a package. + """ + # The list call is necessary on Python 3 in case the module + # dictionary modifies during iteration. + for module in list(sys.modules.values()): + if module is None: + continue + filename = getattr(module, '__file__', None) + if filename: + if os.path.isdir(filename) and \ + os.path.exists(os.path.join(filename, "__init__.py")): + filename = os.path.join(filename, "__init__.py") + + old = None + while not os.path.isfile(filename): + old = filename + filename = os.path.dirname(filename) + if filename == old: + break + else: + if filename[-4:] in ('.pyc', '.pyo'): + filename = filename[:-1] + yield filename + + +def _find_observable_paths(extra_files=None): + """Finds all paths that should be observed.""" + rv = set(os.path.dirname(os.path.abspath(x)) + if os.path.isfile(x) else os.path.abspath(x) + for x in sys.path) + + for filename in extra_files or (): + rv.add(os.path.dirname(os.path.abspath(filename))) + + for module in list(sys.modules.values()): + fn = getattr(module, '__file__', None) + if fn is None: + continue + fn = os.path.abspath(fn) + rv.add(os.path.dirname(fn)) + + return _find_common_roots(rv) + + +def _get_args_for_reloading(): + """Returns the executable. This contains a workaround for windows + if the executable is incorrectly reported to not have the .exe + extension which can cause bugs on reloading. + """ + rv = [sys.executable] + py_script = sys.argv[0] + if os.name == 'nt' and not os.path.exists(py_script) and \ + os.path.exists(py_script + '.exe'): + py_script += '.exe' + if os.path.splitext(rv[0])[1] == '.exe' and os.path.splitext(py_script)[1] == '.exe': + rv.pop(0) + rv.append(py_script) + rv.extend(sys.argv[1:]) + return rv + + +def _find_common_roots(paths): + """Out of some paths it finds the common roots that need monitoring.""" + paths = [x.split(os.path.sep) for x in paths] + root = {} + for chunks in sorted(paths, key=len, reverse=True): + node = root + for chunk in chunks: + node = node.setdefault(chunk, {}) + node.clear() + + rv = set() + + def _walk(node, path): + for prefix, child in iteritems(node): + _walk(child, path + (prefix,)) + if not node: + rv.add('/'.join(path)) + _walk(root, ()) + return rv + + +class ReloaderLoop(object): + name = None + + # monkeypatched by testsuite. wrapping with `staticmethod` is required in + # case time.sleep has been replaced by a non-c function (e.g. by + # `eventlet.monkey_patch`) before we get here + _sleep = staticmethod(time.sleep) + + def __init__(self, extra_files=None, interval=1): + self.extra_files = set(os.path.abspath(x) + for x in extra_files or ()) + self.interval = interval + + def run(self): + pass + + def restart_with_reloader(self): + """Spawn a new Python interpreter with the same arguments as this one, + but running the reloader thread. + """ + while 1: + _log('info', ' * Restarting with %s' % self.name) + args = _get_args_for_reloading() + new_environ = os.environ.copy() + new_environ['WERKZEUG_RUN_MAIN'] = 'true' + + # a weird bug on windows. sometimes unicode strings end up in the + # environment and subprocess.call does not like this, encode them + # to latin1 and continue. + if os.name == 'nt' and PY2: + for key, value in iteritems(new_environ): + if isinstance(value, text_type): + new_environ[key] = value.encode('iso-8859-1') + + exit_code = subprocess.call(args, env=new_environ, + close_fds=False) + if exit_code != 3: + return exit_code + + def trigger_reload(self, filename): + self.log_reload(filename) + sys.exit(3) + + def log_reload(self, filename): + filename = os.path.abspath(filename) + _log('info', ' * Detected change in %r, reloading' % filename) + + +class StatReloaderLoop(ReloaderLoop): + name = 'stat' + + def run(self): + mtimes = {} + while 1: + for filename in chain(_iter_module_files(), + self.extra_files): + try: + mtime = os.stat(filename).st_mtime + except OSError: + continue + + old_time = mtimes.get(filename) + if old_time is None: + mtimes[filename] = mtime + continue + elif mtime > old_time: + self.trigger_reload(filename) + self._sleep(self.interval) + + +class WatchdogReloaderLoop(ReloaderLoop): + + def __init__(self, *args, **kwargs): + ReloaderLoop.__init__(self, *args, **kwargs) + from watchdog.observers import Observer + from watchdog.events import FileSystemEventHandler + self.observable_paths = set() + + def _check_modification(filename): + if filename in self.extra_files: + self.trigger_reload(filename) + dirname = os.path.dirname(filename) + if dirname.startswith(tuple(self.observable_paths)): + if filename.endswith(('.pyc', '.pyo', '.py')): + self.trigger_reload(filename) + + class _CustomHandler(FileSystemEventHandler): + + def on_created(self, event): + _check_modification(event.src_path) + + def on_modified(self, event): + _check_modification(event.src_path) + + def on_moved(self, event): + _check_modification(event.src_path) + _check_modification(event.dest_path) + + def on_deleted(self, event): + _check_modification(event.src_path) + + reloader_name = Observer.__name__.lower() + if reloader_name.endswith('observer'): + reloader_name = reloader_name[:-8] + reloader_name += ' reloader' + + self.name = reloader_name + + self.observer_class = Observer + self.event_handler = _CustomHandler() + self.should_reload = False + + def trigger_reload(self, filename): + # This is called inside an event handler, which means throwing + # SystemExit has no effect. + # https://github.com/gorakhargosh/watchdog/issues/294 + self.should_reload = True + self.log_reload(filename) + + def run(self): + watches = {} + observer = self.observer_class() + observer.start() + + try: + while not self.should_reload: + to_delete = set(watches) + paths = _find_observable_paths(self.extra_files) + for path in paths: + if path not in watches: + try: + watches[path] = observer.schedule( + self.event_handler, path, recursive=True) + except OSError: + # Clear this path from list of watches We don't want + # the same error message showing again in the next + # iteration. + watches[path] = None + to_delete.discard(path) + for path in to_delete: + watch = watches.pop(path, None) + if watch is not None: + observer.unschedule(watch) + self.observable_paths = paths + self._sleep(self.interval) + finally: + observer.stop() + observer.join() + + sys.exit(3) + + +reloader_loops = { + 'stat': StatReloaderLoop, + 'watchdog': WatchdogReloaderLoop, +} + +try: + __import__('watchdog.observers') +except ImportError: + reloader_loops['auto'] = reloader_loops['stat'] +else: + reloader_loops['auto'] = reloader_loops['watchdog'] + + +def run_with_reloader(main_func, extra_files=None, interval=1, + reloader_type='auto'): + """Run the given function in an independent python interpreter.""" + import signal + reloader = reloader_loops[reloader_type](extra_files, interval) + signal.signal(signal.SIGTERM, lambda *args: sys.exit(0)) + try: + if os.environ.get('WERKZEUG_RUN_MAIN') == 'true': + t = threading.Thread(target=main_func, args=()) + t.setDaemon(True) + t.start() + reloader.run() + else: + sys.exit(reloader.restart_with_reloader()) + except KeyboardInterrupt: + pass diff --git a/pype/vendor/werkzeug/contrib/__init__.py b/pype/vendor/werkzeug/contrib/__init__.py new file mode 100644 index 0000000000..3e572ebed1 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/__init__.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib + ~~~~~~~~~~~~~~~~ + + Contains user-submitted code that other users may find useful, but which + is not part of the Werkzeug core. Anyone can write code for inclusion in + the `contrib` package. All modules in this package are distributed as an + add-on library and thus are not part of Werkzeug itself. + + This file itself is mostly for informational purposes and to tell the + Python interpreter that `contrib` is a package. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" diff --git a/pype/vendor/werkzeug/contrib/atom.py b/pype/vendor/werkzeug/contrib/atom.py new file mode 100644 index 0000000000..51d1a4e641 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/atom.py @@ -0,0 +1,355 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.atom + ~~~~~~~~~~~~~~~~~~~~~ + + This module provides a class called :class:`AtomFeed` which can be + used to generate feeds in the Atom syndication format (see :rfc:`4287`). + + Example:: + + def atom_feed(request): + feed = AtomFeed("My Blog", feed_url=request.url, + url=request.host_url, + subtitle="My example blog for a feed test.") + for post in Post.query.limit(10).all(): + feed.add(post.title, post.body, content_type='html', + author=post.author, url=post.url, id=post.uid, + updated=post.last_update, published=post.pub_date) + return feed.get_response() + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +from datetime import datetime + +from werkzeug.utils import escape +from werkzeug.wrappers import BaseResponse +from werkzeug._compat import implements_to_string, string_types + + +XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml' + + +def _make_text_block(name, content, content_type=None): + """Helper function for the builder that creates an XML text block.""" + if content_type == 'xhtml': + return u'<%s type="xhtml">
    %s
    \n' % \ + (name, XHTML_NAMESPACE, content, name) + if not content_type: + return u'<%s>%s\n' % (name, escape(content), name) + return u'<%s type="%s">%s\n' % (name, content_type, + escape(content), name) + + +def format_iso8601(obj): + """Format a datetime object for iso8601""" + iso8601 = obj.isoformat() + if obj.tzinfo: + return iso8601 + return iso8601 + 'Z' + + +@implements_to_string +class AtomFeed(object): + + """A helper class that creates Atom feeds. + + :param title: the title of the feed. Required. + :param title_type: the type attribute for the title element. One of + ``'html'``, ``'text'`` or ``'xhtml'``. + :param url: the url for the feed (not the url *of* the feed) + :param id: a globally unique id for the feed. Must be an URI. If + not present the `feed_url` is used, but one of both is + required. + :param updated: the time the feed was modified the last time. Must + be a :class:`datetime.datetime` object. If not + present the latest entry's `updated` is used. + Treated as UTC if naive datetime. + :param feed_url: the URL to the feed. Should be the URL that was + requested. + :param author: the author of the feed. Must be either a string (the + name) or a dict with name (required) and uri or + email (both optional). Can be a list of (may be + mixed, too) strings and dicts, too, if there are + multiple authors. Required if not every entry has an + author element. + :param icon: an icon for the feed. + :param logo: a logo for the feed. + :param rights: copyright information for the feed. + :param rights_type: the type attribute for the rights element. One of + ``'html'``, ``'text'`` or ``'xhtml'``. Default is + ``'text'``. + :param subtitle: a short description of the feed. + :param subtitle_type: the type attribute for the subtitle element. + One of ``'text'``, ``'html'``, ``'text'`` + or ``'xhtml'``. Default is ``'text'``. + :param links: additional links. Must be a list of dictionaries with + href (required) and rel, type, hreflang, title, length + (all optional) + :param generator: the software that generated this feed. This must be + a tuple in the form ``(name, url, version)``. If + you don't want to specify one of them, set the item + to `None`. + :param entries: a list with the entries for the feed. Entries can also + be added later with :meth:`add`. + + For more information on the elements see + http://www.atomenabled.org/developers/syndication/ + + Everywhere where a list is demanded, any iterable can be used. + """ + + default_generator = ('Werkzeug', None, None) + + def __init__(self, title=None, entries=None, **kwargs): + self.title = title + self.title_type = kwargs.get('title_type', 'text') + self.url = kwargs.get('url') + self.feed_url = kwargs.get('feed_url', self.url) + self.id = kwargs.get('id', self.feed_url) + self.updated = kwargs.get('updated') + self.author = kwargs.get('author', ()) + self.icon = kwargs.get('icon') + self.logo = kwargs.get('logo') + self.rights = kwargs.get('rights') + self.rights_type = kwargs.get('rights_type') + self.subtitle = kwargs.get('subtitle') + self.subtitle_type = kwargs.get('subtitle_type', 'text') + self.generator = kwargs.get('generator') + if self.generator is None: + self.generator = self.default_generator + self.links = kwargs.get('links', []) + self.entries = entries and list(entries) or [] + + if not hasattr(self.author, '__iter__') \ + or isinstance(self.author, string_types + (dict,)): + self.author = [self.author] + for i, author in enumerate(self.author): + if not isinstance(author, dict): + self.author[i] = {'name': author} + + if not self.title: + raise ValueError('title is required') + if not self.id: + raise ValueError('id is required') + for author in self.author: + if 'name' not in author: + raise TypeError('author must contain at least a name') + + def add(self, *args, **kwargs): + """Add a new entry to the feed. This function can either be called + with a :class:`FeedEntry` or some keyword and positional arguments + that are forwarded to the :class:`FeedEntry` constructor. + """ + if len(args) == 1 and not kwargs and isinstance(args[0], FeedEntry): + self.entries.append(args[0]) + else: + kwargs['feed_url'] = self.feed_url + self.entries.append(FeedEntry(*args, **kwargs)) + + def __repr__(self): + return '<%s %r (%d entries)>' % ( + self.__class__.__name__, + self.title, + len(self.entries) + ) + + def generate(self): + """Return a generator that yields pieces of XML.""" + # atom demands either an author element in every entry or a global one + if not self.author: + if any(not e.author for e in self.entries): + self.author = ({'name': 'Unknown author'},) + + if not self.updated: + dates = sorted([entry.updated for entry in self.entries]) + self.updated = dates and dates[-1] or datetime.utcnow() + + yield u'\n' + yield u'\n' + yield ' ' + _make_text_block('title', self.title, self.title_type) + yield u' %s\n' % escape(self.id) + yield u' %s\n' % format_iso8601(self.updated) + if self.url: + yield u' \n' % escape(self.url) + if self.feed_url: + yield u' \n' % \ + escape(self.feed_url) + for link in self.links: + yield u' \n' % ''.join('%s="%s" ' % + (k, escape(link[k])) for k in link) + for author in self.author: + yield u' \n' + yield u' %s\n' % escape(author['name']) + if 'uri' in author: + yield u' %s\n' % escape(author['uri']) + if 'email' in author: + yield ' %s\n' % escape(author['email']) + yield ' \n' + if self.subtitle: + yield ' ' + _make_text_block('subtitle', self.subtitle, + self.subtitle_type) + if self.icon: + yield u' %s\n' % escape(self.icon) + if self.logo: + yield u' %s\n' % escape(self.logo) + if self.rights: + yield ' ' + _make_text_block('rights', self.rights, + self.rights_type) + generator_name, generator_url, generator_version = self.generator + if generator_name or generator_url or generator_version: + tmp = [u' %s\n' % escape(generator_name)) + yield u''.join(tmp) + for entry in self.entries: + for line in entry.generate(): + yield u' ' + line + yield u'\n' + + def to_string(self): + """Convert the feed into a string.""" + return u''.join(self.generate()) + + def get_response(self): + """Return a response object for the feed.""" + return BaseResponse(self.to_string(), mimetype='application/atom+xml') + + def __call__(self, environ, start_response): + """Use the class as WSGI response object.""" + return self.get_response()(environ, start_response) + + def __str__(self): + return self.to_string() + + +@implements_to_string +class FeedEntry(object): + + """Represents a single entry in a feed. + + :param title: the title of the entry. Required. + :param title_type: the type attribute for the title element. One of + ``'html'``, ``'text'`` or ``'xhtml'``. + :param content: the content of the entry. + :param content_type: the type attribute for the content element. One + of ``'html'``, ``'text'`` or ``'xhtml'``. + :param summary: a summary of the entry's content. + :param summary_type: the type attribute for the summary element. One + of ``'html'``, ``'text'`` or ``'xhtml'``. + :param url: the url for the entry. + :param id: a globally unique id for the entry. Must be an URI. If + not present the URL is used, but one of both is required. + :param updated: the time the entry was modified the last time. Must + be a :class:`datetime.datetime` object. Treated as + UTC if naive datetime. Required. + :param author: the author of the entry. Must be either a string (the + name) or a dict with name (required) and uri or + email (both optional). Can be a list of (may be + mixed, too) strings and dicts, too, if there are + multiple authors. Required if the feed does not have an + author element. + :param published: the time the entry was initially published. Must + be a :class:`datetime.datetime` object. Treated as + UTC if naive datetime. + :param rights: copyright information for the entry. + :param rights_type: the type attribute for the rights element. One of + ``'html'``, ``'text'`` or ``'xhtml'``. Default is + ``'text'``. + :param links: additional links. Must be a list of dictionaries with + href (required) and rel, type, hreflang, title, length + (all optional) + :param categories: categories for the entry. Must be a list of dictionaries + with term (required), scheme and label (all optional) + :param xml_base: The xml base (url) for this feed item. If not provided + it will default to the item url. + + For more information on the elements see + http://www.atomenabled.org/developers/syndication/ + + Everywhere where a list is demanded, any iterable can be used. + """ + + def __init__(self, title=None, content=None, feed_url=None, **kwargs): + self.title = title + self.title_type = kwargs.get('title_type', 'text') + self.content = content + self.content_type = kwargs.get('content_type', 'html') + self.url = kwargs.get('url') + self.id = kwargs.get('id', self.url) + self.updated = kwargs.get('updated') + self.summary = kwargs.get('summary') + self.summary_type = kwargs.get('summary_type', 'html') + self.author = kwargs.get('author', ()) + self.published = kwargs.get('published') + self.rights = kwargs.get('rights') + self.links = kwargs.get('links', []) + self.categories = kwargs.get('categories', []) + self.xml_base = kwargs.get('xml_base', feed_url) + + if not hasattr(self.author, '__iter__') \ + or isinstance(self.author, string_types + (dict,)): + self.author = [self.author] + for i, author in enumerate(self.author): + if not isinstance(author, dict): + self.author[i] = {'name': author} + + if not self.title: + raise ValueError('title is required') + if not self.id: + raise ValueError('id is required') + if not self.updated: + raise ValueError('updated is required') + + def __repr__(self): + return '<%s %r>' % ( + self.__class__.__name__, + self.title + ) + + def generate(self): + """Yields pieces of ATOM XML.""" + base = '' + if self.xml_base: + base = ' xml:base="%s"' % escape(self.xml_base) + yield u'\n' % base + yield u' ' + _make_text_block('title', self.title, self.title_type) + yield u' %s\n' % escape(self.id) + yield u' %s\n' % format_iso8601(self.updated) + if self.published: + yield u' %s\n' % \ + format_iso8601(self.published) + if self.url: + yield u' \n' % escape(self.url) + for author in self.author: + yield u' \n' + yield u' %s\n' % escape(author['name']) + if 'uri' in author: + yield u' %s\n' % escape(author['uri']) + if 'email' in author: + yield u' %s\n' % escape(author['email']) + yield u' \n' + for link in self.links: + yield u' \n' % ''.join('%s="%s" ' % + (k, escape(link[k])) for k in link) + for category in self.categories: + yield u' \n' % ''.join('%s="%s" ' % + (k, escape(category[k])) for k in category) + if self.summary: + yield u' ' + _make_text_block('summary', self.summary, + self.summary_type) + if self.content: + yield u' ' + _make_text_block('content', self.content, + self.content_type) + yield u'\n' + + def to_string(self): + """Convert the feed item into a unicode object.""" + return u''.join(self.generate()) + + def __str__(self): + return self.to_string() diff --git a/pype/vendor/werkzeug/contrib/cache.py b/pype/vendor/werkzeug/contrib/cache.py new file mode 100644 index 0000000000..179ba24a81 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/cache.py @@ -0,0 +1,913 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.cache + ~~~~~~~~~~~~~~~~~~~~~~ + + The main problem with dynamic Web sites is, well, they're dynamic. Each + time a user requests a page, the webserver executes a lot of code, queries + the database, renders templates until the visitor gets the page he sees. + + This is a lot more expensive than just loading a file from the file system + and sending it to the visitor. + + For most Web applications, this overhead isn't a big deal but once it + becomes, you will be glad to have a cache system in place. + + How Caching Works + ================= + + Caching is pretty simple. Basically you have a cache object lurking around + somewhere that is connected to a remote cache or the file system or + something else. When the request comes in you check if the current page + is already in the cache and if so, you're returning it from the cache. + Otherwise you generate the page and put it into the cache. (Or a fragment + of the page, you don't have to cache the full thing) + + Here is a simple example of how to cache a sidebar for 5 minutes:: + + def get_sidebar(user): + identifier = 'sidebar_for/user%d' % user.id + value = cache.get(identifier) + if value is not None: + return value + value = generate_sidebar_for(user=user) + cache.set(identifier, value, timeout=60 * 5) + return value + + Creating a Cache Object + ======================= + + To create a cache object you just import the cache system of your choice + from the cache module and instantiate it. Then you can start working + with that object: + + >>> from werkzeug.contrib.cache import SimpleCache + >>> c = SimpleCache() + >>> c.set("foo", "value") + >>> c.get("foo") + 'value' + >>> c.get("missing") is None + True + + Please keep in mind that you have to create the cache and put it somewhere + you have access to it (either as a module global you can import or you just + put it into your WSGI application). + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import os +import re +import errno +import tempfile +import platform +from hashlib import md5 +from time import time +try: + import cPickle as pickle +except ImportError: # pragma: no cover + import pickle + +from werkzeug._compat import iteritems, string_types, text_type, \ + integer_types, to_native +from werkzeug.posixemulation import rename + + +def _items(mappingorseq): + """Wrapper for efficient iteration over mappings represented by dicts + or sequences:: + + >>> for k, v in _items((i, i*i) for i in xrange(5)): + ... assert k*k == v + + >>> for k, v in _items(dict((i, i*i) for i in xrange(5))): + ... assert k*k == v + + """ + if hasattr(mappingorseq, 'items'): + return iteritems(mappingorseq) + return mappingorseq + + +class BaseCache(object): + + """Baseclass for the cache systems. All the cache systems implement this + API or a superset of it. + + :param default_timeout: the default timeout (in seconds) that is used if + no timeout is specified on :meth:`set`. A timeout + of 0 indicates that the cache never expires. + """ + + def __init__(self, default_timeout=300): + self.default_timeout = default_timeout + + def _normalize_timeout(self, timeout): + if timeout is None: + timeout = self.default_timeout + return timeout + + def get(self, key): + """Look up key in the cache and return the value for it. + + :param key: the key to be looked up. + :returns: The value if it exists and is readable, else ``None``. + """ + return None + + def delete(self, key): + """Delete `key` from the cache. + + :param key: the key to delete. + :returns: Whether the key existed and has been deleted. + :rtype: boolean + """ + return True + + def get_many(self, *keys): + """Returns a list of values for the given keys. + For each key an item in the list is created:: + + foo, bar = cache.get_many("foo", "bar") + + Has the same error handling as :meth:`get`. + + :param keys: The function accepts multiple keys as positional + arguments. + """ + return [self.get(k) for k in keys] + + def get_dict(self, *keys): + """Like :meth:`get_many` but return a dict:: + + d = cache.get_dict("foo", "bar") + foo = d["foo"] + bar = d["bar"] + + :param keys: The function accepts multiple keys as positional + arguments. + """ + return dict(zip(keys, self.get_many(*keys))) + + def set(self, key, value, timeout=None): + """Add a new key/value to the cache (overwrites value, if key already + exists in the cache). + + :param key: the key to set + :param value: the value for the key + :param timeout: the cache timeout for the key in seconds (if not + specified, it uses the default timeout). A timeout of + 0 idicates that the cache never expires. + :returns: ``True`` if key has been updated, ``False`` for backend + errors. Pickling errors, however, will raise a subclass of + ``pickle.PickleError``. + :rtype: boolean + """ + return True + + def add(self, key, value, timeout=None): + """Works like :meth:`set` but does not overwrite the values of already + existing keys. + + :param key: the key to set + :param value: the value for the key + :param timeout: the cache timeout for the key in seconds (if not + specified, it uses the default timeout). A timeout of + 0 idicates that the cache never expires. + :returns: Same as :meth:`set`, but also ``False`` for already + existing keys. + :rtype: boolean + """ + return True + + def set_many(self, mapping, timeout=None): + """Sets multiple keys and values from a mapping. + + :param mapping: a mapping with the keys/values to set. + :param timeout: the cache timeout for the key in seconds (if not + specified, it uses the default timeout). A timeout of + 0 idicates that the cache never expires. + :returns: Whether all given keys have been set. + :rtype: boolean + """ + rv = True + for key, value in _items(mapping): + if not self.set(key, value, timeout): + rv = False + return rv + + def delete_many(self, *keys): + """Deletes multiple keys at once. + + :param keys: The function accepts multiple keys as positional + arguments. + :returns: Whether all given keys have been deleted. + :rtype: boolean + """ + return all(self.delete(key) for key in keys) + + def has(self, key): + """Checks if a key exists in the cache without returning it. This is a + cheap operation that bypasses loading the actual data on the backend. + + This method is optional and may not be implemented on all caches. + + :param key: the key to check + """ + raise NotImplementedError( + '%s doesn\'t have an efficient implementation of `has`. That ' + 'means it is impossible to check whether a key exists without ' + 'fully loading the key\'s data. Consider using `self.get` ' + 'explicitly if you don\'t care about performance.' + ) + + def clear(self): + """Clears the cache. Keep in mind that not all caches support + completely clearing the cache. + + :returns: Whether the cache has been cleared. + :rtype: boolean + """ + return True + + def inc(self, key, delta=1): + """Increments the value of a key by `delta`. If the key does + not yet exist it is initialized with `delta`. + + For supporting caches this is an atomic operation. + + :param key: the key to increment. + :param delta: the delta to add. + :returns: The new value or ``None`` for backend errors. + """ + value = (self.get(key) or 0) + delta + return value if self.set(key, value) else None + + def dec(self, key, delta=1): + """Decrements the value of a key by `delta`. If the key does + not yet exist it is initialized with `-delta`. + + For supporting caches this is an atomic operation. + + :param key: the key to increment. + :param delta: the delta to subtract. + :returns: The new value or `None` for backend errors. + """ + value = (self.get(key) or 0) - delta + return value if self.set(key, value) else None + + +class NullCache(BaseCache): + + """A cache that doesn't cache. This can be useful for unit testing. + + :param default_timeout: a dummy parameter that is ignored but exists + for API compatibility with other caches. + """ + + def has(self, key): + return False + + +class SimpleCache(BaseCache): + + """Simple memory cache for single process environments. This class exists + mainly for the development server and is not 100% thread safe. It tries + to use as many atomic operations as possible and no locks for simplicity + but it could happen under heavy load that keys are added multiple times. + + :param threshold: the maximum number of items the cache stores before + it starts deleting some. + :param default_timeout: the default timeout that is used if no timeout is + specified on :meth:`~BaseCache.set`. A timeout of + 0 indicates that the cache never expires. + """ + + def __init__(self, threshold=500, default_timeout=300): + BaseCache.__init__(self, default_timeout) + self._cache = {} + self.clear = self._cache.clear + self._threshold = threshold + + def _prune(self): + if len(self._cache) > self._threshold: + now = time() + toremove = [] + for idx, (key, (expires, _)) in enumerate(self._cache.items()): + if (expires != 0 and expires <= now) or idx % 3 == 0: + toremove.append(key) + for key in toremove: + self._cache.pop(key, None) + + def _normalize_timeout(self, timeout): + timeout = BaseCache._normalize_timeout(self, timeout) + if timeout > 0: + timeout = time() + timeout + return timeout + + def get(self, key): + try: + expires, value = self._cache[key] + if expires == 0 or expires > time(): + return pickle.loads(value) + except (KeyError, pickle.PickleError): + return None + + def set(self, key, value, timeout=None): + expires = self._normalize_timeout(timeout) + self._prune() + self._cache[key] = (expires, pickle.dumps(value, + pickle.HIGHEST_PROTOCOL)) + return True + + def add(self, key, value, timeout=None): + expires = self._normalize_timeout(timeout) + self._prune() + item = (expires, pickle.dumps(value, + pickle.HIGHEST_PROTOCOL)) + if key in self._cache: + return False + self._cache.setdefault(key, item) + return True + + def delete(self, key): + return self._cache.pop(key, None) is not None + + def has(self, key): + try: + expires, value = self._cache[key] + return expires == 0 or expires > time() + except KeyError: + return False + +_test_memcached_key = re.compile(r'[^\x00-\x21\xff]{1,250}$').match + + +class MemcachedCache(BaseCache): + + """A cache that uses memcached as backend. + + The first argument can either be an object that resembles the API of a + :class:`memcache.Client` or a tuple/list of server addresses. In the + event that a tuple/list is passed, Werkzeug tries to import the best + available memcache library. + + This cache looks into the following packages/modules to find bindings for + memcached: + + - ``pylibmc`` + - ``google.appengine.api.memcached`` + - ``memcached`` + - ``libmc`` + + Implementation notes: This cache backend works around some limitations in + memcached to simplify the interface. For example unicode keys are encoded + to utf-8 on the fly. Methods such as :meth:`~BaseCache.get_dict` return + the keys in the same format as passed. Furthermore all get methods + silently ignore key errors to not cause problems when untrusted user data + is passed to the get methods which is often the case in web applications. + + :param servers: a list or tuple of server addresses or alternatively + a :class:`memcache.Client` or a compatible client. + :param default_timeout: the default timeout that is used if no timeout is + specified on :meth:`~BaseCache.set`. A timeout of + 0 indicates that the cache never expires. + :param key_prefix: a prefix that is added before all keys. This makes it + possible to use the same memcached server for different + applications. Keep in mind that + :meth:`~BaseCache.clear` will also clear keys with a + different prefix. + """ + + def __init__(self, servers=None, default_timeout=300, key_prefix=None): + BaseCache.__init__(self, default_timeout) + if servers is None or isinstance(servers, (list, tuple)): + if servers is None: + servers = ['127.0.0.1:11211'] + self._client = self.import_preferred_memcache_lib(servers) + if self._client is None: + raise RuntimeError('no memcache module found') + else: + # NOTE: servers is actually an already initialized memcache + # client. + self._client = servers + + self.key_prefix = to_native(key_prefix) + + def _normalize_key(self, key): + key = to_native(key, 'utf-8') + if self.key_prefix: + key = self.key_prefix + key + return key + + def _normalize_timeout(self, timeout): + timeout = BaseCache._normalize_timeout(self, timeout) + if timeout > 0: + timeout = int(time()) + timeout + return timeout + + def get(self, key): + key = self._normalize_key(key) + # memcached doesn't support keys longer than that. Because often + # checks for so long keys can occur because it's tested from user + # submitted data etc we fail silently for getting. + if _test_memcached_key(key): + return self._client.get(key) + + def get_dict(self, *keys): + key_mapping = {} + have_encoded_keys = False + for key in keys: + encoded_key = self._normalize_key(key) + if not isinstance(key, str): + have_encoded_keys = True + if _test_memcached_key(key): + key_mapping[encoded_key] = key + _keys = list(key_mapping) + d = rv = self._client.get_multi(_keys) + if have_encoded_keys or self.key_prefix: + rv = {} + for key, value in iteritems(d): + rv[key_mapping[key]] = value + if len(rv) < len(keys): + for key in keys: + if key not in rv: + rv[key] = None + return rv + + def add(self, key, value, timeout=None): + key = self._normalize_key(key) + timeout = self._normalize_timeout(timeout) + return self._client.add(key, value, timeout) + + def set(self, key, value, timeout=None): + key = self._normalize_key(key) + timeout = self._normalize_timeout(timeout) + return self._client.set(key, value, timeout) + + def get_many(self, *keys): + d = self.get_dict(*keys) + return [d[key] for key in keys] + + def set_many(self, mapping, timeout=None): + new_mapping = {} + for key, value in _items(mapping): + key = self._normalize_key(key) + new_mapping[key] = value + + timeout = self._normalize_timeout(timeout) + failed_keys = self._client.set_multi(new_mapping, timeout) + return not failed_keys + + def delete(self, key): + key = self._normalize_key(key) + if _test_memcached_key(key): + return self._client.delete(key) + + def delete_many(self, *keys): + new_keys = [] + for key in keys: + key = self._normalize_key(key) + if _test_memcached_key(key): + new_keys.append(key) + return self._client.delete_multi(new_keys) + + def has(self, key): + key = self._normalize_key(key) + if _test_memcached_key(key): + return self._client.append(key, '') + return False + + def clear(self): + return self._client.flush_all() + + def inc(self, key, delta=1): + key = self._normalize_key(key) + return self._client.incr(key, delta) + + def dec(self, key, delta=1): + key = self._normalize_key(key) + return self._client.decr(key, delta) + + def import_preferred_memcache_lib(self, servers): + """Returns an initialized memcache client. Used by the constructor.""" + try: + import pylibmc + except ImportError: + pass + else: + return pylibmc.Client(servers) + + try: + from google.appengine.api import memcache + except ImportError: + pass + else: + return memcache.Client() + + try: + import memcache + except ImportError: + pass + else: + return memcache.Client(servers) + + try: + import libmc + except ImportError: + pass + else: + return libmc.Client(servers) + + +# backwards compatibility +GAEMemcachedCache = MemcachedCache + + +class RedisCache(BaseCache): + + """Uses the Redis key-value store as a cache backend. + + The first argument can be either a string denoting address of the Redis + server or an object resembling an instance of a redis.Redis class. + + Note: Python Redis API already takes care of encoding unicode strings on + the fly. + + .. versionadded:: 0.7 + + .. versionadded:: 0.8 + `key_prefix` was added. + + .. versionchanged:: 0.8 + This cache backend now properly serializes objects. + + .. versionchanged:: 0.8.3 + This cache backend now supports password authentication. + + .. versionchanged:: 0.10 + ``**kwargs`` is now passed to the redis object. + + :param host: address of the Redis server or an object which API is + compatible with the official Python Redis client (redis-py). + :param port: port number on which Redis server listens for connections. + :param password: password authentication for the Redis server. + :param db: db (zero-based numeric index) on Redis Server to connect. + :param default_timeout: the default timeout that is used if no timeout is + specified on :meth:`~BaseCache.set`. A timeout of + 0 indicates that the cache never expires. + :param key_prefix: A prefix that should be added to all keys. + + Any additional keyword arguments will be passed to ``redis.Redis``. + """ + + def __init__(self, host='localhost', port=6379, password=None, + db=0, default_timeout=300, key_prefix=None, **kwargs): + BaseCache.__init__(self, default_timeout) + if host is None: + raise ValueError('RedisCache host parameter may not be None') + if isinstance(host, string_types): + try: + import redis + except ImportError: + raise RuntimeError('no redis module found') + if kwargs.get('decode_responses', None): + raise ValueError('decode_responses is not supported by ' + 'RedisCache.') + self._client = redis.Redis(host=host, port=port, password=password, + db=db, **kwargs) + else: + self._client = host + self.key_prefix = key_prefix or '' + + def _normalize_timeout(self, timeout): + timeout = BaseCache._normalize_timeout(self, timeout) + if timeout == 0: + timeout = -1 + return timeout + + def dump_object(self, value): + """Dumps an object into a string for redis. By default it serializes + integers as regular string and pickle dumps everything else. + """ + t = type(value) + if t in integer_types: + return str(value).encode('ascii') + return b'!' + pickle.dumps(value) + + def load_object(self, value): + """The reversal of :meth:`dump_object`. This might be called with + None. + """ + if value is None: + return None + if value.startswith(b'!'): + try: + return pickle.loads(value[1:]) + except pickle.PickleError: + return None + try: + return int(value) + except ValueError: + # before 0.8 we did not have serialization. Still support that. + return value + + def get(self, key): + return self.load_object(self._client.get(self.key_prefix + key)) + + def get_many(self, *keys): + if self.key_prefix: + keys = [self.key_prefix + key for key in keys] + return [self.load_object(x) for x in self._client.mget(keys)] + + def set(self, key, value, timeout=None): + timeout = self._normalize_timeout(timeout) + dump = self.dump_object(value) + if timeout == -1: + result = self._client.set(name=self.key_prefix + key, + value=dump) + else: + result = self._client.setex(name=self.key_prefix + key, + value=dump, time=timeout) + return result + + def add(self, key, value, timeout=None): + timeout = self._normalize_timeout(timeout) + dump = self.dump_object(value) + return ( + self._client.setnx(name=self.key_prefix + key, value=dump) and + self._client.expire(name=self.key_prefix + key, time=timeout) + ) + + def set_many(self, mapping, timeout=None): + timeout = self._normalize_timeout(timeout) + # Use transaction=False to batch without calling redis MULTI + # which is not supported by twemproxy + pipe = self._client.pipeline(transaction=False) + + for key, value in _items(mapping): + dump = self.dump_object(value) + if timeout == -1: + pipe.set(name=self.key_prefix + key, value=dump) + else: + pipe.setex(name=self.key_prefix + key, value=dump, + time=timeout) + return pipe.execute() + + def delete(self, key): + return self._client.delete(self.key_prefix + key) + + def delete_many(self, *keys): + if not keys: + return + if self.key_prefix: + keys = [self.key_prefix + key for key in keys] + return self._client.delete(*keys) + + def has(self, key): + return self._client.exists(self.key_prefix + key) + + def clear(self): + status = False + if self.key_prefix: + keys = self._client.keys(self.key_prefix + '*') + if keys: + status = self._client.delete(*keys) + else: + status = self._client.flushdb() + return status + + def inc(self, key, delta=1): + return self._client.incr(name=self.key_prefix + key, amount=delta) + + def dec(self, key, delta=1): + return self._client.decr(name=self.key_prefix + key, amount=delta) + + +class FileSystemCache(BaseCache): + + """A cache that stores the items on the file system. This cache depends + on being the only user of the `cache_dir`. Make absolutely sure that + nobody but this cache stores files there or otherwise the cache will + randomly delete files therein. + + :param cache_dir: the directory where cache files are stored. + :param threshold: the maximum number of items the cache stores before + it starts deleting some. A threshold value of 0 + indicates no threshold. + :param default_timeout: the default timeout that is used if no timeout is + specified on :meth:`~BaseCache.set`. A timeout of + 0 indicates that the cache never expires. + :param mode: the file mode wanted for the cache files, default 0600 + """ + + #: used for temporary files by the FileSystemCache + _fs_transaction_suffix = '.__wz_cache' + #: keep amount of files in a cache element + _fs_count_file = '__wz_cache_count' + + def __init__(self, cache_dir, threshold=500, default_timeout=300, + mode=0o600): + BaseCache.__init__(self, default_timeout) + self._path = cache_dir + self._threshold = threshold + self._mode = mode + + try: + os.makedirs(self._path) + except OSError as ex: + if ex.errno != errno.EEXIST: + raise + + self._update_count(value=len(self._list_dir())) + + @property + def _file_count(self): + return self.get(self._fs_count_file) or 0 + + def _update_count(self, delta=None, value=None): + # If we have no threshold, don't count files + if self._threshold == 0: + return + + if delta: + new_count = self._file_count + delta + else: + new_count = value or 0 + self.set(self._fs_count_file, new_count, mgmt_element=True) + + def _normalize_timeout(self, timeout): + timeout = BaseCache._normalize_timeout(self, timeout) + if timeout != 0: + timeout = time() + timeout + return int(timeout) + + def _list_dir(self): + """return a list of (fully qualified) cache filenames + """ + mgmt_files = [self._get_filename(name).split('/')[-1] + for name in (self._fs_count_file,)] + return [os.path.join(self._path, fn) for fn in os.listdir(self._path) + if not fn.endswith(self._fs_transaction_suffix) + and fn not in mgmt_files] + + def _prune(self): + if self._threshold == 0 or not self._file_count > self._threshold: + return + + entries = self._list_dir() + now = time() + for idx, fname in enumerate(entries): + try: + remove = False + with open(fname, 'rb') as f: + expires = pickle.load(f) + remove = (expires != 0 and expires <= now) or idx % 3 == 0 + + if remove: + os.remove(fname) + except (IOError, OSError): + pass + self._update_count(value=len(self._list_dir())) + + def clear(self): + for fname in self._list_dir(): + try: + os.remove(fname) + except (IOError, OSError): + self._update_count(value=len(self._list_dir())) + return False + self._update_count(value=0) + return True + + def _get_filename(self, key): + if isinstance(key, text_type): + key = key.encode('utf-8') # XXX unicode review + hash = md5(key).hexdigest() + return os.path.join(self._path, hash) + + def get(self, key): + filename = self._get_filename(key) + try: + with open(filename, 'rb') as f: + pickle_time = pickle.load(f) + if pickle_time == 0 or pickle_time >= time(): + return pickle.load(f) + else: + os.remove(filename) + return None + except (IOError, OSError, pickle.PickleError): + return None + + def add(self, key, value, timeout=None): + filename = self._get_filename(key) + if not os.path.exists(filename): + return self.set(key, value, timeout) + return False + + def set(self, key, value, timeout=None, mgmt_element=False): + # Management elements have no timeout + if mgmt_element: + timeout = 0 + + # Don't prune on management element update, to avoid loop + else: + self._prune() + + timeout = self._normalize_timeout(timeout) + filename = self._get_filename(key) + try: + fd, tmp = tempfile.mkstemp(suffix=self._fs_transaction_suffix, + dir=self._path) + with os.fdopen(fd, 'wb') as f: + pickle.dump(timeout, f, 1) + pickle.dump(value, f, pickle.HIGHEST_PROTOCOL) + rename(tmp, filename) + os.chmod(filename, self._mode) + except (IOError, OSError): + return False + else: + # Management elements should not count towards threshold + if not mgmt_element: + self._update_count(delta=1) + return True + + def delete(self, key, mgmt_element=False): + try: + os.remove(self._get_filename(key)) + except (IOError, OSError): + return False + else: + # Management elements should not count towards threshold + if not mgmt_element: + self._update_count(delta=-1) + return True + + def has(self, key): + filename = self._get_filename(key) + try: + with open(filename, 'rb') as f: + pickle_time = pickle.load(f) + if pickle_time == 0 or pickle_time >= time(): + return True + else: + os.remove(filename) + return False + except (IOError, OSError, pickle.PickleError): + return False + + +class UWSGICache(BaseCache): + """ Implements the cache using uWSGI's caching framework. + + .. note:: + This class cannot be used when running under PyPy, because the uWSGI + API implementation for PyPy is lacking the needed functionality. + + :param default_timeout: The default timeout in seconds. + :param cache: The name of the caching instance to connect to, for + example: mycache@localhost:3031, defaults to an empty string, which + means uWSGI will cache in the local instance. If the cache is in the + same instance as the werkzeug app, you only have to provide the name of + the cache. + """ + def __init__(self, default_timeout=300, cache=''): + BaseCache.__init__(self, default_timeout) + + if platform.python_implementation() == 'PyPy': + raise RuntimeError("uWSGI caching does not work under PyPy, see " + "the docs for more details.") + + try: + import uwsgi + self._uwsgi = uwsgi + except ImportError: + raise RuntimeError("uWSGI could not be imported, are you " + "running under uWSGI?") + + self.cache = cache + + def get(self, key): + rv = self._uwsgi.cache_get(key, self.cache) + if rv is None: + return + return pickle.loads(rv) + + def delete(self, key): + return self._uwsgi.cache_del(key, self.cache) + + def set(self, key, value, timeout=None): + return self._uwsgi.cache_update(key, pickle.dumps(value), + self._normalize_timeout(timeout), + self.cache) + + def add(self, key, value, timeout=None): + return self._uwsgi.cache_set(key, pickle.dumps(value), + self._normalize_timeout(timeout), + self.cache) + + def clear(self): + return self._uwsgi.cache_clear(self.cache) + + def has(self, key): + return self._uwsgi.cache_exists(key, self.cache) is not None diff --git a/pype/vendor/werkzeug/contrib/fixers.py b/pype/vendor/werkzeug/contrib/fixers.py new file mode 100644 index 0000000000..b88a861b21 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/fixers.py @@ -0,0 +1,254 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.fixers + ~~~~~~~~~~~~~~~~~~~~~~~ + + .. versionadded:: 0.5 + + This module includes various helpers that fix bugs in web servers. They may + be necessary for some versions of a buggy web server but not others. We try + to stay updated with the status of the bugs as good as possible but you have + to make sure whether they fix the problem you encounter. + + If you notice bugs in webservers not fixed in this module consider + contributing a patch. + + :copyright: Copyright 2009 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +try: + from urllib import unquote +except ImportError: + from urllib.parse import unquote + +from werkzeug.http import parse_options_header, parse_cache_control_header, \ + parse_set_header +from werkzeug.useragents import UserAgent +from werkzeug.datastructures import Headers, ResponseCacheControl + + +class CGIRootFix(object): + + """Wrap the application in this middleware if you are using FastCGI or CGI + and you have problems with your app root being set to the cgi script's path + instead of the path users are going to visit + + .. versionchanged:: 0.9 + Added `app_root` parameter and renamed from `LighttpdCGIRootFix`. + + :param app: the WSGI application + :param app_root: Defaulting to ``'/'``, you can set this to something else + if your app is mounted somewhere else. + """ + + def __init__(self, app, app_root='/'): + self.app = app + self.app_root = app_root + + def __call__(self, environ, start_response): + # only set PATH_INFO for older versions of Lighty or if no + # server software is provided. That's because the test was + # added in newer Werkzeug versions and we don't want to break + # people's code if they are using this fixer in a test that + # does not set the SERVER_SOFTWARE key. + if 'SERVER_SOFTWARE' not in environ or \ + environ['SERVER_SOFTWARE'] < 'lighttpd/1.4.28': + environ['PATH_INFO'] = environ.get('SCRIPT_NAME', '') + \ + environ.get('PATH_INFO', '') + environ['SCRIPT_NAME'] = self.app_root.strip('/') + return self.app(environ, start_response) + +# backwards compatibility +LighttpdCGIRootFix = CGIRootFix + + +class PathInfoFromRequestUriFix(object): + + """On windows environment variables are limited to the system charset + which makes it impossible to store the `PATH_INFO` variable in the + environment without loss of information on some systems. + + This is for example a problem for CGI scripts on a Windows Apache. + + This fixer works by recreating the `PATH_INFO` from `REQUEST_URI`, + `REQUEST_URL`, or `UNENCODED_URL` (whatever is available). Thus the + fix can only be applied if the webserver supports either of these + variables. + + :param app: the WSGI application + """ + + def __init__(self, app): + self.app = app + + def __call__(self, environ, start_response): + for key in 'REQUEST_URL', 'REQUEST_URI', 'UNENCODED_URL': + if key not in environ: + continue + request_uri = unquote(environ[key]) + script_name = unquote(environ.get('SCRIPT_NAME', '')) + if request_uri.startswith(script_name): + environ['PATH_INFO'] = request_uri[len(script_name):] \ + .split('?', 1)[0] + break + return self.app(environ, start_response) + + +class ProxyFix(object): + + """This middleware can be applied to add HTTP proxy support to an + application that was not designed with HTTP proxies in mind. It + sets `REMOTE_ADDR`, `HTTP_HOST` from `X-Forwarded` headers. While + Werkzeug-based applications already can use + :py:func:`werkzeug.wsgi.get_host` to retrieve the current host even if + behind proxy setups, this middleware can be used for applications which + access the WSGI environment directly. + + If you have more than one proxy server in front of your app, set + `num_proxies` accordingly. + + Do not use this middleware in non-proxy setups for security reasons. + + The original values of `REMOTE_ADDR` and `HTTP_HOST` are stored in + the WSGI environment as `werkzeug.proxy_fix.orig_remote_addr` and + `werkzeug.proxy_fix.orig_http_host`. + + :param app: the WSGI application + :param num_proxies: the number of proxy servers in front of the app. + """ + + def __init__(self, app, num_proxies=1): + self.app = app + self.num_proxies = num_proxies + + def get_remote_addr(self, forwarded_for): + """Selects the new remote addr from the given list of ips in + X-Forwarded-For. By default it picks the one that the `num_proxies` + proxy server provides. Before 0.9 it would always pick the first. + + .. versionadded:: 0.8 + """ + if len(forwarded_for) >= self.num_proxies: + return forwarded_for[-self.num_proxies] + + def __call__(self, environ, start_response): + getter = environ.get + forwarded_proto = getter('HTTP_X_FORWARDED_PROTO', '') + forwarded_for = getter('HTTP_X_FORWARDED_FOR', '').split(',') + forwarded_host = getter('HTTP_X_FORWARDED_HOST', '') + environ.update({ + 'werkzeug.proxy_fix.orig_wsgi_url_scheme': getter('wsgi.url_scheme'), + 'werkzeug.proxy_fix.orig_remote_addr': getter('REMOTE_ADDR'), + 'werkzeug.proxy_fix.orig_http_host': getter('HTTP_HOST') + }) + forwarded_for = [x for x in [x.strip() for x in forwarded_for] if x] + remote_addr = self.get_remote_addr(forwarded_for) + if remote_addr is not None: + environ['REMOTE_ADDR'] = remote_addr + if forwarded_host: + environ['HTTP_HOST'] = forwarded_host + if forwarded_proto: + environ['wsgi.url_scheme'] = forwarded_proto + return self.app(environ, start_response) + + +class HeaderRewriterFix(object): + + """This middleware can remove response headers and add others. This + is for example useful to remove the `Date` header from responses if you + are using a server that adds that header, no matter if it's present or + not or to add `X-Powered-By` headers:: + + app = HeaderRewriterFix(app, remove_headers=['Date'], + add_headers=[('X-Powered-By', 'WSGI')]) + + :param app: the WSGI application + :param remove_headers: a sequence of header keys that should be + removed. + :param add_headers: a sequence of ``(key, value)`` tuples that should + be added. + """ + + def __init__(self, app, remove_headers=None, add_headers=None): + self.app = app + self.remove_headers = set(x.lower() for x in (remove_headers or ())) + self.add_headers = list(add_headers or ()) + + def __call__(self, environ, start_response): + def rewriting_start_response(status, headers, exc_info=None): + new_headers = [] + for key, value in headers: + if key.lower() not in self.remove_headers: + new_headers.append((key, value)) + new_headers += self.add_headers + return start_response(status, new_headers, exc_info) + return self.app(environ, rewriting_start_response) + + +class InternetExplorerFix(object): + + """This middleware fixes a couple of bugs with Microsoft Internet + Explorer. Currently the following fixes are applied: + + - removing of `Vary` headers for unsupported mimetypes which + causes troubles with caching. Can be disabled by passing + ``fix_vary=False`` to the constructor. + see: http://support.microsoft.com/kb/824847/en-us + + - removes offending headers to work around caching bugs in + Internet Explorer if `Content-Disposition` is set. Can be + disabled by passing ``fix_attach=False`` to the constructor. + + If it does not detect affected Internet Explorer versions it won't touch + the request / response. + """ + + # This code was inspired by Django fixers for the same bugs. The + # fix_vary and fix_attach fixers were originally implemented in Django + # by Michael Axiak and is available as part of the Django project: + # http://code.djangoproject.com/ticket/4148 + + def __init__(self, app, fix_vary=True, fix_attach=True): + self.app = app + self.fix_vary = fix_vary + self.fix_attach = fix_attach + + def fix_headers(self, environ, headers, status=None): + if self.fix_vary: + header = headers.get('content-type', '') + mimetype, options = parse_options_header(header) + if mimetype not in ('text/html', 'text/plain', 'text/sgml'): + headers.pop('vary', None) + + if self.fix_attach and 'content-disposition' in headers: + pragma = parse_set_header(headers.get('pragma', '')) + pragma.discard('no-cache') + header = pragma.to_header() + if not header: + headers.pop('pragma', '') + else: + headers['Pragma'] = header + header = headers.get('cache-control', '') + if header: + cc = parse_cache_control_header(header, + cls=ResponseCacheControl) + cc.no_cache = None + cc.no_store = False + header = cc.to_header() + if not header: + headers.pop('cache-control', '') + else: + headers['Cache-Control'] = header + + def run_fixed(self, environ, start_response): + def fixing_start_response(status, headers, exc_info=None): + headers = Headers(headers) + self.fix_headers(environ, headers, status) + return start_response(status, headers.to_wsgi_list(), exc_info) + return self.app(environ, fixing_start_response) + + def __call__(self, environ, start_response): + ua = UserAgent(environ) + if ua.browser != 'msie': + return self.app(environ, start_response) + return self.run_fixed(environ, start_response) diff --git a/pype/vendor/werkzeug/contrib/iterio.py b/pype/vendor/werkzeug/contrib/iterio.py new file mode 100644 index 0000000000..c0ced37004 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/iterio.py @@ -0,0 +1,352 @@ +# -*- coding: utf-8 -*- +r""" + werkzeug.contrib.iterio + ~~~~~~~~~~~~~~~~~~~~~~~ + + This module implements a :class:`IterIO` that converts an iterator into + a stream object and the other way round. Converting streams into + iterators requires the `greenlet`_ module. + + To convert an iterator into a stream all you have to do is to pass it + directly to the :class:`IterIO` constructor. In this example we pass it + a newly created generator:: + + def foo(): + yield "something\n" + yield "otherthings" + stream = IterIO(foo()) + print stream.read() # read the whole iterator + + The other way round works a bit different because we have to ensure that + the code execution doesn't take place yet. An :class:`IterIO` call with a + callable as first argument does two things. The function itself is passed + an :class:`IterIO` stream it can feed. The object returned by the + :class:`IterIO` constructor on the other hand is not an stream object but + an iterator:: + + def foo(stream): + stream.write("some") + stream.write("thing") + stream.flush() + stream.write("otherthing") + iterator = IterIO(foo) + print iterator.next() # prints something + print iterator.next() # prints otherthing + iterator.next() # raises StopIteration + + .. _greenlet: https://github.com/python-greenlet/greenlet + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +try: + import greenlet +except ImportError: + greenlet = None + +from werkzeug._compat import implements_iterator + + +def _mixed_join(iterable, sentinel): + """concatenate any string type in an intelligent way.""" + iterator = iter(iterable) + first_item = next(iterator, sentinel) + if isinstance(first_item, bytes): + return first_item + b''.join(iterator) + return first_item + u''.join(iterator) + + +def _newline(reference_string): + if isinstance(reference_string, bytes): + return b'\n' + return u'\n' + + +@implements_iterator +class IterIO(object): + + """Instances of this object implement an interface compatible with the + standard Python :class:`file` object. Streams are either read-only or + write-only depending on how the object is created. + + If the first argument is an iterable a file like object is returned that + returns the contents of the iterable. In case the iterable is empty + read operations will return the sentinel value. + + If the first argument is a callable then the stream object will be + created and passed to that function. The caller itself however will + not receive a stream but an iterable. The function will be be executed + step by step as something iterates over the returned iterable. Each + call to :meth:`flush` will create an item for the iterable. If + :meth:`flush` is called without any writes in-between the sentinel + value will be yielded. + + Note for Python 3: due to the incompatible interface of bytes and + streams you should set the sentinel value explicitly to an empty + bytestring (``b''``) if you are expecting to deal with bytes as + otherwise the end of the stream is marked with the wrong sentinel + value. + + .. versionadded:: 0.9 + `sentinel` parameter was added. + """ + + def __new__(cls, obj, sentinel=''): + try: + iterator = iter(obj) + except TypeError: + return IterI(obj, sentinel) + return IterO(iterator, sentinel) + + def __iter__(self): + return self + + def tell(self): + if self.closed: + raise ValueError('I/O operation on closed file') + return self.pos + + def isatty(self): + if self.closed: + raise ValueError('I/O operation on closed file') + return False + + def seek(self, pos, mode=0): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def truncate(self, size=None): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def write(self, s): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def writelines(self, list): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def read(self, n=-1): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def readlines(self, sizehint=0): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def readline(self, length=None): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def flush(self): + if self.closed: + raise ValueError('I/O operation on closed file') + raise IOError(9, 'Bad file descriptor') + + def __next__(self): + if self.closed: + raise StopIteration() + line = self.readline() + if not line: + raise StopIteration() + return line + + +class IterI(IterIO): + + """Convert an stream into an iterator.""" + + def __new__(cls, func, sentinel=''): + if greenlet is None: + raise RuntimeError('IterI requires greenlet support') + stream = object.__new__(cls) + stream._parent = greenlet.getcurrent() + stream._buffer = [] + stream.closed = False + stream.sentinel = sentinel + stream.pos = 0 + + def run(): + func(stream) + stream.close() + + g = greenlet.greenlet(run, stream._parent) + while 1: + rv = g.switch() + if not rv: + return + yield rv[0] + + def close(self): + if not self.closed: + self.closed = True + self._flush_impl() + + def write(self, s): + if self.closed: + raise ValueError('I/O operation on closed file') + if s: + self.pos += len(s) + self._buffer.append(s) + + def writelines(self, list): + for item in list: + self.write(item) + + def flush(self): + if self.closed: + raise ValueError('I/O operation on closed file') + self._flush_impl() + + def _flush_impl(self): + data = _mixed_join(self._buffer, self.sentinel) + self._buffer = [] + if not data and self.closed: + self._parent.switch() + else: + self._parent.switch((data,)) + + +class IterO(IterIO): + + """Iter output. Wrap an iterator and give it a stream like interface.""" + + def __new__(cls, gen, sentinel=''): + self = object.__new__(cls) + self._gen = gen + self._buf = None + self.sentinel = sentinel + self.closed = False + self.pos = 0 + return self + + def __iter__(self): + return self + + def _buf_append(self, string): + '''Replace string directly without appending to an empty string, + avoiding type issues.''' + if not self._buf: + self._buf = string + else: + self._buf += string + + def close(self): + if not self.closed: + self.closed = True + if hasattr(self._gen, 'close'): + self._gen.close() + + def seek(self, pos, mode=0): + if self.closed: + raise ValueError('I/O operation on closed file') + if mode == 1: + pos += self.pos + elif mode == 2: + self.read() + self.pos = min(self.pos, self.pos + pos) + return + elif mode != 0: + raise IOError('Invalid argument') + buf = [] + try: + tmp_end_pos = len(self._buf) + while pos > tmp_end_pos: + item = next(self._gen) + tmp_end_pos += len(item) + buf.append(item) + except StopIteration: + pass + if buf: + self._buf_append(_mixed_join(buf, self.sentinel)) + self.pos = max(0, pos) + + def read(self, n=-1): + if self.closed: + raise ValueError('I/O operation on closed file') + if n < 0: + self._buf_append(_mixed_join(self._gen, self.sentinel)) + result = self._buf[self.pos:] + self.pos += len(result) + return result + new_pos = self.pos + n + buf = [] + try: + tmp_end_pos = 0 if self._buf is None else len(self._buf) + while new_pos > tmp_end_pos or (self._buf is None and not buf): + item = next(self._gen) + tmp_end_pos += len(item) + buf.append(item) + except StopIteration: + pass + if buf: + self._buf_append(_mixed_join(buf, self.sentinel)) + + if self._buf is None: + return self.sentinel + + new_pos = max(0, new_pos) + try: + return self._buf[self.pos:new_pos] + finally: + self.pos = min(new_pos, len(self._buf)) + + def readline(self, length=None): + if self.closed: + raise ValueError('I/O operation on closed file') + + nl_pos = -1 + if self._buf: + nl_pos = self._buf.find(_newline(self._buf), self.pos) + buf = [] + try: + if self._buf is None: + pos = self.pos + else: + pos = len(self._buf) + while nl_pos < 0: + item = next(self._gen) + local_pos = item.find(_newline(item)) + buf.append(item) + if local_pos >= 0: + nl_pos = pos + local_pos + break + pos += len(item) + except StopIteration: + pass + if buf: + self._buf_append(_mixed_join(buf, self.sentinel)) + + if self._buf is None: + return self.sentinel + + if nl_pos < 0: + new_pos = len(self._buf) + else: + new_pos = nl_pos + 1 + if length is not None and self.pos + length < new_pos: + new_pos = self.pos + length + try: + return self._buf[self.pos:new_pos] + finally: + self.pos = min(new_pos, len(self._buf)) + + def readlines(self, sizehint=0): + total = 0 + lines = [] + line = self.readline() + while line: + lines.append(line) + total += len(line) + if 0 < sizehint <= total: + break + line = self.readline() + return lines diff --git a/pype/vendor/werkzeug/contrib/jsrouting.py b/pype/vendor/werkzeug/contrib/jsrouting.py new file mode 100644 index 0000000000..d8158927ee --- /dev/null +++ b/pype/vendor/werkzeug/contrib/jsrouting.py @@ -0,0 +1,264 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.jsrouting + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Addon module that allows to create a JavaScript function from a map + that generates rules. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +try: + from simplejson import dumps +except ImportError: + try: + from json import dumps + except ImportError: + def dumps(*args): + raise RuntimeError('simplejson required for jsrouting') + +from inspect import getmro +from werkzeug.routing import NumberConverter +from werkzeug._compat import iteritems + + +def render_template(name_parts, rules, converters): + result = u'' + if name_parts: + for idx in range(0, len(name_parts) - 1): + name = u'.'.join(name_parts[:idx + 1]) + result += u"if (typeof %s === 'undefined') %s = {}\n" % (name, name) + result += '%s = ' % '.'.join(name_parts) + result += """(function (server_name, script_name, subdomain, url_scheme) { + var converters = [%(converters)s]; + var rules = %(rules)s; + function in_array(array, value) { + if (array.indexOf != undefined) { + return array.indexOf(value) != -1; + } + for (var i = 0; i < array.length; i++) { + if (array[i] == value) { + return true; + } + } + return false; + } + function array_diff(array1, array2) { + array1 = array1.slice(); + for (var i = array1.length-1; i >= 0; i--) { + if (in_array(array2, array1[i])) { + array1.splice(i, 1); + } + } + return array1; + } + function split_obj(obj) { + var names = []; + var values = []; + for (var name in obj) { + if (typeof(obj[name]) != 'function') { + names.push(name); + values.push(obj[name]); + } + } + return {names: names, values: values, original: obj}; + } + function suitable(rule, args) { + var default_args = split_obj(rule.defaults || {}); + var diff_arg_names = array_diff(rule.arguments, default_args.names); + + for (var i = 0; i < diff_arg_names.length; i++) { + if (!in_array(args.names, diff_arg_names[i])) { + return false; + } + } + + if (array_diff(rule.arguments, args.names).length == 0) { + if (rule.defaults == null) { + return true; + } + for (var i = 0; i < default_args.names.length; i++) { + var key = default_args.names[i]; + var value = default_args.values[i]; + if (value != args.original[key]) { + return false; + } + } + } + + return true; + } + function build(rule, args) { + var tmp = []; + var processed = rule.arguments.slice(); + for (var i = 0; i < rule.trace.length; i++) { + var part = rule.trace[i]; + if (part.is_dynamic) { + var converter = converters[rule.converters[part.data]]; + var data = converter(args.original[part.data]); + if (data == null) { + return null; + } + tmp.push(data); + processed.push(part.name); + } else { + tmp.push(part.data); + } + } + tmp = tmp.join(''); + var pipe = tmp.indexOf('|'); + var subdomain = tmp.substring(0, pipe); + var url = tmp.substring(pipe+1); + + var unprocessed = array_diff(args.names, processed); + var first_query_var = true; + for (var i = 0; i < unprocessed.length; i++) { + if (first_query_var) { + url += '?'; + } else { + url += '&'; + } + first_query_var = false; + url += encodeURIComponent(unprocessed[i]); + url += '='; + url += encodeURIComponent(args.original[unprocessed[i]]); + } + return {subdomain: subdomain, path: url}; + } + function lstrip(s, c) { + while (s && s.substring(0, 1) == c) { + s = s.substring(1); + } + return s; + } + function rstrip(s, c) { + while (s && s.substring(s.length-1, s.length) == c) { + s = s.substring(0, s.length-1); + } + return s; + } + return function(endpoint, args, force_external) { + args = split_obj(args); + var rv = null; + for (var i = 0; i < rules.length; i++) { + var rule = rules[i]; + if (rule.endpoint != endpoint) continue; + if (suitable(rule, args)) { + rv = build(rule, args); + if (rv != null) { + break; + } + } + } + if (rv == null) { + return null; + } + if (!force_external && rv.subdomain == subdomain) { + return rstrip(script_name, '/') + '/' + lstrip(rv.path, '/'); + } else { + return url_scheme + '://' + + (rv.subdomain ? rv.subdomain + '.' : '') + + server_name + rstrip(script_name, '/') + + '/' + lstrip(rv.path, '/'); + } + }; +})""" % {'converters': u', '.join(converters), + 'rules': rules} + + return result + + +def generate_map(map, name='url_map'): + """ + Generates a JavaScript function containing the rules defined in + this map, to be used with a MapAdapter's generate_javascript + method. If you don't pass a name the returned JavaScript code is + an expression that returns a function. Otherwise it's a standalone + script that assigns the function with that name. Dotted names are + resolved (so you an use a name like 'obj.url_for') + + In order to use JavaScript generation, simplejson must be installed. + + Note that using this feature will expose the rules + defined in your map to users. If your rules contain sensitive + information, don't use JavaScript generation! + """ + from warnings import warn + warn(DeprecationWarning('This module is deprecated')) + map.update() + rules = [] + converters = [] + for rule in map.iter_rules(): + trace = [{ + 'is_dynamic': is_dynamic, + 'data': data + } for is_dynamic, data in rule._trace] + rule_converters = {} + for key, converter in iteritems(rule._converters): + js_func = js_to_url_function(converter) + try: + index = converters.index(js_func) + except ValueError: + converters.append(js_func) + index = len(converters) - 1 + rule_converters[key] = index + rules.append({ + u'endpoint': rule.endpoint, + u'arguments': list(rule.arguments), + u'converters': rule_converters, + u'trace': trace, + u'defaults': rule.defaults + }) + + return render_template(name_parts=name and name.split('.') or [], + rules=dumps(rules), + converters=converters) + + +def generate_adapter(adapter, name='url_for', map_name='url_map'): + """Generates the url building function for a map.""" + values = { + u'server_name': dumps(adapter.server_name), + u'script_name': dumps(adapter.script_name), + u'subdomain': dumps(adapter.subdomain), + u'url_scheme': dumps(adapter.url_scheme), + u'name': name, + u'map_name': map_name + } + return u'''\ +var %(name)s = %(map_name)s( + %(server_name)s, + %(script_name)s, + %(subdomain)s, + %(url_scheme)s +);''' % values + + +def js_to_url_function(converter): + """Get the JavaScript converter function from a rule.""" + if hasattr(converter, 'js_to_url_function'): + data = converter.js_to_url_function() + else: + for cls in getmro(type(converter)): + if cls in js_to_url_functions: + data = js_to_url_functions[cls](converter) + break + else: + return 'encodeURIComponent' + return '(function(value) { %s })' % data + + +def NumberConverter_js_to_url(conv): + if conv.fixed_digits: + return u'''\ +var result = value.toString(); +while (result.length < %s) + result = '0' + result; +return result;''' % conv.fixed_digits + return u'return value.toString();' + + +js_to_url_functions = { + NumberConverter: NumberConverter_js_to_url +} diff --git a/pype/vendor/werkzeug/contrib/limiter.py b/pype/vendor/werkzeug/contrib/limiter.py new file mode 100644 index 0000000000..6bc9d39786 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/limiter.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.limiter + ~~~~~~~~~~~~~~~~~~~~~~~~ + + A middleware that limits incoming data. This works around problems with + Trac_ or Django_ because those directly stream into the memory. + + .. _Trac: http://trac.edgewall.org/ + .. _Django: http://www.djangoproject.com/ + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +from warnings import warn + +from werkzeug.wsgi import LimitedStream + + +class StreamLimitMiddleware(object): + + """Limits the input stream to a given number of bytes. This is useful if + you have a WSGI application that reads form data into memory (django for + example) and you don't want users to harm the server by uploading tons of + data. + + Default is 10MB + + .. versionchanged:: 0.9 + Deprecated middleware. + """ + + def __init__(self, app, maximum_size=1024 * 1024 * 10): + warn(DeprecationWarning('This middleware is deprecated')) + self.app = app + self.maximum_size = maximum_size + + def __call__(self, environ, start_response): + limit = min(self.maximum_size, int(environ.get('CONTENT_LENGTH') or 0)) + environ['wsgi.input'] = LimitedStream(environ['wsgi.input'], limit) + return self.app(environ, start_response) diff --git a/pype/vendor/werkzeug/contrib/lint.py b/pype/vendor/werkzeug/contrib/lint.py new file mode 100644 index 0000000000..969c687412 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/lint.py @@ -0,0 +1,343 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.lint + ~~~~~~~~~~~~~~~~~~~~~ + + .. versionadded:: 0.5 + + This module provides a middleware that performs sanity checks of the WSGI + application. It checks that :pep:`333` is properly implemented and warns + on some common HTTP errors such as non-empty responses for 304 status + codes. + + This module provides a middleware, the :class:`LintMiddleware`. Wrap your + application with it and it will warn about common problems with WSGI and + HTTP while your application is running. + + It's strongly recommended to use it during development. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +try: + from urllib.parse import urlparse +except ImportError: + from urlparse import urlparse + +from warnings import warn + +from werkzeug.datastructures import Headers +from werkzeug.http import is_entity_header +from werkzeug.wsgi import FileWrapper +from werkzeug._compat import string_types + + +class WSGIWarning(Warning): + + """Warning class for WSGI warnings.""" + + +class HTTPWarning(Warning): + + """Warning class for HTTP warnings.""" + + +def check_string(context, obj, stacklevel=3): + if type(obj) is not str: + warn(WSGIWarning('%s requires bytestrings, got %s' % + (context, obj.__class__.__name__))) + + +class InputStream(object): + + def __init__(self, stream): + self._stream = stream + + def read(self, *args): + if len(args) == 0: + warn(WSGIWarning('wsgi does not guarantee an EOF marker on the ' + 'input stream, thus making calls to ' + 'wsgi.input.read() unsafe. Conforming servers ' + 'may never return from this call.'), + stacklevel=2) + elif len(args) != 1: + warn(WSGIWarning('too many parameters passed to wsgi.input.read()'), + stacklevel=2) + return self._stream.read(*args) + + def readline(self, *args): + if len(args) == 0: + warn(WSGIWarning('Calls to wsgi.input.readline() without arguments' + ' are unsafe. Use wsgi.input.read() instead.'), + stacklevel=2) + elif len(args) == 1: + warn(WSGIWarning('wsgi.input.readline() was called with a size hint. ' + 'WSGI does not support this, although it\'s available ' + 'on all major servers.'), + stacklevel=2) + else: + raise TypeError('too many arguments passed to wsgi.input.readline()') + return self._stream.readline(*args) + + def __iter__(self): + try: + return iter(self._stream) + except TypeError: + warn(WSGIWarning('wsgi.input is not iterable.'), stacklevel=2) + return iter(()) + + def close(self): + warn(WSGIWarning('application closed the input stream!'), + stacklevel=2) + self._stream.close() + + +class ErrorStream(object): + + def __init__(self, stream): + self._stream = stream + + def write(self, s): + check_string('wsgi.error.write()', s) + self._stream.write(s) + + def flush(self): + self._stream.flush() + + def writelines(self, seq): + for line in seq: + self.write(seq) + + def close(self): + warn(WSGIWarning('application closed the error stream!'), + stacklevel=2) + self._stream.close() + + +class GuardedWrite(object): + + def __init__(self, write, chunks): + self._write = write + self._chunks = chunks + + def __call__(self, s): + check_string('write()', s) + self._write.write(s) + self._chunks.append(len(s)) + + +class GuardedIterator(object): + + def __init__(self, iterator, headers_set, chunks): + self._iterator = iterator + self._next = iter(iterator).next + self.closed = False + self.headers_set = headers_set + self.chunks = chunks + + def __iter__(self): + return self + + def next(self): + if self.closed: + warn(WSGIWarning('iterated over closed app_iter'), + stacklevel=2) + rv = self._next() + if not self.headers_set: + warn(WSGIWarning('Application returned before it ' + 'started the response'), stacklevel=2) + check_string('application iterator items', rv) + self.chunks.append(len(rv)) + return rv + + def close(self): + self.closed = True + if hasattr(self._iterator, 'close'): + self._iterator.close() + + if self.headers_set: + status_code, headers = self.headers_set + bytes_sent = sum(self.chunks) + content_length = headers.get('content-length', type=int) + + if status_code == 304: + for key, value in headers: + key = key.lower() + if key not in ('expires', 'content-location') and \ + is_entity_header(key): + warn(HTTPWarning('entity header %r found in 304 ' + 'response' % key)) + if bytes_sent: + warn(HTTPWarning('304 responses must not have a body')) + elif 100 <= status_code < 200 or status_code == 204: + if content_length != 0: + warn(HTTPWarning('%r responses must have an empty ' + 'content length' % status_code)) + if bytes_sent: + warn(HTTPWarning('%r responses must not have a body' % + status_code)) + elif content_length is not None and content_length != bytes_sent: + warn(WSGIWarning('Content-Length and the number of bytes ' + 'sent to the client do not match.')) + + def __del__(self): + if not self.closed: + try: + warn(WSGIWarning('Iterator was garbage collected before ' + 'it was closed.')) + except Exception: + pass + + +class LintMiddleware(object): + + """This middleware wraps an application and warns on common errors. + Among other thing it currently checks for the following problems: + + - invalid status codes + - non-bytestrings sent to the WSGI server + - strings returned from the WSGI application + - non-empty conditional responses + - unquoted etags + - relative URLs in the Location header + - unsafe calls to wsgi.input + - unclosed iterators + + Detected errors are emitted using the standard Python :mod:`warnings` + system and usually end up on :data:`stderr`. + + :: + + from werkzeug.contrib.lint import LintMiddleware + app = LintMiddleware(app) + + :param app: the application to wrap + """ + + def __init__(self, app): + self.app = app + + def check_environ(self, environ): + if type(environ) is not dict: + warn(WSGIWarning('WSGI environment is not a standard python dict.'), + stacklevel=4) + for key in ('REQUEST_METHOD', 'SERVER_NAME', 'SERVER_PORT', + 'wsgi.version', 'wsgi.input', 'wsgi.errors', + 'wsgi.multithread', 'wsgi.multiprocess', + 'wsgi.run_once'): + if key not in environ: + warn(WSGIWarning('required environment key %r not found' + % key), stacklevel=3) + if environ['wsgi.version'] != (1, 0): + warn(WSGIWarning('environ is not a WSGI 1.0 environ'), + stacklevel=3) + + script_name = environ.get('SCRIPT_NAME', '') + if script_name and script_name[:1] != '/': + warn(WSGIWarning('SCRIPT_NAME does not start with a slash: %r' + % script_name), stacklevel=3) + path_info = environ.get('PATH_INFO', '') + if path_info[:1] != '/': + warn(WSGIWarning('PATH_INFO does not start with a slash: %r' + % path_info), stacklevel=3) + + def check_start_response(self, status, headers, exc_info): + check_string('status', status) + status_code = status.split(None, 1)[0] + if len(status_code) != 3 or not status_code.isdigit(): + warn(WSGIWarning('Status code must be three digits'), stacklevel=3) + if len(status) < 4 or status[3] != ' ': + warn(WSGIWarning('Invalid value for status %r. Valid ' + 'status strings are three digits, a space ' + 'and a status explanation'), stacklevel=3) + status_code = int(status_code) + if status_code < 100: + warn(WSGIWarning('status code < 100 detected'), stacklevel=3) + + if type(headers) is not list: + warn(WSGIWarning('header list is not a list'), stacklevel=3) + for item in headers: + if type(item) is not tuple or len(item) != 2: + warn(WSGIWarning('Headers must tuple 2-item tuples'), + stacklevel=3) + name, value = item + if type(name) is not str or type(value) is not str: + warn(WSGIWarning('header items must be strings'), + stacklevel=3) + if name.lower() == 'status': + warn(WSGIWarning('The status header is not supported due to ' + 'conflicts with the CGI spec.'), + stacklevel=3) + + if exc_info is not None and not isinstance(exc_info, tuple): + warn(WSGIWarning('invalid value for exc_info'), stacklevel=3) + + headers = Headers(headers) + self.check_headers(headers) + + return status_code, headers + + def check_headers(self, headers): + etag = headers.get('etag') + if etag is not None: + if etag.startswith(('W/', 'w/')): + if etag.startswith('w/'): + warn(HTTPWarning('weak etag indicator should be upcase.'), + stacklevel=4) + etag = etag[2:] + if not (etag[:1] == etag[-1:] == '"'): + warn(HTTPWarning('unquoted etag emitted.'), stacklevel=4) + + location = headers.get('location') + if location is not None: + if not urlparse(location).netloc: + warn(HTTPWarning('absolute URLs required for location header'), + stacklevel=4) + + def check_iterator(self, app_iter): + if isinstance(app_iter, string_types): + warn(WSGIWarning('application returned string. Response will ' + 'send character for character to the client ' + 'which will kill the performance. Return a ' + 'list or iterable instead.'), stacklevel=3) + + def __call__(self, *args, **kwargs): + if len(args) != 2: + warn(WSGIWarning('Two arguments to WSGI app required'), stacklevel=2) + if kwargs: + warn(WSGIWarning('No keyword arguments to WSGI app allowed'), + stacklevel=2) + environ, start_response = args + + self.check_environ(environ) + environ['wsgi.input'] = InputStream(environ['wsgi.input']) + environ['wsgi.errors'] = ErrorStream(environ['wsgi.errors']) + + # hook our own file wrapper in so that applications will always + # iterate to the end and we can check the content length + environ['wsgi.file_wrapper'] = FileWrapper + + headers_set = [] + chunks = [] + + def checking_start_response(*args, **kwargs): + if len(args) not in (2, 3): + warn(WSGIWarning('Invalid number of arguments: %s, expected ' + '2 or 3' % len(args), stacklevel=2)) + if kwargs: + warn(WSGIWarning('no keyword arguments allowed.')) + + status, headers = args[:2] + if len(args) == 3: + exc_info = args[2] + else: + exc_info = None + + headers_set[:] = self.check_start_response(status, headers, + exc_info) + return GuardedWrite(start_response(status, headers, exc_info), + chunks) + + app_iter = self.app(environ, checking_start_response) + self.check_iterator(app_iter) + return GuardedIterator(app_iter, headers_set, chunks) diff --git a/pype/vendor/werkzeug/contrib/profiler.py b/pype/vendor/werkzeug/contrib/profiler.py new file mode 100644 index 0000000000..be860afbcd --- /dev/null +++ b/pype/vendor/werkzeug/contrib/profiler.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.profiler + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + This module provides a simple WSGI profiler middleware for finding + bottlenecks in web application. It uses the :mod:`profile` or + :mod:`cProfile` module to do the profiling and writes the stats to the + stream provided (defaults to stderr). + + Example usage:: + + from werkzeug.contrib.profiler import ProfilerMiddleware + app = ProfilerMiddleware(app) + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import sys +import time +import os.path +try: + try: + from cProfile import Profile + except ImportError: + from profile import Profile + from pstats import Stats + available = True +except ImportError: + available = False + + +class MergeStream(object): + + """An object that redirects `write` calls to multiple streams. + Use this to log to both `sys.stdout` and a file:: + + f = open('profiler.log', 'w') + stream = MergeStream(sys.stdout, f) + profiler = ProfilerMiddleware(app, stream) + """ + + def __init__(self, *streams): + if not streams: + raise TypeError('at least one stream must be given') + self.streams = streams + + def write(self, data): + for stream in self.streams: + stream.write(data) + + +class ProfilerMiddleware(object): + + """Simple profiler middleware. Wraps a WSGI application and profiles + a request. This intentionally buffers the response so that timings are + more exact. + + By giving the `profile_dir` argument, pstat.Stats files are saved to that + directory, one file per request. Without it, a summary is printed to + `stream` instead. + + For the exact meaning of `sort_by` and `restrictions` consult the + :mod:`profile` documentation. + + .. versionadded:: 0.9 + Added support for `restrictions` and `profile_dir`. + + :param app: the WSGI application to profile. + :param stream: the stream for the profiled stats. defaults to stderr. + :param sort_by: a tuple of columns to sort the result by. + :param restrictions: a tuple of profiling strictions, not used if dumping + to `profile_dir`. + :param profile_dir: directory name to save pstat files + """ + + def __init__(self, app, stream=None, + sort_by=('time', 'calls'), restrictions=(), profile_dir=None): + if not available: + raise RuntimeError('the profiler is not available because ' + 'profile or pstat is not installed.') + self._app = app + self._stream = stream or sys.stdout + self._sort_by = sort_by + self._restrictions = restrictions + self._profile_dir = profile_dir + + def __call__(self, environ, start_response): + response_body = [] + + def catching_start_response(status, headers, exc_info=None): + start_response(status, headers, exc_info) + return response_body.append + + def runapp(): + appiter = self._app(environ, catching_start_response) + response_body.extend(appiter) + if hasattr(appiter, 'close'): + appiter.close() + + p = Profile() + start = time.time() + p.runcall(runapp) + body = b''.join(response_body) + elapsed = time.time() - start + + if self._profile_dir is not None: + prof_filename = os.path.join(self._profile_dir, + '%s.%s.%06dms.%d.prof' % ( + environ['REQUEST_METHOD'], + environ.get('PATH_INFO').strip( + '/').replace('/', '.') or 'root', + elapsed * 1000.0, + time.time() + )) + p.dump_stats(prof_filename) + + else: + stats = Stats(p, stream=self._stream) + stats.sort_stats(*self._sort_by) + + self._stream.write('-' * 80) + self._stream.write('\nPATH: %r\n' % environ.get('PATH_INFO')) + stats.print_stats(*self._restrictions) + self._stream.write('-' * 80 + '\n\n') + + return [body] + + +def make_action(app_factory, hostname='localhost', port=5000, + threaded=False, processes=1, stream=None, + sort_by=('time', 'calls'), restrictions=()): + """Return a new callback for :mod:`werkzeug.script` that starts a local + server with the profiler enabled. + + :: + + from werkzeug.contrib import profiler + action_profile = profiler.make_action(make_app) + """ + def action(hostname=('h', hostname), port=('p', port), + threaded=threaded, processes=processes): + """Start a new development server.""" + from werkzeug.serving import run_simple + app = ProfilerMiddleware(app_factory(), stream, sort_by, restrictions) + run_simple(hostname, port, app, False, None, threaded, processes) + return action diff --git a/pype/vendor/werkzeug/contrib/securecookie.py b/pype/vendor/werkzeug/contrib/securecookie.py new file mode 100644 index 0000000000..5927e2b0b2 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/securecookie.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +r""" + werkzeug.contrib.securecookie + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + This module implements a cookie that is not alterable from the client + because it adds a checksum the server checks for. You can use it as + session replacement if all you have is a user id or something to mark + a logged in user. + + Keep in mind that the data is still readable from the client as a + normal cookie is. However you don't have to store and flush the + sessions you have at the server. + + Example usage: + + >>> from werkzeug.contrib.securecookie import SecureCookie + >>> x = SecureCookie({"foo": 42, "baz": (1, 2, 3)}, "deadbeef") + + Dumping into a string so that one can store it in a cookie: + + >>> value = x.serialize() + + Loading from that string again: + + >>> x = SecureCookie.unserialize(value, "deadbeef") + >>> x["baz"] + (1, 2, 3) + + If someone modifies the cookie and the checksum is wrong the unserialize + method will fail silently and return a new empty `SecureCookie` object. + + Keep in mind that the values will be visible in the cookie so do not + store data in a cookie you don't want the user to see. + + Application Integration + ======================= + + If you are using the werkzeug request objects you could integrate the + secure cookie into your application like this:: + + from werkzeug.utils import cached_property + from werkzeug.wrappers import BaseRequest + from werkzeug.contrib.securecookie import SecureCookie + + # don't use this key but a different one; you could just use + # os.urandom(20) to get something random + SECRET_KEY = '\xfa\xdd\xb8z\xae\xe0}4\x8b\xea' + + class Request(BaseRequest): + + @cached_property + def client_session(self): + data = self.cookies.get('session_data') + if not data: + return SecureCookie(secret_key=SECRET_KEY) + return SecureCookie.unserialize(data, SECRET_KEY) + + def application(environ, start_response): + request = Request(environ) + + # get a response object here + response = ... + + if request.client_session.should_save: + session_data = request.client_session.serialize() + response.set_cookie('session_data', session_data, + httponly=True) + return response(environ, start_response) + + A less verbose integration can be achieved by using shorthand methods:: + + class Request(BaseRequest): + + @cached_property + def client_session(self): + return SecureCookie.load_cookie(self, secret_key=COOKIE_SECRET) + + def application(environ, start_response): + request = Request(environ) + + # get a response object here + response = ... + + request.client_session.save_cookie(response) + return response(environ, start_response) + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import pickle +import base64 +from hmac import new as hmac +from time import time +from hashlib import sha1 as _default_hash + +from werkzeug._compat import iteritems, text_type, to_bytes +from werkzeug.urls import url_quote_plus, url_unquote_plus +from werkzeug._internal import _date_to_unix +from werkzeug.contrib.sessions import ModificationTrackingDict +from werkzeug.security import safe_str_cmp +from werkzeug._compat import to_native + + +class UnquoteError(Exception): + + """Internal exception used to signal failures on quoting.""" + + +class SecureCookie(ModificationTrackingDict): + + """Represents a secure cookie. You can subclass this class and provide + an alternative mac method. The import thing is that the mac method + is a function with a similar interface to the hashlib. Required + methods are update() and digest(). + + Example usage: + + >>> x = SecureCookie({"foo": 42, "baz": (1, 2, 3)}, "deadbeef") + >>> x["foo"] + 42 + >>> x["baz"] + (1, 2, 3) + >>> x["blafasel"] = 23 + >>> x.should_save + True + + :param data: the initial data. Either a dict, list of tuples or `None`. + :param secret_key: the secret key. If not set `None` or not specified + it has to be set before :meth:`serialize` is called. + :param new: The initial value of the `new` flag. + """ + + #: The hash method to use. This has to be a module with a new function + #: or a function that creates a hashlib object. Such as `hashlib.md5` + #: Subclasses can override this attribute. The default hash is sha1. + #: Make sure to wrap this in staticmethod() if you store an arbitrary + #: function there such as hashlib.sha1 which might be implemented + #: as a function. + hash_method = staticmethod(_default_hash) + + #: the module used for serialization. Unless overriden by subclasses + #: the standard pickle module is used. + serialization_method = pickle + + #: if the contents should be base64 quoted. This can be disabled if the + #: serialization process returns cookie safe strings only. + quote_base64 = True + + def __init__(self, data=None, secret_key=None, new=True): + ModificationTrackingDict.__init__(self, data or ()) + # explicitly convert it into a bytestring because python 2.6 + # no longer performs an implicit string conversion on hmac + if secret_key is not None: + secret_key = to_bytes(secret_key, 'utf-8') + self.secret_key = secret_key + self.new = new + + def __repr__(self): + return '<%s %s%s>' % ( + self.__class__.__name__, + dict.__repr__(self), + self.should_save and '*' or '' + ) + + @property + def should_save(self): + """True if the session should be saved. By default this is only true + for :attr:`modified` cookies, not :attr:`new`. + """ + return self.modified + + @classmethod + def quote(cls, value): + """Quote the value for the cookie. This can be any object supported + by :attr:`serialization_method`. + + :param value: the value to quote. + """ + if cls.serialization_method is not None: + value = cls.serialization_method.dumps(value) + if cls.quote_base64: + value = b''.join(base64.b64encode(value).splitlines()).strip() + return value + + @classmethod + def unquote(cls, value): + """Unquote the value for the cookie. If unquoting does not work a + :exc:`UnquoteError` is raised. + + :param value: the value to unquote. + """ + try: + if cls.quote_base64: + value = base64.b64decode(value) + if cls.serialization_method is not None: + value = cls.serialization_method.loads(value) + return value + except Exception: + # unfortunately pickle and other serialization modules can + # cause pretty every error here. if we get one we catch it + # and convert it into an UnquoteError + raise UnquoteError() + + def serialize(self, expires=None): + """Serialize the secure cookie into a string. + + If expires is provided, the session will be automatically invalidated + after expiration when you unseralize it. This provides better + protection against session cookie theft. + + :param expires: an optional expiration date for the cookie (a + :class:`datetime.datetime` object) + """ + if self.secret_key is None: + raise RuntimeError('no secret key defined') + if expires: + self['_expires'] = _date_to_unix(expires) + result = [] + mac = hmac(self.secret_key, None, self.hash_method) + for key, value in sorted(self.items()): + result.append(('%s=%s' % ( + url_quote_plus(key), + self.quote(value).decode('ascii') + )).encode('ascii')) + mac.update(b'|' + result[-1]) + return b'?'.join([ + base64.b64encode(mac.digest()).strip(), + b'&'.join(result) + ]) + + @classmethod + def unserialize(cls, string, secret_key): + """Load the secure cookie from a serialized string. + + :param string: the cookie value to unserialize. + :param secret_key: the secret key used to serialize the cookie. + :return: a new :class:`SecureCookie`. + """ + if isinstance(string, text_type): + string = string.encode('utf-8', 'replace') + if isinstance(secret_key, text_type): + secret_key = secret_key.encode('utf-8', 'replace') + try: + base64_hash, data = string.split(b'?', 1) + except (ValueError, IndexError): + items = () + else: + items = {} + mac = hmac(secret_key, None, cls.hash_method) + for item in data.split(b'&'): + mac.update(b'|' + item) + if b'=' not in item: + items = None + break + key, value = item.split(b'=', 1) + # try to make the key a string + key = url_unquote_plus(key.decode('ascii')) + try: + key = to_native(key) + except UnicodeError: + pass + items[key] = value + + # no parsing error and the mac looks okay, we can now + # sercurely unpickle our cookie. + try: + client_hash = base64.b64decode(base64_hash) + except TypeError: + items = client_hash = None + if items is not None and safe_str_cmp(client_hash, mac.digest()): + try: + for key, value in iteritems(items): + items[key] = cls.unquote(value) + except UnquoteError: + items = () + else: + if '_expires' in items: + if time() > items['_expires']: + items = () + else: + del items['_expires'] + else: + items = () + return cls(items, secret_key, False) + + @classmethod + def load_cookie(cls, request, key='session', secret_key=None): + """Loads a :class:`SecureCookie` from a cookie in request. If the + cookie is not set, a new :class:`SecureCookie` instanced is + returned. + + :param request: a request object that has a `cookies` attribute + which is a dict of all cookie values. + :param key: the name of the cookie. + :param secret_key: the secret key used to unquote the cookie. + Always provide the value even though it has + no default! + """ + data = request.cookies.get(key) + if not data: + return cls(secret_key=secret_key) + return cls.unserialize(data, secret_key) + + def save_cookie(self, response, key='session', expires=None, + session_expires=None, max_age=None, path='/', domain=None, + secure=None, httponly=False, force=False): + """Saves the SecureCookie in a cookie on response object. All + parameters that are not described here are forwarded directly + to :meth:`~BaseResponse.set_cookie`. + + :param response: a response object that has a + :meth:`~BaseResponse.set_cookie` method. + :param key: the name of the cookie. + :param session_expires: the expiration date of the secure cookie + stored information. If this is not provided + the cookie `expires` date is used instead. + """ + if force or self.should_save: + data = self.serialize(session_expires or expires) + response.set_cookie(key, data, expires=expires, max_age=max_age, + path=path, domain=domain, secure=secure, + httponly=httponly) diff --git a/pype/vendor/werkzeug/contrib/sessions.py b/pype/vendor/werkzeug/contrib/sessions.py new file mode 100644 index 0000000000..a9c3aa7caf --- /dev/null +++ b/pype/vendor/werkzeug/contrib/sessions.py @@ -0,0 +1,352 @@ +# -*- coding: utf-8 -*- +r""" + werkzeug.contrib.sessions + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + This module contains some helper classes that help one to add session + support to a python WSGI application. For full client-side session + storage see :mod:`~werkzeug.contrib.securecookie` which implements a + secure, client-side session storage. + + + Application Integration + ======================= + + :: + + from werkzeug.contrib.sessions import SessionMiddleware, \ + FilesystemSessionStore + + app = SessionMiddleware(app, FilesystemSessionStore()) + + The current session will then appear in the WSGI environment as + `werkzeug.session`. However it's recommended to not use the middleware + but the stores directly in the application. However for very simple + scripts a middleware for sessions could be sufficient. + + This module does not implement methods or ways to check if a session is + expired. That should be done by a cronjob and storage specific. For + example to prune unused filesystem sessions one could check the modified + time of the files. If sessions are stored in the database the new() + method should add an expiration timestamp for the session. + + For better flexibility it's recommended to not use the middleware but the + store and session object directly in the application dispatching:: + + session_store = FilesystemSessionStore() + + def application(environ, start_response): + request = Request(environ) + sid = request.cookies.get('cookie_name') + if sid is None: + request.session = session_store.new() + else: + request.session = session_store.get(sid) + response = get_the_response_object(request) + if request.session.should_save: + session_store.save(request.session) + response.set_cookie('cookie_name', request.session.sid) + return response(environ, start_response) + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import re +import os +import tempfile +from os import path +from time import time +from random import random +from hashlib import sha1 +from pickle import dump, load, HIGHEST_PROTOCOL + +from werkzeug.datastructures import CallbackDict +from werkzeug.utils import dump_cookie, parse_cookie +from werkzeug.wsgi import ClosingIterator +from werkzeug.posixemulation import rename +from werkzeug._compat import PY2, text_type +from werkzeug.filesystem import get_filesystem_encoding + + +_sha1_re = re.compile(r'^[a-f0-9]{40}$') + + +def _urandom(): + if hasattr(os, 'urandom'): + return os.urandom(30) + return text_type(random()).encode('ascii') + + +def generate_key(salt=None): + if salt is None: + salt = repr(salt).encode('ascii') + return sha1(b''.join([ + salt, + str(time()).encode('ascii'), + _urandom() + ])).hexdigest() + + +class ModificationTrackingDict(CallbackDict): + __slots__ = ('modified',) + + def __init__(self, *args, **kwargs): + def on_update(self): + self.modified = True + self.modified = False + CallbackDict.__init__(self, on_update=on_update) + dict.update(self, *args, **kwargs) + + def copy(self): + """Create a flat copy of the dict.""" + missing = object() + result = object.__new__(self.__class__) + for name in self.__slots__: + val = getattr(self, name, missing) + if val is not missing: + setattr(result, name, val) + return result + + def __copy__(self): + return self.copy() + + +class Session(ModificationTrackingDict): + + """Subclass of a dict that keeps track of direct object changes. Changes + in mutable structures are not tracked, for those you have to set + `modified` to `True` by hand. + """ + __slots__ = ModificationTrackingDict.__slots__ + ('sid', 'new') + + def __init__(self, data, sid, new=False): + ModificationTrackingDict.__init__(self, data) + self.sid = sid + self.new = new + + def __repr__(self): + return '<%s %s%s>' % ( + self.__class__.__name__, + dict.__repr__(self), + self.should_save and '*' or '' + ) + + @property + def should_save(self): + """True if the session should be saved. + + .. versionchanged:: 0.6 + By default the session is now only saved if the session is + modified, not if it is new like it was before. + """ + return self.modified + + +class SessionStore(object): + + """Baseclass for all session stores. The Werkzeug contrib module does not + implement any useful stores besides the filesystem store, application + developers are encouraged to create their own stores. + + :param session_class: The session class to use. Defaults to + :class:`Session`. + """ + + def __init__(self, session_class=None): + if session_class is None: + session_class = Session + self.session_class = session_class + + def is_valid_key(self, key): + """Check if a key has the correct format.""" + return _sha1_re.match(key) is not None + + def generate_key(self, salt=None): + """Simple function that generates a new session key.""" + return generate_key(salt) + + def new(self): + """Generate a new session.""" + return self.session_class({}, self.generate_key(), True) + + def save(self, session): + """Save a session.""" + + def save_if_modified(self, session): + """Save if a session class wants an update.""" + if session.should_save: + self.save(session) + + def delete(self, session): + """Delete a session.""" + + def get(self, sid): + """Get a session for this sid or a new session object. This method + has to check if the session key is valid and create a new session if + that wasn't the case. + """ + return self.session_class({}, sid, True) + + +#: used for temporary files by the filesystem session store +_fs_transaction_suffix = '.__wz_sess' + + +class FilesystemSessionStore(SessionStore): + + """Simple example session store that saves sessions on the filesystem. + This store works best on POSIX systems and Windows Vista / Windows + Server 2008 and newer. + + .. versionchanged:: 0.6 + `renew_missing` was added. Previously this was considered `True`, + now the default changed to `False` and it can be explicitly + deactivated. + + :param path: the path to the folder used for storing the sessions. + If not provided the default temporary directory is used. + :param filename_template: a string template used to give the session + a filename. ``%s`` is replaced with the + session id. + :param session_class: The session class to use. Defaults to + :class:`Session`. + :param renew_missing: set to `True` if you want the store to + give the user a new sid if the session was + not yet saved. + """ + + def __init__(self, path=None, filename_template='werkzeug_%s.sess', + session_class=None, renew_missing=False, mode=0o644): + SessionStore.__init__(self, session_class) + if path is None: + path = tempfile.gettempdir() + self.path = path + if isinstance(filename_template, text_type) and PY2: + filename_template = filename_template.encode( + get_filesystem_encoding()) + assert not filename_template.endswith(_fs_transaction_suffix), \ + 'filename templates may not end with %s' % _fs_transaction_suffix + self.filename_template = filename_template + self.renew_missing = renew_missing + self.mode = mode + + def get_session_filename(self, sid): + # out of the box, this should be a strict ASCII subset but + # you might reconfigure the session object to have a more + # arbitrary string. + if isinstance(sid, text_type) and PY2: + sid = sid.encode(get_filesystem_encoding()) + return path.join(self.path, self.filename_template % sid) + + def save(self, session): + fn = self.get_session_filename(session.sid) + fd, tmp = tempfile.mkstemp(suffix=_fs_transaction_suffix, + dir=self.path) + f = os.fdopen(fd, 'wb') + try: + dump(dict(session), f, HIGHEST_PROTOCOL) + finally: + f.close() + try: + rename(tmp, fn) + os.chmod(fn, self.mode) + except (IOError, OSError): + pass + + def delete(self, session): + fn = self.get_session_filename(session.sid) + try: + os.unlink(fn) + except OSError: + pass + + def get(self, sid): + if not self.is_valid_key(sid): + return self.new() + try: + f = open(self.get_session_filename(sid), 'rb') + except IOError: + if self.renew_missing: + return self.new() + data = {} + else: + try: + try: + data = load(f) + except Exception: + data = {} + finally: + f.close() + return self.session_class(data, sid, False) + + def list(self): + """Lists all sessions in the store. + + .. versionadded:: 0.6 + """ + before, after = self.filename_template.split('%s', 1) + filename_re = re.compile(r'%s(.{5,})%s$' % (re.escape(before), + re.escape(after))) + result = [] + for filename in os.listdir(self.path): + #: this is a session that is still being saved. + if filename.endswith(_fs_transaction_suffix): + continue + match = filename_re.match(filename) + if match is not None: + result.append(match.group(1)) + return result + + +class SessionMiddleware(object): + + """A simple middleware that puts the session object of a store provided + into the WSGI environ. It automatically sets cookies and restores + sessions. + + However a middleware is not the preferred solution because it won't be as + fast as sessions managed by the application itself and will put a key into + the WSGI environment only relevant for the application which is against + the concept of WSGI. + + The cookie parameters are the same as for the :func:`~dump_cookie` + function just prefixed with ``cookie_``. Additionally `max_age` is + called `cookie_age` and not `cookie_max_age` because of backwards + compatibility. + """ + + def __init__(self, app, store, cookie_name='session_id', + cookie_age=None, cookie_expires=None, cookie_path='/', + cookie_domain=None, cookie_secure=None, + cookie_httponly=False, environ_key='werkzeug.session'): + self.app = app + self.store = store + self.cookie_name = cookie_name + self.cookie_age = cookie_age + self.cookie_expires = cookie_expires + self.cookie_path = cookie_path + self.cookie_domain = cookie_domain + self.cookie_secure = cookie_secure + self.cookie_httponly = cookie_httponly + self.environ_key = environ_key + + def __call__(self, environ, start_response): + cookie = parse_cookie(environ.get('HTTP_COOKIE', '')) + sid = cookie.get(self.cookie_name, None) + if sid is None: + session = self.store.new() + else: + session = self.store.get(sid) + environ[self.environ_key] = session + + def injecting_start_response(status, headers, exc_info=None): + if session.should_save: + self.store.save(session) + headers.append(('Set-Cookie', dump_cookie(self.cookie_name, + session.sid, self.cookie_age, + self.cookie_expires, self.cookie_path, + self.cookie_domain, self.cookie_secure, + self.cookie_httponly))) + return start_response(status, headers, exc_info) + return ClosingIterator(self.app(environ, injecting_start_response), + lambda: self.store.save_if_modified(session)) diff --git a/pype/vendor/werkzeug/contrib/testtools.py b/pype/vendor/werkzeug/contrib/testtools.py new file mode 100644 index 0000000000..3dab6dbde1 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/testtools.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.testtools + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + This module implements extended wrappers for simplified testing. + + `TestResponse` + A response wrapper which adds various cached attributes for + simplified assertions on various content types. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +from werkzeug.utils import cached_property, import_string +from werkzeug.wrappers import Response + +from warnings import warn +warn(DeprecationWarning('werkzeug.contrib.testtools is deprecated and ' + 'will be removed with Werkzeug 1.0')) + + +class ContentAccessors(object): + + """ + A mixin class for response objects that provides a couple of useful + accessors for unittesting. + """ + + def xml(self): + """Get an etree if possible.""" + if 'xml' not in self.mimetype: + raise AttributeError( + 'Not a XML response (Content-Type: %s)' + % self.mimetype) + for module in ['xml.etree.ElementTree', 'ElementTree', + 'elementtree.ElementTree']: + etree = import_string(module, silent=True) + if etree is not None: + return etree.XML(self.body) + raise RuntimeError('You must have ElementTree installed ' + 'to use TestResponse.xml') + xml = cached_property(xml) + + def lxml(self): + """Get an lxml etree if possible.""" + if ('html' not in self.mimetype and 'xml' not in self.mimetype): + raise AttributeError('Not an HTML/XML response') + from lxml import etree + try: + from lxml.html import fromstring + except ImportError: + fromstring = etree.HTML + if self.mimetype == 'text/html': + return fromstring(self.data) + return etree.XML(self.data) + lxml = cached_property(lxml) + + def json(self): + """Get the result of simplejson.loads if possible.""" + if 'json' not in self.mimetype: + raise AttributeError('Not a JSON response') + try: + from simplejson import loads + except ImportError: + from json import loads + return loads(self.data) + json = cached_property(json) + + +class TestResponse(Response, ContentAccessors): + + """Pass this to `werkzeug.test.Client` for easier unittesting.""" diff --git a/pype/vendor/werkzeug/contrib/wrappers.py b/pype/vendor/werkzeug/contrib/wrappers.py new file mode 100644 index 0000000000..6c86452915 --- /dev/null +++ b/pype/vendor/werkzeug/contrib/wrappers.py @@ -0,0 +1,284 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.contrib.wrappers + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + Extra wrappers or mixins contributed by the community. These wrappers can + be mixed in into request objects to add extra functionality. + + Example:: + + from werkzeug.wrappers import Request as RequestBase + from werkzeug.contrib.wrappers import JSONRequestMixin + + class Request(RequestBase, JSONRequestMixin): + pass + + Afterwards this request object provides the extra functionality of the + :class:`JSONRequestMixin`. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import codecs +try: + from simplejson import loads +except ImportError: + from json import loads + +from werkzeug.exceptions import BadRequest +from werkzeug.utils import cached_property +from werkzeug.http import dump_options_header, parse_options_header +from werkzeug._compat import wsgi_decoding_dance + + +def is_known_charset(charset): + """Checks if the given charset is known to Python.""" + try: + codecs.lookup(charset) + except LookupError: + return False + return True + + +class JSONRequestMixin(object): + + """Add json method to a request object. This will parse the input data + through simplejson if possible. + + :exc:`~werkzeug.exceptions.BadRequest` will be raised if the content-type + is not json or if the data itself cannot be parsed as json. + """ + + @cached_property + def json(self): + """Get the result of simplejson.loads if possible.""" + if 'json' not in self.environ.get('CONTENT_TYPE', ''): + raise BadRequest('Not a JSON request') + try: + return loads(self.data.decode(self.charset, self.encoding_errors)) + except Exception: + raise BadRequest('Unable to read JSON request') + + +class ProtobufRequestMixin(object): + + """Add protobuf parsing method to a request object. This will parse the + input data through `protobuf`_ if possible. + + :exc:`~werkzeug.exceptions.BadRequest` will be raised if the content-type + is not protobuf or if the data itself cannot be parsed property. + + .. _protobuf: http://code.google.com/p/protobuf/ + """ + + #: by default the :class:`ProtobufRequestMixin` will raise a + #: :exc:`~werkzeug.exceptions.BadRequest` if the object is not + #: initialized. You can bypass that check by setting this + #: attribute to `False`. + protobuf_check_initialization = True + + def parse_protobuf(self, proto_type): + """Parse the data into an instance of proto_type.""" + if 'protobuf' not in self.environ.get('CONTENT_TYPE', ''): + raise BadRequest('Not a Protobuf request') + + obj = proto_type() + try: + obj.ParseFromString(self.data) + except Exception: + raise BadRequest("Unable to parse Protobuf request") + + # Fail if not all required fields are set + if self.protobuf_check_initialization and not obj.IsInitialized(): + raise BadRequest("Partial Protobuf request") + + return obj + + +class RoutingArgsRequestMixin(object): + + """This request mixin adds support for the wsgiorg routing args + `specification`_. + + .. _specification: https://wsgi.readthedocs.io/en/latest/specifications/routing_args.html + """ + + def _get_routing_args(self): + return self.environ.get('wsgiorg.routing_args', (()))[0] + + def _set_routing_args(self, value): + if self.shallow: + raise RuntimeError('A shallow request tried to modify the WSGI ' + 'environment. If you really want to do that, ' + 'set `shallow` to False.') + self.environ['wsgiorg.routing_args'] = (value, self.routing_vars) + + routing_args = property(_get_routing_args, _set_routing_args, doc=''' + The positional URL arguments as `tuple`.''') + del _get_routing_args, _set_routing_args + + def _get_routing_vars(self): + rv = self.environ.get('wsgiorg.routing_args') + if rv is not None: + return rv[1] + rv = {} + if not self.shallow: + self.routing_vars = rv + return rv + + def _set_routing_vars(self, value): + if self.shallow: + raise RuntimeError('A shallow request tried to modify the WSGI ' + 'environment. If you really want to do that, ' + 'set `shallow` to False.') + self.environ['wsgiorg.routing_args'] = (self.routing_args, value) + + routing_vars = property(_get_routing_vars, _set_routing_vars, doc=''' + The keyword URL arguments as `dict`.''') + del _get_routing_vars, _set_routing_vars + + +class ReverseSlashBehaviorRequestMixin(object): + + """This mixin reverses the trailing slash behavior of :attr:`script_root` + and :attr:`path`. This makes it possible to use :func:`~urlparse.urljoin` + directly on the paths. + + Because it changes the behavior or :class:`Request` this class has to be + mixed in *before* the actual request class:: + + class MyRequest(ReverseSlashBehaviorRequestMixin, Request): + pass + + This example shows the differences (for an application mounted on + `/application` and the request going to `/application/foo/bar`): + + +---------------+-------------------+---------------------+ + | | normal behavior | reverse behavior | + +===============+===================+=====================+ + | `script_root` | ``/application`` | ``/application/`` | + +---------------+-------------------+---------------------+ + | `path` | ``/foo/bar`` | ``foo/bar`` | + +---------------+-------------------+---------------------+ + """ + + @cached_property + def path(self): + """Requested path as unicode. This works a bit like the regular path + info in the WSGI environment but will not include a leading slash. + """ + path = wsgi_decoding_dance(self.environ.get('PATH_INFO') or '', + self.charset, self.encoding_errors) + return path.lstrip('/') + + @cached_property + def script_root(self): + """The root path of the script includling a trailing slash.""" + path = wsgi_decoding_dance(self.environ.get('SCRIPT_NAME') or '', + self.charset, self.encoding_errors) + return path.rstrip('/') + '/' + + +class DynamicCharsetRequestMixin(object): + + """"If this mixin is mixed into a request class it will provide + a dynamic `charset` attribute. This means that if the charset is + transmitted in the content type headers it's used from there. + + Because it changes the behavior or :class:`Request` this class has + to be mixed in *before* the actual request class:: + + class MyRequest(DynamicCharsetRequestMixin, Request): + pass + + By default the request object assumes that the URL charset is the + same as the data charset. If the charset varies on each request + based on the transmitted data it's not a good idea to let the URLs + change based on that. Most browsers assume either utf-8 or latin1 + for the URLs if they have troubles figuring out. It's strongly + recommended to set the URL charset to utf-8:: + + class MyRequest(DynamicCharsetRequestMixin, Request): + url_charset = 'utf-8' + + .. versionadded:: 0.6 + """ + + #: the default charset that is assumed if the content type header + #: is missing or does not contain a charset parameter. The default + #: is latin1 which is what HTTP specifies as default charset. + #: You may however want to set this to utf-8 to better support + #: browsers that do not transmit a charset for incoming data. + default_charset = 'latin1' + + def unknown_charset(self, charset): + """Called if a charset was provided but is not supported by + the Python codecs module. By default latin1 is assumed then + to not lose any information, you may override this method to + change the behavior. + + :param charset: the charset that was not found. + :return: the replacement charset. + """ + return 'latin1' + + @cached_property + def charset(self): + """The charset from the content type.""" + header = self.environ.get('CONTENT_TYPE') + if header: + ct, options = parse_options_header(header) + charset = options.get('charset') + if charset: + if is_known_charset(charset): + return charset + return self.unknown_charset(charset) + return self.default_charset + + +class DynamicCharsetResponseMixin(object): + + """If this mixin is mixed into a response class it will provide + a dynamic `charset` attribute. This means that if the charset is + looked up and stored in the `Content-Type` header and updates + itself automatically. This also means a small performance hit but + can be useful if you're working with different charsets on + responses. + + Because the charset attribute is no a property at class-level, the + default value is stored in `default_charset`. + + Because it changes the behavior or :class:`Response` this class has + to be mixed in *before* the actual response class:: + + class MyResponse(DynamicCharsetResponseMixin, Response): + pass + + .. versionadded:: 0.6 + """ + + #: the default charset. + default_charset = 'utf-8' + + def _get_charset(self): + header = self.headers.get('content-type') + if header: + charset = parse_options_header(header)[1].get('charset') + if charset: + return charset + return self.default_charset + + def _set_charset(self, charset): + header = self.headers.get('content-type') + ct, options = parse_options_header(header) + if not ct: + raise TypeError('Cannot set charset if Content-Type ' + 'header is missing.') + options['charset'] = charset + self.headers['Content-Type'] = dump_options_header(ct, options) + + charset = property(_get_charset, _set_charset, doc=""" + The charset for the response. It's stored inside the + Content-Type header as a parameter.""") + del _get_charset, _set_charset diff --git a/pype/vendor/werkzeug/datastructures.py b/pype/vendor/werkzeug/datastructures.py new file mode 100644 index 0000000000..9624599da1 --- /dev/null +++ b/pype/vendor/werkzeug/datastructures.py @@ -0,0 +1,2762 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.datastructures + ~~~~~~~~~~~~~~~~~~~~~~~ + + This module provides mixins and classes with an immutable interface. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import re +import codecs +import mimetypes +from copy import deepcopy +from itertools import repeat +from collections import Container, Iterable, MutableSet + +from werkzeug._internal import _missing, _empty_stream +from werkzeug._compat import iterkeys, itervalues, iteritems, iterlists, \ + PY2, text_type, integer_types, string_types, make_literal_wrapper, \ + to_native +from werkzeug.filesystem import get_filesystem_encoding + + +_locale_delim_re = re.compile(r'[_-]') + + +def is_immutable(self): + raise TypeError('%r objects are immutable' % self.__class__.__name__) + + +def iter_multi_items(mapping): + """Iterates over the items of a mapping yielding keys and values + without dropping any from more complex structures. + """ + if isinstance(mapping, MultiDict): + for item in iteritems(mapping, multi=True): + yield item + elif isinstance(mapping, dict): + for key, value in iteritems(mapping): + if isinstance(value, (tuple, list)): + for value in value: + yield key, value + else: + yield key, value + else: + for item in mapping: + yield item + + +def native_itermethods(names): + if not PY2: + return lambda x: x + + def setviewmethod(cls, name): + viewmethod_name = 'view%s' % name + viewmethod = lambda self, *a, **kw: ViewItems(self, name, 'view_%s' % name, *a, **kw) + viewmethod.__doc__ = \ + '"""`%s()` object providing a view on %s"""' % (viewmethod_name, name) + setattr(cls, viewmethod_name, viewmethod) + + def setitermethod(cls, name): + itermethod = getattr(cls, name) + setattr(cls, 'iter%s' % name, itermethod) + listmethod = lambda self, *a, **kw: list(itermethod(self, *a, **kw)) + listmethod.__doc__ = \ + 'Like :py:meth:`iter%s`, but returns a list.' % name + setattr(cls, name, listmethod) + + def wrap(cls): + for name in names: + setitermethod(cls, name) + setviewmethod(cls, name) + return cls + return wrap + + +class ImmutableListMixin(object): + + """Makes a :class:`list` immutable. + + .. versionadded:: 0.5 + + :private: + """ + + _hash_cache = None + + def __hash__(self): + if self._hash_cache is not None: + return self._hash_cache + rv = self._hash_cache = hash(tuple(self)) + return rv + + def __reduce_ex__(self, protocol): + return type(self), (list(self),) + + def __delitem__(self, key): + is_immutable(self) + + def __iadd__(self, other): + is_immutable(self) + __imul__ = __iadd__ + + def __setitem__(self, key, value): + is_immutable(self) + + def append(self, item): + is_immutable(self) + remove = append + + def extend(self, iterable): + is_immutable(self) + + def insert(self, pos, value): + is_immutable(self) + + def pop(self, index=-1): + is_immutable(self) + + def reverse(self): + is_immutable(self) + + def sort(self, cmp=None, key=None, reverse=None): + is_immutable(self) + + +class ImmutableList(ImmutableListMixin, list): + + """An immutable :class:`list`. + + .. versionadded:: 0.5 + + :private: + """ + + def __repr__(self): + return '%s(%s)' % ( + self.__class__.__name__, + list.__repr__(self), + ) + + +class ImmutableDictMixin(object): + + """Makes a :class:`dict` immutable. + + .. versionadded:: 0.5 + + :private: + """ + _hash_cache = None + + @classmethod + def fromkeys(cls, keys, value=None): + instance = super(cls, cls).__new__(cls) + instance.__init__(zip(keys, repeat(value))) + return instance + + def __reduce_ex__(self, protocol): + return type(self), (dict(self),) + + def _iter_hashitems(self): + return iteritems(self) + + def __hash__(self): + if self._hash_cache is not None: + return self._hash_cache + rv = self._hash_cache = hash(frozenset(self._iter_hashitems())) + return rv + + def setdefault(self, key, default=None): + is_immutable(self) + + def update(self, *args, **kwargs): + is_immutable(self) + + def pop(self, key, default=None): + is_immutable(self) + + def popitem(self): + is_immutable(self) + + def __setitem__(self, key, value): + is_immutable(self) + + def __delitem__(self, key): + is_immutable(self) + + def clear(self): + is_immutable(self) + + +class ImmutableMultiDictMixin(ImmutableDictMixin): + + """Makes a :class:`MultiDict` immutable. + + .. versionadded:: 0.5 + + :private: + """ + + def __reduce_ex__(self, protocol): + return type(self), (list(iteritems(self, multi=True)),) + + def _iter_hashitems(self): + return iteritems(self, multi=True) + + def add(self, key, value): + is_immutable(self) + + def popitemlist(self): + is_immutable(self) + + def poplist(self, key): + is_immutable(self) + + def setlist(self, key, new_list): + is_immutable(self) + + def setlistdefault(self, key, default_list=None): + is_immutable(self) + + +class UpdateDictMixin(object): + + """Makes dicts call `self.on_update` on modifications. + + .. versionadded:: 0.5 + + :private: + """ + + on_update = None + + def calls_update(name): + def oncall(self, *args, **kw): + rv = getattr(super(UpdateDictMixin, self), name)(*args, **kw) + if self.on_update is not None: + self.on_update(self) + return rv + oncall.__name__ = name + return oncall + + def setdefault(self, key, default=None): + modified = key not in self + rv = super(UpdateDictMixin, self).setdefault(key, default) + if modified and self.on_update is not None: + self.on_update(self) + return rv + + def pop(self, key, default=_missing): + modified = key in self + if default is _missing: + rv = super(UpdateDictMixin, self).pop(key) + else: + rv = super(UpdateDictMixin, self).pop(key, default) + if modified and self.on_update is not None: + self.on_update(self) + return rv + + __setitem__ = calls_update('__setitem__') + __delitem__ = calls_update('__delitem__') + clear = calls_update('clear') + popitem = calls_update('popitem') + update = calls_update('update') + del calls_update + + +class TypeConversionDict(dict): + + """Works like a regular dict but the :meth:`get` method can perform + type conversions. :class:`MultiDict` and :class:`CombinedMultiDict` + are subclasses of this class and provide the same feature. + + .. versionadded:: 0.5 + """ + + def get(self, key, default=None, type=None): + """Return the default value if the requested data doesn't exist. + If `type` is provided and is a callable it should convert the value, + return it or raise a :exc:`ValueError` if that is not possible. In + this case the function will return the default as if the value was not + found: + + >>> d = TypeConversionDict(foo='42', bar='blub') + >>> d.get('foo', type=int) + 42 + >>> d.get('bar', -1, type=int) + -1 + + :param key: The key to be looked up. + :param default: The default value to be returned if the key can't + be looked up. If not further specified `None` is + returned. + :param type: A callable that is used to cast the value in the + :class:`MultiDict`. If a :exc:`ValueError` is raised + by this callable the default value is returned. + """ + try: + rv = self[key] + except KeyError: + return default + if type is not None: + try: + rv = type(rv) + except ValueError: + rv = default + return rv + + +class ImmutableTypeConversionDict(ImmutableDictMixin, TypeConversionDict): + + """Works like a :class:`TypeConversionDict` but does not support + modifications. + + .. versionadded:: 0.5 + """ + + def copy(self): + """Return a shallow mutable copy of this object. Keep in mind that + the standard library's :func:`copy` function is a no-op for this class + like for any other python immutable type (eg: :class:`tuple`). + """ + return TypeConversionDict(self) + + def __copy__(self): + return self + + +class ViewItems(object): + + def __init__(self, multi_dict, method, repr_name, *a, **kw): + self.__multi_dict = multi_dict + self.__method = method + self.__repr_name = repr_name + self.__a = a + self.__kw = kw + + def __get_items(self): + return getattr(self.__multi_dict, self.__method)(*self.__a, **self.__kw) + + def __repr__(self): + return '%s(%r)' % (self.__repr_name, list(self.__get_items())) + + def __iter__(self): + return iter(self.__get_items()) + + +@native_itermethods(['keys', 'values', 'items', 'lists', 'listvalues']) +class MultiDict(TypeConversionDict): + + """A :class:`MultiDict` is a dictionary subclass customized to deal with + multiple values for the same key which is for example used by the parsing + functions in the wrappers. This is necessary because some HTML form + elements pass multiple values for the same key. + + :class:`MultiDict` implements all standard dictionary methods. + Internally, it saves all values for a key as a list, but the standard dict + access methods will only return the first value for a key. If you want to + gain access to the other values, too, you have to use the `list` methods as + explained below. + + Basic Usage: + + >>> d = MultiDict([('a', 'b'), ('a', 'c')]) + >>> d + MultiDict([('a', 'b'), ('a', 'c')]) + >>> d['a'] + 'b' + >>> d.getlist('a') + ['b', 'c'] + >>> 'a' in d + True + + It behaves like a normal dict thus all dict functions will only return the + first value when multiple values for one key are found. + + From Werkzeug 0.3 onwards, the `KeyError` raised by this class is also a + subclass of the :exc:`~exceptions.BadRequest` HTTP exception and will + render a page for a ``400 BAD REQUEST`` if caught in a catch-all for HTTP + exceptions. + + A :class:`MultiDict` can be constructed from an iterable of + ``(key, value)`` tuples, a dict, a :class:`MultiDict` or from Werkzeug 0.2 + onwards some keyword parameters. + + :param mapping: the initial value for the :class:`MultiDict`. Either a + regular dict, an iterable of ``(key, value)`` tuples + or `None`. + """ + + def __init__(self, mapping=None): + if isinstance(mapping, MultiDict): + dict.__init__(self, ((k, l[:]) for k, l in iterlists(mapping))) + elif isinstance(mapping, dict): + tmp = {} + for key, value in iteritems(mapping): + if isinstance(value, (tuple, list)): + if len(value) == 0: + continue + value = list(value) + else: + value = [value] + tmp[key] = value + dict.__init__(self, tmp) + else: + tmp = {} + for key, value in mapping or (): + tmp.setdefault(key, []).append(value) + dict.__init__(self, tmp) + + def __getstate__(self): + return dict(self.lists()) + + def __setstate__(self, value): + dict.clear(self) + dict.update(self, value) + + def __getitem__(self, key): + """Return the first data value for this key; + raises KeyError if not found. + + :param key: The key to be looked up. + :raise KeyError: if the key does not exist. + """ + if key in self: + lst = dict.__getitem__(self, key) + if len(lst) > 0: + return lst[0] + raise exceptions.BadRequestKeyError(key) + + def __setitem__(self, key, value): + """Like :meth:`add` but removes an existing key first. + + :param key: the key for the value. + :param value: the value to set. + """ + dict.__setitem__(self, key, [value]) + + def add(self, key, value): + """Adds a new value for the key. + + .. versionadded:: 0.6 + + :param key: the key for the value. + :param value: the value to add. + """ + dict.setdefault(self, key, []).append(value) + + def getlist(self, key, type=None): + """Return the list of items for a given key. If that key is not in the + `MultiDict`, the return value will be an empty list. Just as `get` + `getlist` accepts a `type` parameter. All items will be converted + with the callable defined there. + + :param key: The key to be looked up. + :param type: A callable that is used to cast the value in the + :class:`MultiDict`. If a :exc:`ValueError` is raised + by this callable the value will be removed from the list. + :return: a :class:`list` of all the values for the key. + """ + try: + rv = dict.__getitem__(self, key) + except KeyError: + return [] + if type is None: + return list(rv) + result = [] + for item in rv: + try: + result.append(type(item)) + except ValueError: + pass + return result + + def setlist(self, key, new_list): + """Remove the old values for a key and add new ones. Note that the list + you pass the values in will be shallow-copied before it is inserted in + the dictionary. + + >>> d = MultiDict() + >>> d.setlist('foo', ['1', '2']) + >>> d['foo'] + '1' + >>> d.getlist('foo') + ['1', '2'] + + :param key: The key for which the values are set. + :param new_list: An iterable with the new values for the key. Old values + are removed first. + """ + dict.__setitem__(self, key, list(new_list)) + + def setdefault(self, key, default=None): + """Returns the value for the key if it is in the dict, otherwise it + returns `default` and sets that value for `key`. + + :param key: The key to be looked up. + :param default: The default value to be returned if the key is not + in the dict. If not further specified it's `None`. + """ + if key not in self: + self[key] = default + else: + default = self[key] + return default + + def setlistdefault(self, key, default_list=None): + """Like `setdefault` but sets multiple values. The list returned + is not a copy, but the list that is actually used internally. This + means that you can put new values into the dict by appending items + to the list: + + >>> d = MultiDict({"foo": 1}) + >>> d.setlistdefault("foo").extend([2, 3]) + >>> d.getlist("foo") + [1, 2, 3] + + :param key: The key to be looked up. + :param default_list: An iterable of default values. It is either copied + (in case it was a list) or converted into a list + before returned. + :return: a :class:`list` + """ + if key not in self: + default_list = list(default_list or ()) + dict.__setitem__(self, key, default_list) + else: + default_list = dict.__getitem__(self, key) + return default_list + + def items(self, multi=False): + """Return an iterator of ``(key, value)`` pairs. + + :param multi: If set to `True` the iterator returned will have a pair + for each value of each key. Otherwise it will only + contain pairs for the first value of each key. + """ + + for key, values in iteritems(dict, self): + if multi: + for value in values: + yield key, value + else: + yield key, values[0] + + def lists(self): + """Return a list of ``(key, values)`` pairs, where values is the list + of all values associated with the key.""" + + for key, values in iteritems(dict, self): + yield key, list(values) + + def keys(self): + return iterkeys(dict, self) + + __iter__ = keys + + def values(self): + """Returns an iterator of the first value on every key's value list.""" + for values in itervalues(dict, self): + yield values[0] + + def listvalues(self): + """Return an iterator of all values associated with a key. Zipping + :meth:`keys` and this is the same as calling :meth:`lists`: + + >>> d = MultiDict({"foo": [1, 2, 3]}) + >>> zip(d.keys(), d.listvalues()) == d.lists() + True + """ + + return itervalues(dict, self) + + def copy(self): + """Return a shallow copy of this object.""" + return self.__class__(self) + + def deepcopy(self, memo=None): + """Return a deep copy of this object.""" + return self.__class__(deepcopy(self.to_dict(flat=False), memo)) + + def to_dict(self, flat=True): + """Return the contents as regular dict. If `flat` is `True` the + returned dict will only have the first item present, if `flat` is + `False` all values will be returned as lists. + + :param flat: If set to `False` the dict returned will have lists + with all the values in it. Otherwise it will only + contain the first value for each key. + :return: a :class:`dict` + """ + if flat: + return dict(iteritems(self)) + return dict(self.lists()) + + def update(self, other_dict): + """update() extends rather than replaces existing key lists: + + >>> a = MultiDict({'x': 1}) + >>> b = MultiDict({'x': 2, 'y': 3}) + >>> a.update(b) + >>> a + MultiDict([('y', 3), ('x', 1), ('x', 2)]) + + If the value list for a key in ``other_dict`` is empty, no new values + will be added to the dict and the key will not be created: + + >>> x = {'empty_list': []} + >>> y = MultiDict() + >>> y.update(x) + >>> y + MultiDict([]) + """ + for key, value in iter_multi_items(other_dict): + MultiDict.add(self, key, value) + + def pop(self, key, default=_missing): + """Pop the first item for a list on the dict. Afterwards the + key is removed from the dict, so additional values are discarded: + + >>> d = MultiDict({"foo": [1, 2, 3]}) + >>> d.pop("foo") + 1 + >>> "foo" in d + False + + :param key: the key to pop. + :param default: if provided the value to return if the key was + not in the dictionary. + """ + try: + lst = dict.pop(self, key) + + if len(lst) == 0: + raise exceptions.BadRequestKeyError() + + return lst[0] + except KeyError as e: + if default is not _missing: + return default + raise exceptions.BadRequestKeyError(str(e)) + + def popitem(self): + """Pop an item from the dict.""" + try: + item = dict.popitem(self) + + if len(item[1]) == 0: + raise exceptions.BadRequestKeyError() + + return (item[0], item[1][0]) + except KeyError as e: + raise exceptions.BadRequestKeyError(str(e)) + + def poplist(self, key): + """Pop the list for a key from the dict. If the key is not in the dict + an empty list is returned. + + .. versionchanged:: 0.5 + If the key does no longer exist a list is returned instead of + raising an error. + """ + return dict.pop(self, key, []) + + def popitemlist(self): + """Pop a ``(key, list)`` tuple from the dict.""" + try: + return dict.popitem(self) + except KeyError as e: + raise exceptions.BadRequestKeyError(str(e)) + + def __copy__(self): + return self.copy() + + def __deepcopy__(self, memo): + return self.deepcopy(memo=memo) + + def __repr__(self): + return '%s(%r)' % (self.__class__.__name__, list(iteritems(self, multi=True))) + + +class _omd_bucket(object): + + """Wraps values in the :class:`OrderedMultiDict`. This makes it + possible to keep an order over multiple different keys. It requires + a lot of extra memory and slows down access a lot, but makes it + possible to access elements in O(1) and iterate in O(n). + """ + __slots__ = ('prev', 'key', 'value', 'next') + + def __init__(self, omd, key, value): + self.prev = omd._last_bucket + self.key = key + self.value = value + self.next = None + + if omd._first_bucket is None: + omd._first_bucket = self + if omd._last_bucket is not None: + omd._last_bucket.next = self + omd._last_bucket = self + + def unlink(self, omd): + if self.prev: + self.prev.next = self.next + if self.next: + self.next.prev = self.prev + if omd._first_bucket is self: + omd._first_bucket = self.next + if omd._last_bucket is self: + omd._last_bucket = self.prev + + +@native_itermethods(['keys', 'values', 'items', 'lists', 'listvalues']) +class OrderedMultiDict(MultiDict): + + """Works like a regular :class:`MultiDict` but preserves the + order of the fields. To convert the ordered multi dict into a + list you can use the :meth:`items` method and pass it ``multi=True``. + + In general an :class:`OrderedMultiDict` is an order of magnitude + slower than a :class:`MultiDict`. + + .. admonition:: note + + Due to a limitation in Python you cannot convert an ordered + multi dict into a regular dict by using ``dict(multidict)``. + Instead you have to use the :meth:`to_dict` method, otherwise + the internal bucket objects are exposed. + """ + + def __init__(self, mapping=None): + dict.__init__(self) + self._first_bucket = self._last_bucket = None + if mapping is not None: + OrderedMultiDict.update(self, mapping) + + def __eq__(self, other): + if not isinstance(other, MultiDict): + return NotImplemented + if isinstance(other, OrderedMultiDict): + iter1 = iteritems(self, multi=True) + iter2 = iteritems(other, multi=True) + try: + for k1, v1 in iter1: + k2, v2 = next(iter2) + if k1 != k2 or v1 != v2: + return False + except StopIteration: + return False + try: + next(iter2) + except StopIteration: + return True + return False + if len(self) != len(other): + return False + for key, values in iterlists(self): + if other.getlist(key) != values: + return False + return True + + __hash__ = None + + def __ne__(self, other): + return not self.__eq__(other) + + def __reduce_ex__(self, protocol): + return type(self), (list(iteritems(self, multi=True)),) + + def __getstate__(self): + return list(iteritems(self, multi=True)) + + def __setstate__(self, values): + dict.clear(self) + for key, value in values: + self.add(key, value) + + def __getitem__(self, key): + if key in self: + return dict.__getitem__(self, key)[0].value + raise exceptions.BadRequestKeyError(key) + + def __setitem__(self, key, value): + self.poplist(key) + self.add(key, value) + + def __delitem__(self, key): + self.pop(key) + + def keys(self): + return (key for key, value in iteritems(self)) + + __iter__ = keys + + def values(self): + return (value for key, value in iteritems(self)) + + def items(self, multi=False): + ptr = self._first_bucket + if multi: + while ptr is not None: + yield ptr.key, ptr.value + ptr = ptr.next + else: + returned_keys = set() + while ptr is not None: + if ptr.key not in returned_keys: + returned_keys.add(ptr.key) + yield ptr.key, ptr.value + ptr = ptr.next + + def lists(self): + returned_keys = set() + ptr = self._first_bucket + while ptr is not None: + if ptr.key not in returned_keys: + yield ptr.key, self.getlist(ptr.key) + returned_keys.add(ptr.key) + ptr = ptr.next + + def listvalues(self): + for key, values in iterlists(self): + yield values + + def add(self, key, value): + dict.setdefault(self, key, []).append(_omd_bucket(self, key, value)) + + def getlist(self, key, type=None): + try: + rv = dict.__getitem__(self, key) + except KeyError: + return [] + if type is None: + return [x.value for x in rv] + result = [] + for item in rv: + try: + result.append(type(item.value)) + except ValueError: + pass + return result + + def setlist(self, key, new_list): + self.poplist(key) + for value in new_list: + self.add(key, value) + + def setlistdefault(self, key, default_list=None): + raise TypeError('setlistdefault is unsupported for ' + 'ordered multi dicts') + + def update(self, mapping): + for key, value in iter_multi_items(mapping): + OrderedMultiDict.add(self, key, value) + + def poplist(self, key): + buckets = dict.pop(self, key, ()) + for bucket in buckets: + bucket.unlink(self) + return [x.value for x in buckets] + + def pop(self, key, default=_missing): + try: + buckets = dict.pop(self, key) + except KeyError as e: + if default is not _missing: + return default + raise exceptions.BadRequestKeyError(str(e)) + for bucket in buckets: + bucket.unlink(self) + return buckets[0].value + + def popitem(self): + try: + key, buckets = dict.popitem(self) + except KeyError as e: + raise exceptions.BadRequestKeyError(str(e)) + for bucket in buckets: + bucket.unlink(self) + return key, buckets[0].value + + def popitemlist(self): + try: + key, buckets = dict.popitem(self) + except KeyError as e: + raise exceptions.BadRequestKeyError(str(e)) + for bucket in buckets: + bucket.unlink(self) + return key, [x.value for x in buckets] + + +def _options_header_vkw(value, kw): + return dump_options_header(value, dict((k.replace('_', '-'), v) + for k, v in kw.items())) + + +def _unicodify_header_value(value): + if isinstance(value, bytes): + value = value.decode('latin-1') + if not isinstance(value, text_type): + value = text_type(value) + return value + + +@native_itermethods(['keys', 'values', 'items']) +class Headers(object): + + """An object that stores some headers. It has a dict-like interface + but is ordered and can store the same keys multiple times. + + This data structure is useful if you want a nicer way to handle WSGI + headers which are stored as tuples in a list. + + From Werkzeug 0.3 onwards, the :exc:`KeyError` raised by this class is + also a subclass of the :class:`~exceptions.BadRequest` HTTP exception + and will render a page for a ``400 BAD REQUEST`` if caught in a + catch-all for HTTP exceptions. + + Headers is mostly compatible with the Python :class:`wsgiref.headers.Headers` + class, with the exception of `__getitem__`. :mod:`wsgiref` will return + `None` for ``headers['missing']``, whereas :class:`Headers` will raise + a :class:`KeyError`. + + To create a new :class:`Headers` object pass it a list or dict of headers + which are used as default values. This does not reuse the list passed + to the constructor for internal usage. + + :param defaults: The list of default values for the :class:`Headers`. + + .. versionchanged:: 0.9 + This data structure now stores unicode values similar to how the + multi dicts do it. The main difference is that bytes can be set as + well which will automatically be latin1 decoded. + + .. versionchanged:: 0.9 + The :meth:`linked` function was removed without replacement as it + was an API that does not support the changes to the encoding model. + """ + + def __init__(self, defaults=None): + self._list = [] + if defaults is not None: + if isinstance(defaults, (list, Headers)): + self._list.extend(defaults) + else: + self.extend(defaults) + + def __getitem__(self, key, _get_mode=False): + if not _get_mode: + if isinstance(key, integer_types): + return self._list[key] + elif isinstance(key, slice): + return self.__class__(self._list[key]) + if not isinstance(key, string_types): + raise exceptions.BadRequestKeyError(key) + ikey = key.lower() + for k, v in self._list: + if k.lower() == ikey: + return v + # micro optimization: if we are in get mode we will catch that + # exception one stack level down so we can raise a standard + # key error instead of our special one. + if _get_mode: + raise KeyError() + raise exceptions.BadRequestKeyError(key) + + def __eq__(self, other): + return other.__class__ is self.__class__ and \ + set(other._list) == set(self._list) + + __hash__ = None + + def __ne__(self, other): + return not self.__eq__(other) + + def get(self, key, default=None, type=None, as_bytes=False): + """Return the default value if the requested data doesn't exist. + If `type` is provided and is a callable it should convert the value, + return it or raise a :exc:`ValueError` if that is not possible. In + this case the function will return the default as if the value was not + found: + + >>> d = Headers([('Content-Length', '42')]) + >>> d.get('Content-Length', type=int) + 42 + + If a headers object is bound you must not add unicode strings + because no encoding takes place. + + .. versionadded:: 0.9 + Added support for `as_bytes`. + + :param key: The key to be looked up. + :param default: The default value to be returned if the key can't + be looked up. If not further specified `None` is + returned. + :param type: A callable that is used to cast the value in the + :class:`Headers`. If a :exc:`ValueError` is raised + by this callable the default value is returned. + :param as_bytes: return bytes instead of unicode strings. + """ + try: + rv = self.__getitem__(key, _get_mode=True) + except KeyError: + return default + if as_bytes: + rv = rv.encode('latin1') + if type is None: + return rv + try: + return type(rv) + except ValueError: + return default + + def getlist(self, key, type=None, as_bytes=False): + """Return the list of items for a given key. If that key is not in the + :class:`Headers`, the return value will be an empty list. Just as + :meth:`get` :meth:`getlist` accepts a `type` parameter. All items will + be converted with the callable defined there. + + .. versionadded:: 0.9 + Added support for `as_bytes`. + + :param key: The key to be looked up. + :param type: A callable that is used to cast the value in the + :class:`Headers`. If a :exc:`ValueError` is raised + by this callable the value will be removed from the list. + :return: a :class:`list` of all the values for the key. + :param as_bytes: return bytes instead of unicode strings. + """ + ikey = key.lower() + result = [] + for k, v in self: + if k.lower() == ikey: + if as_bytes: + v = v.encode('latin1') + if type is not None: + try: + v = type(v) + except ValueError: + continue + result.append(v) + return result + + def get_all(self, name): + """Return a list of all the values for the named field. + + This method is compatible with the :mod:`wsgiref` + :meth:`~wsgiref.headers.Headers.get_all` method. + """ + return self.getlist(name) + + def items(self, lower=False): + for key, value in self: + if lower: + key = key.lower() + yield key, value + + def keys(self, lower=False): + for key, _ in iteritems(self, lower): + yield key + + def values(self): + for _, value in iteritems(self): + yield value + + def extend(self, iterable): + """Extend the headers with a dict or an iterable yielding keys and + values. + """ + if isinstance(iterable, dict): + for key, value in iteritems(iterable): + if isinstance(value, (tuple, list)): + for v in value: + self.add(key, v) + else: + self.add(key, value) + else: + for key, value in iterable: + self.add(key, value) + + def __delitem__(self, key, _index_operation=True): + if _index_operation and isinstance(key, (integer_types, slice)): + del self._list[key] + return + key = key.lower() + new = [] + for k, v in self._list: + if k.lower() != key: + new.append((k, v)) + self._list[:] = new + + def remove(self, key): + """Remove a key. + + :param key: The key to be removed. + """ + return self.__delitem__(key, _index_operation=False) + + def pop(self, key=None, default=_missing): + """Removes and returns a key or index. + + :param key: The key to be popped. If this is an integer the item at + that position is removed, if it's a string the value for + that key is. If the key is omitted or `None` the last + item is removed. + :return: an item. + """ + if key is None: + return self._list.pop() + if isinstance(key, integer_types): + return self._list.pop(key) + try: + rv = self[key] + self.remove(key) + except KeyError: + if default is not _missing: + return default + raise + return rv + + def popitem(self): + """Removes a key or index and returns a (key, value) item.""" + return self.pop() + + def __contains__(self, key): + """Check if a key is present.""" + try: + self.__getitem__(key, _get_mode=True) + except KeyError: + return False + return True + + has_key = __contains__ + + def __iter__(self): + """Yield ``(key, value)`` tuples.""" + return iter(self._list) + + def __len__(self): + return len(self._list) + + def add(self, _key, _value, **kw): + """Add a new header tuple to the list. + + Keyword arguments can specify additional parameters for the header + value, with underscores converted to dashes:: + + >>> d = Headers() + >>> d.add('Content-Type', 'text/plain') + >>> d.add('Content-Disposition', 'attachment', filename='foo.png') + + The keyword argument dumping uses :func:`dump_options_header` + behind the scenes. + + .. versionadded:: 0.4.1 + keyword arguments were added for :mod:`wsgiref` compatibility. + """ + if kw: + _value = _options_header_vkw(_value, kw) + _value = _unicodify_header_value(_value) + self._validate_value(_value) + self._list.append((_key, _value)) + + def _validate_value(self, value): + if not isinstance(value, text_type): + raise TypeError('Value should be unicode.') + if u'\n' in value or u'\r' in value: + raise ValueError('Detected newline in header value. This is ' + 'a potential security problem') + + def add_header(self, _key, _value, **_kw): + """Add a new header tuple to the list. + + An alias for :meth:`add` for compatibility with the :mod:`wsgiref` + :meth:`~wsgiref.headers.Headers.add_header` method. + """ + self.add(_key, _value, **_kw) + + def clear(self): + """Clears all headers.""" + del self._list[:] + + def set(self, _key, _value, **kw): + """Remove all header tuples for `key` and add a new one. The newly + added key either appears at the end of the list if there was no + entry or replaces the first one. + + Keyword arguments can specify additional parameters for the header + value, with underscores converted to dashes. See :meth:`add` for + more information. + + .. versionchanged:: 0.6.1 + :meth:`set` now accepts the same arguments as :meth:`add`. + + :param key: The key to be inserted. + :param value: The value to be inserted. + """ + if kw: + _value = _options_header_vkw(_value, kw) + _value = _unicodify_header_value(_value) + self._validate_value(_value) + if not self._list: + self._list.append((_key, _value)) + return + listiter = iter(self._list) + ikey = _key.lower() + for idx, (old_key, old_value) in enumerate(listiter): + if old_key.lower() == ikey: + # replace first ocurrence + self._list[idx] = (_key, _value) + break + else: + self._list.append((_key, _value)) + return + self._list[idx + 1:] = [t for t in listiter if t[0].lower() != ikey] + + def setdefault(self, key, default): + """Returns the value for the key if it is in the dict, otherwise it + returns `default` and sets that value for `key`. + + :param key: The key to be looked up. + :param default: The default value to be returned if the key is not + in the dict. If not further specified it's `None`. + """ + if key in self: + return self[key] + self.set(key, default) + return default + + def __setitem__(self, key, value): + """Like :meth:`set` but also supports index/slice based setting.""" + if isinstance(key, (slice, integer_types)): + if isinstance(key, integer_types): + value = [value] + value = [(k, _unicodify_header_value(v)) for (k, v) in value] + [self._validate_value(v) for (k, v) in value] + if isinstance(key, integer_types): + self._list[key] = value[0] + else: + self._list[key] = value + else: + self.set(key, value) + + def to_list(self, charset='iso-8859-1'): + """Convert the headers into a list suitable for WSGI.""" + from warnings import warn + warn(DeprecationWarning('Method removed, use to_wsgi_list instead'), + stacklevel=2) + return self.to_wsgi_list() + + def to_wsgi_list(self): + """Convert the headers into a list suitable for WSGI. + + The values are byte strings in Python 2 converted to latin1 and unicode + strings in Python 3 for the WSGI server to encode. + + :return: list + """ + if PY2: + return [(to_native(k), v.encode('latin1')) for k, v in self] + return list(self) + + def copy(self): + return self.__class__(self._list) + + def __copy__(self): + return self.copy() + + def __str__(self): + """Returns formatted headers suitable for HTTP transmission.""" + strs = [] + for key, value in self.to_wsgi_list(): + strs.append('%s: %s' % (key, value)) + strs.append('\r\n') + return '\r\n'.join(strs) + + def __repr__(self): + return '%s(%r)' % ( + self.__class__.__name__, + list(self) + ) + + +class ImmutableHeadersMixin(object): + + """Makes a :class:`Headers` immutable. We do not mark them as + hashable though since the only usecase for this datastructure + in Werkzeug is a view on a mutable structure. + + .. versionadded:: 0.5 + + :private: + """ + + def __delitem__(self, key): + is_immutable(self) + + def __setitem__(self, key, value): + is_immutable(self) + set = __setitem__ + + def add(self, item): + is_immutable(self) + remove = add_header = add + + def extend(self, iterable): + is_immutable(self) + + def insert(self, pos, value): + is_immutable(self) + + def pop(self, index=-1): + is_immutable(self) + + def popitem(self): + is_immutable(self) + + def setdefault(self, key, default): + is_immutable(self) + + +class EnvironHeaders(ImmutableHeadersMixin, Headers): + + """Read only version of the headers from a WSGI environment. This + provides the same interface as `Headers` and is constructed from + a WSGI environment. + + From Werkzeug 0.3 onwards, the `KeyError` raised by this class is also a + subclass of the :exc:`~exceptions.BadRequest` HTTP exception and will + render a page for a ``400 BAD REQUEST`` if caught in a catch-all for + HTTP exceptions. + """ + + def __init__(self, environ): + self.environ = environ + + def __eq__(self, other): + return self.environ is other.environ + + __hash__ = None + + def __getitem__(self, key, _get_mode=False): + # _get_mode is a no-op for this class as there is no index but + # used because get() calls it. + if not isinstance(key, string_types): + raise KeyError(key) + key = key.upper().replace('-', '_') + if key in ('CONTENT_TYPE', 'CONTENT_LENGTH'): + return _unicodify_header_value(self.environ[key]) + return _unicodify_header_value(self.environ['HTTP_' + key]) + + def __len__(self): + # the iter is necessary because otherwise list calls our + # len which would call list again and so forth. + return len(list(iter(self))) + + def __iter__(self): + for key, value in iteritems(self.environ): + if key.startswith('HTTP_') and key not in \ + ('HTTP_CONTENT_TYPE', 'HTTP_CONTENT_LENGTH'): + yield (key[5:].replace('_', '-').title(), + _unicodify_header_value(value)) + elif key in ('CONTENT_TYPE', 'CONTENT_LENGTH') and value: + yield (key.replace('_', '-').title(), + _unicodify_header_value(value)) + + def copy(self): + raise TypeError('cannot create %r copies' % self.__class__.__name__) + + +@native_itermethods(['keys', 'values', 'items', 'lists', 'listvalues']) +class CombinedMultiDict(ImmutableMultiDictMixin, MultiDict): + + """A read only :class:`MultiDict` that you can pass multiple :class:`MultiDict` + instances as sequence and it will combine the return values of all wrapped + dicts: + + >>> from werkzeug.datastructures import CombinedMultiDict, MultiDict + >>> post = MultiDict([('foo', 'bar')]) + >>> get = MultiDict([('blub', 'blah')]) + >>> combined = CombinedMultiDict([get, post]) + >>> combined['foo'] + 'bar' + >>> combined['blub'] + 'blah' + + This works for all read operations and will raise a `TypeError` for + methods that usually change data which isn't possible. + + From Werkzeug 0.3 onwards, the `KeyError` raised by this class is also a + subclass of the :exc:`~exceptions.BadRequest` HTTP exception and will + render a page for a ``400 BAD REQUEST`` if caught in a catch-all for HTTP + exceptions. + """ + + def __reduce_ex__(self, protocol): + return type(self), (self.dicts,) + + def __init__(self, dicts=None): + self.dicts = dicts or [] + + @classmethod + def fromkeys(cls): + raise TypeError('cannot create %r instances by fromkeys' % + cls.__name__) + + def __getitem__(self, key): + for d in self.dicts: + if key in d: + return d[key] + raise exceptions.BadRequestKeyError(key) + + def get(self, key, default=None, type=None): + for d in self.dicts: + if key in d: + if type is not None: + try: + return type(d[key]) + except ValueError: + continue + return d[key] + return default + + def getlist(self, key, type=None): + rv = [] + for d in self.dicts: + rv.extend(d.getlist(key, type)) + return rv + + def _keys_impl(self): + """This function exists so __len__ can be implemented more efficiently, + saving one list creation from an iterator. + + Using this for Python 2's ``dict.keys`` behavior would be useless since + `dict.keys` in Python 2 returns a list, while we have a set here. + """ + rv = set() + for d in self.dicts: + rv.update(iterkeys(d)) + return rv + + def keys(self): + return iter(self._keys_impl()) + + __iter__ = keys + + def items(self, multi=False): + found = set() + for d in self.dicts: + for key, value in iteritems(d, multi): + if multi: + yield key, value + elif key not in found: + found.add(key) + yield key, value + + def values(self): + for key, value in iteritems(self): + yield value + + def lists(self): + rv = {} + for d in self.dicts: + for key, values in iterlists(d): + rv.setdefault(key, []).extend(values) + return iteritems(rv) + + def listvalues(self): + return (x[1] for x in self.lists()) + + def copy(self): + """Return a shallow copy of this object.""" + return self.__class__(self.dicts[:]) + + def to_dict(self, flat=True): + """Return the contents as regular dict. If `flat` is `True` the + returned dict will only have the first item present, if `flat` is + `False` all values will be returned as lists. + + :param flat: If set to `False` the dict returned will have lists + with all the values in it. Otherwise it will only + contain the first item for each key. + :return: a :class:`dict` + """ + rv = {} + for d in reversed(self.dicts): + rv.update(d.to_dict(flat)) + return rv + + def __len__(self): + return len(self._keys_impl()) + + def __contains__(self, key): + for d in self.dicts: + if key in d: + return True + return False + + has_key = __contains__ + + def __repr__(self): + return '%s(%r)' % (self.__class__.__name__, self.dicts) + + +class FileMultiDict(MultiDict): + + """A special :class:`MultiDict` that has convenience methods to add + files to it. This is used for :class:`EnvironBuilder` and generally + useful for unittesting. + + .. versionadded:: 0.5 + """ + + def add_file(self, name, file, filename=None, content_type=None): + """Adds a new file to the dict. `file` can be a file name or + a :class:`file`-like or a :class:`FileStorage` object. + + :param name: the name of the field. + :param file: a filename or :class:`file`-like object + :param filename: an optional filename + :param content_type: an optional content type + """ + if isinstance(file, FileStorage): + value = file + else: + if isinstance(file, string_types): + if filename is None: + filename = file + file = open(file, 'rb') + if filename and content_type is None: + content_type = mimetypes.guess_type(filename)[0] or \ + 'application/octet-stream' + value = FileStorage(file, filename, name, content_type) + + self.add(name, value) + + +class ImmutableDict(ImmutableDictMixin, dict): + + """An immutable :class:`dict`. + + .. versionadded:: 0.5 + """ + + def __repr__(self): + return '%s(%s)' % ( + self.__class__.__name__, + dict.__repr__(self), + ) + + def copy(self): + """Return a shallow mutable copy of this object. Keep in mind that + the standard library's :func:`copy` function is a no-op for this class + like for any other python immutable type (eg: :class:`tuple`). + """ + return dict(self) + + def __copy__(self): + return self + + +class ImmutableMultiDict(ImmutableMultiDictMixin, MultiDict): + + """An immutable :class:`MultiDict`. + + .. versionadded:: 0.5 + """ + + def copy(self): + """Return a shallow mutable copy of this object. Keep in mind that + the standard library's :func:`copy` function is a no-op for this class + like for any other python immutable type (eg: :class:`tuple`). + """ + return MultiDict(self) + + def __copy__(self): + return self + + +class ImmutableOrderedMultiDict(ImmutableMultiDictMixin, OrderedMultiDict): + + """An immutable :class:`OrderedMultiDict`. + + .. versionadded:: 0.6 + """ + + def _iter_hashitems(self): + return enumerate(iteritems(self, multi=True)) + + def copy(self): + """Return a shallow mutable copy of this object. Keep in mind that + the standard library's :func:`copy` function is a no-op for this class + like for any other python immutable type (eg: :class:`tuple`). + """ + return OrderedMultiDict(self) + + def __copy__(self): + return self + + +@native_itermethods(['values']) +class Accept(ImmutableList): + + """An :class:`Accept` object is just a list subclass for lists of + ``(value, quality)`` tuples. It is automatically sorted by specificity + and quality. + + All :class:`Accept` objects work similar to a list but provide extra + functionality for working with the data. Containment checks are + normalized to the rules of that header: + + >>> a = CharsetAccept([('ISO-8859-1', 1), ('utf-8', 0.7)]) + >>> a.best + 'ISO-8859-1' + >>> 'iso-8859-1' in a + True + >>> 'UTF8' in a + True + >>> 'utf7' in a + False + + To get the quality for an item you can use normal item lookup: + + >>> print a['utf-8'] + 0.7 + >>> a['utf7'] + 0 + + .. versionchanged:: 0.5 + :class:`Accept` objects are forced immutable now. + """ + + def __init__(self, values=()): + if values is None: + list.__init__(self) + self.provided = False + elif isinstance(values, Accept): + self.provided = values.provided + list.__init__(self, values) + else: + self.provided = True + values = sorted(values, key=lambda x: (self._specificity(x[0]), x[1], x[0]), + reverse=True) + list.__init__(self, values) + + def _specificity(self, value): + """Returns a tuple describing the value's specificity.""" + return value != '*', + + def _value_matches(self, value, item): + """Check if a value matches a given accept item.""" + return item == '*' or item.lower() == value.lower() + + def __getitem__(self, key): + """Besides index lookup (getting item n) you can also pass it a string + to get the quality for the item. If the item is not in the list, the + returned quality is ``0``. + """ + if isinstance(key, string_types): + return self.quality(key) + return list.__getitem__(self, key) + + def quality(self, key): + """Returns the quality of the key. + + .. versionadded:: 0.6 + In previous versions you had to use the item-lookup syntax + (eg: ``obj[key]`` instead of ``obj.quality(key)``) + """ + for item, quality in self: + if self._value_matches(key, item): + return quality + return 0 + + def __contains__(self, value): + for item, quality in self: + if self._value_matches(value, item): + return True + return False + + def __repr__(self): + return '%s([%s])' % ( + self.__class__.__name__, + ', '.join('(%r, %s)' % (x, y) for x, y in self) + ) + + def index(self, key): + """Get the position of an entry or raise :exc:`ValueError`. + + :param key: The key to be looked up. + + .. versionchanged:: 0.5 + This used to raise :exc:`IndexError`, which was inconsistent + with the list API. + """ + if isinstance(key, string_types): + for idx, (item, quality) in enumerate(self): + if self._value_matches(key, item): + return idx + raise ValueError(key) + return list.index(self, key) + + def find(self, key): + """Get the position of an entry or return -1. + + :param key: The key to be looked up. + """ + try: + return self.index(key) + except ValueError: + return -1 + + def values(self): + """Iterate over all values.""" + for item in self: + yield item[0] + + def to_header(self): + """Convert the header set into an HTTP header string.""" + result = [] + for value, quality in self: + if quality != 1: + value = '%s;q=%s' % (value, quality) + result.append(value) + return ','.join(result) + + def __str__(self): + return self.to_header() + + def _best_single_match(self, match): + for client_item, quality in self: + if self._value_matches(match, client_item): + # self is sorted by specificity descending, we can exit + return client_item, quality + + def best_match(self, matches, default=None): + """Returns the best match from a list of possible matches based + on the specificity and quality of the client. If two items have the + same quality and specificity, the one is returned that comes first. + + :param matches: a list of matches to check for + :param default: the value that is returned if none match + """ + result = default + best_quality = -1 + best_specificity = (-1,) + for server_item in matches: + match = self._best_single_match(server_item) + if not match: + continue + client_item, quality = match + specificity = self._specificity(client_item) + if quality <= 0 or quality < best_quality: + continue + # better quality or same quality but more specific => better match + if quality > best_quality or specificity > best_specificity: + result = server_item + best_quality = quality + best_specificity = specificity + return result + + @property + def best(self): + """The best match as value.""" + if self: + return self[0][0] + + +class MIMEAccept(Accept): + + """Like :class:`Accept` but with special methods and behavior for + mimetypes. + """ + + def _specificity(self, value): + return tuple(x != '*' for x in value.split('/', 1)) + + def _value_matches(self, value, item): + def _normalize(x): + x = x.lower() + return x == '*' and ('*', '*') or x.split('/', 1) + + # this is from the application which is trusted. to avoid developer + # frustration we actually check these for valid values + if '/' not in value: + raise ValueError('invalid mimetype %r' % value) + value_type, value_subtype = _normalize(value) + if value_type == '*' and value_subtype != '*': + raise ValueError('invalid mimetype %r' % value) + + if '/' not in item: + return False + item_type, item_subtype = _normalize(item) + if item_type == '*' and item_subtype != '*': + return False + return ( + (item_type == item_subtype == '*' or + value_type == value_subtype == '*') or + (item_type == value_type and (item_subtype == '*' or + value_subtype == '*' or + item_subtype == value_subtype)) + ) + + @property + def accept_html(self): + """True if this object accepts HTML.""" + return ( + 'text/html' in self or + 'application/xhtml+xml' in self or + self.accept_xhtml + ) + + @property + def accept_xhtml(self): + """True if this object accepts XHTML.""" + return ( + 'application/xhtml+xml' in self or + 'application/xml' in self + ) + + @property + def accept_json(self): + """True if this object accepts JSON.""" + return 'application/json' in self + + +class LanguageAccept(Accept): + + """Like :class:`Accept` but with normalization for languages.""" + + def _value_matches(self, value, item): + def _normalize(language): + return _locale_delim_re.split(language.lower()) + return item == '*' or _normalize(value) == _normalize(item) + + +class CharsetAccept(Accept): + + """Like :class:`Accept` but with normalization for charsets.""" + + def _value_matches(self, value, item): + def _normalize(name): + try: + return codecs.lookup(name).name + except LookupError: + return name.lower() + return item == '*' or _normalize(value) == _normalize(item) + + +def cache_property(key, empty, type): + """Return a new property object for a cache header. Useful if you + want to add support for a cache extension in a subclass.""" + return property(lambda x: x._get_cache_value(key, empty, type), + lambda x, v: x._set_cache_value(key, v, type), + lambda x: x._del_cache_value(key), + 'accessor for %r' % key) + + +class _CacheControl(UpdateDictMixin, dict): + + """Subclass of a dict that stores values for a Cache-Control header. It + has accessors for all the cache-control directives specified in RFC 2616. + The class does not differentiate between request and response directives. + + Because the cache-control directives in the HTTP header use dashes the + python descriptors use underscores for that. + + To get a header of the :class:`CacheControl` object again you can convert + the object into a string or call the :meth:`to_header` method. If you plan + to subclass it and add your own items have a look at the sourcecode for + that class. + + .. versionchanged:: 0.4 + + Setting `no_cache` or `private` to boolean `True` will set the implicit + none-value which is ``*``: + + >>> cc = ResponseCacheControl() + >>> cc.no_cache = True + >>> cc + + >>> cc.no_cache + '*' + >>> cc.no_cache = None + >>> cc + + + In versions before 0.5 the behavior documented here affected the now + no longer existing `CacheControl` class. + """ + + no_cache = cache_property('no-cache', '*', None) + no_store = cache_property('no-store', None, bool) + max_age = cache_property('max-age', -1, int) + no_transform = cache_property('no-transform', None, None) + + def __init__(self, values=(), on_update=None): + dict.__init__(self, values or ()) + self.on_update = on_update + self.provided = values is not None + + def _get_cache_value(self, key, empty, type): + """Used internally by the accessor properties.""" + if type is bool: + return key in self + if key in self: + value = self[key] + if value is None: + return empty + elif type is not None: + try: + value = type(value) + except ValueError: + pass + return value + + def _set_cache_value(self, key, value, type): + """Used internally by the accessor properties.""" + if type is bool: + if value: + self[key] = None + else: + self.pop(key, None) + else: + if value is None: + self.pop(key) + elif value is True: + self[key] = None + else: + self[key] = value + + def _del_cache_value(self, key): + """Used internally by the accessor properties.""" + if key in self: + del self[key] + + def to_header(self): + """Convert the stored values into a cache control header.""" + return dump_header(self) + + def __str__(self): + return self.to_header() + + def __repr__(self): + return '<%s %s>' % ( + self.__class__.__name__, + " ".join( + "%s=%r" % (k, v) for k, v in sorted(self.items()) + ), + ) + + +class RequestCacheControl(ImmutableDictMixin, _CacheControl): + + """A cache control for requests. This is immutable and gives access + to all the request-relevant cache control headers. + + To get a header of the :class:`RequestCacheControl` object again you can + convert the object into a string or call the :meth:`to_header` method. If + you plan to subclass it and add your own items have a look at the sourcecode + for that class. + + .. versionadded:: 0.5 + In previous versions a `CacheControl` class existed that was used + both for request and response. + """ + + max_stale = cache_property('max-stale', '*', int) + min_fresh = cache_property('min-fresh', '*', int) + no_transform = cache_property('no-transform', None, None) + only_if_cached = cache_property('only-if-cached', None, bool) + + +class ResponseCacheControl(_CacheControl): + + """A cache control for responses. Unlike :class:`RequestCacheControl` + this is mutable and gives access to response-relevant cache control + headers. + + To get a header of the :class:`ResponseCacheControl` object again you can + convert the object into a string or call the :meth:`to_header` method. If + you plan to subclass it and add your own items have a look at the sourcecode + for that class. + + .. versionadded:: 0.5 + In previous versions a `CacheControl` class existed that was used + both for request and response. + """ + + public = cache_property('public', None, bool) + private = cache_property('private', '*', None) + must_revalidate = cache_property('must-revalidate', None, bool) + proxy_revalidate = cache_property('proxy-revalidate', None, bool) + s_maxage = cache_property('s-maxage', None, None) + + +# attach cache_property to the _CacheControl as staticmethod +# so that others can reuse it. +_CacheControl.cache_property = staticmethod(cache_property) + + +class CallbackDict(UpdateDictMixin, dict): + + """A dict that calls a function passed every time something is changed. + The function is passed the dict instance. + """ + + def __init__(self, initial=None, on_update=None): + dict.__init__(self, initial or ()) + self.on_update = on_update + + def __repr__(self): + return '<%s %s>' % ( + self.__class__.__name__, + dict.__repr__(self) + ) + + +class HeaderSet(MutableSet): + + """Similar to the :class:`ETags` class this implements a set-like structure. + Unlike :class:`ETags` this is case insensitive and used for vary, allow, and + content-language headers. + + If not constructed using the :func:`parse_set_header` function the + instantiation works like this: + + >>> hs = HeaderSet(['foo', 'bar', 'baz']) + >>> hs + HeaderSet(['foo', 'bar', 'baz']) + """ + + def __init__(self, headers=None, on_update=None): + self._headers = list(headers or ()) + self._set = set([x.lower() for x in self._headers]) + self.on_update = on_update + + def add(self, header): + """Add a new header to the set.""" + self.update((header,)) + + def remove(self, header): + """Remove a header from the set. This raises an :exc:`KeyError` if the + header is not in the set. + + .. versionchanged:: 0.5 + In older versions a :exc:`IndexError` was raised instead of a + :exc:`KeyError` if the object was missing. + + :param header: the header to be removed. + """ + key = header.lower() + if key not in self._set: + raise KeyError(header) + self._set.remove(key) + for idx, key in enumerate(self._headers): + if key.lower() == header: + del self._headers[idx] + break + if self.on_update is not None: + self.on_update(self) + + def update(self, iterable): + """Add all the headers from the iterable to the set. + + :param iterable: updates the set with the items from the iterable. + """ + inserted_any = False + for header in iterable: + key = header.lower() + if key not in self._set: + self._headers.append(header) + self._set.add(key) + inserted_any = True + if inserted_any and self.on_update is not None: + self.on_update(self) + + def discard(self, header): + """Like :meth:`remove` but ignores errors. + + :param header: the header to be discarded. + """ + try: + return self.remove(header) + except KeyError: + pass + + def find(self, header): + """Return the index of the header in the set or return -1 if not found. + + :param header: the header to be looked up. + """ + header = header.lower() + for idx, item in enumerate(self._headers): + if item.lower() == header: + return idx + return -1 + + def index(self, header): + """Return the index of the header in the set or raise an + :exc:`IndexError`. + + :param header: the header to be looked up. + """ + rv = self.find(header) + if rv < 0: + raise IndexError(header) + return rv + + def clear(self): + """Clear the set.""" + self._set.clear() + del self._headers[:] + if self.on_update is not None: + self.on_update(self) + + def as_set(self, preserve_casing=False): + """Return the set as real python set type. When calling this, all + the items are converted to lowercase and the ordering is lost. + + :param preserve_casing: if set to `True` the items in the set returned + will have the original case like in the + :class:`HeaderSet`, otherwise they will + be lowercase. + """ + if preserve_casing: + return set(self._headers) + return set(self._set) + + def to_header(self): + """Convert the header set into an HTTP header string.""" + return ', '.join(map(quote_header_value, self._headers)) + + def __getitem__(self, idx): + return self._headers[idx] + + def __delitem__(self, idx): + rv = self._headers.pop(idx) + self._set.remove(rv.lower()) + if self.on_update is not None: + self.on_update(self) + + def __setitem__(self, idx, value): + old = self._headers[idx] + self._set.remove(old.lower()) + self._headers[idx] = value + self._set.add(value.lower()) + if self.on_update is not None: + self.on_update(self) + + def __contains__(self, header): + return header.lower() in self._set + + def __len__(self): + return len(self._set) + + def __iter__(self): + return iter(self._headers) + + def __nonzero__(self): + return bool(self._set) + + def __str__(self): + return self.to_header() + + def __repr__(self): + return '%s(%r)' % ( + self.__class__.__name__, + self._headers + ) + + +class ETags(Container, Iterable): + + """A set that can be used to check if one etag is present in a collection + of etags. + """ + + def __init__(self, strong_etags=None, weak_etags=None, star_tag=False): + self._strong = frozenset(not star_tag and strong_etags or ()) + self._weak = frozenset(weak_etags or ()) + self.star_tag = star_tag + + def as_set(self, include_weak=False): + """Convert the `ETags` object into a python set. Per default all the + weak etags are not part of this set.""" + rv = set(self._strong) + if include_weak: + rv.update(self._weak) + return rv + + def is_weak(self, etag): + """Check if an etag is weak.""" + return etag in self._weak + + def is_strong(self, etag): + """Check if an etag is strong.""" + return etag in self._strong + + def contains_weak(self, etag): + """Check if an etag is part of the set including weak and strong tags.""" + return self.is_weak(etag) or self.contains(etag) + + def contains(self, etag): + """Check if an etag is part of the set ignoring weak tags. + It is also possible to use the ``in`` operator. + """ + if self.star_tag: + return True + return self.is_strong(etag) + + def contains_raw(self, etag): + """When passed a quoted tag it will check if this tag is part of the + set. If the tag is weak it is checked against weak and strong tags, + otherwise strong only.""" + etag, weak = unquote_etag(etag) + if weak: + return self.contains_weak(etag) + return self.contains(etag) + + def to_header(self): + """Convert the etags set into a HTTP header string.""" + if self.star_tag: + return '*' + return ', '.join( + ['"%s"' % x for x in self._strong] + + ['W/"%s"' % x for x in self._weak] + ) + + def __call__(self, etag=None, data=None, include_weak=False): + if [etag, data].count(None) != 1: + raise TypeError('either tag or data required, but at least one') + if etag is None: + etag = generate_etag(data) + if include_weak: + if etag in self._weak: + return True + return etag in self._strong + + def __bool__(self): + return bool(self.star_tag or self._strong or self._weak) + + __nonzero__ = __bool__ + + def __str__(self): + return self.to_header() + + def __iter__(self): + return iter(self._strong) + + def __contains__(self, etag): + return self.contains(etag) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, str(self)) + + +class IfRange(object): + + """Very simple object that represents the `If-Range` header in parsed + form. It will either have neither a etag or date or one of either but + never both. + + .. versionadded:: 0.7 + """ + + def __init__(self, etag=None, date=None): + #: The etag parsed and unquoted. Ranges always operate on strong + #: etags so the weakness information is not necessary. + self.etag = etag + #: The date in parsed format or `None`. + self.date = date + + def to_header(self): + """Converts the object back into an HTTP header.""" + if self.date is not None: + return http_date(self.date) + if self.etag is not None: + return quote_etag(self.etag) + return '' + + def __str__(self): + return self.to_header() + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, str(self)) + + +class Range(object): + + """Represents a range header. All the methods are only supporting bytes + as unit. It does store multiple ranges but :meth:`range_for_length` will + only work if only one range is provided. + + .. versionadded:: 0.7 + """ + + def __init__(self, units, ranges): + #: The units of this range. Usually "bytes". + self.units = units + #: A list of ``(begin, end)`` tuples for the range header provided. + #: The ranges are non-inclusive. + self.ranges = ranges + + def range_for_length(self, length): + """If the range is for bytes, the length is not None and there is + exactly one range and it is satisfiable it returns a ``(start, stop)`` + tuple, otherwise `None`. + """ + if self.units != 'bytes' or length is None or len(self.ranges) != 1: + return None + start, end = self.ranges[0] + if end is None: + end = length + if start < 0: + start += length + if is_byte_range_valid(start, end, length): + return start, min(end, length) + + def make_content_range(self, length): + """Creates a :class:`~werkzeug.datastructures.ContentRange` object + from the current range and given content length. + """ + rng = self.range_for_length(length) + if rng is not None: + return ContentRange(self.units, rng[0], rng[1], length) + + def to_header(self): + """Converts the object back into an HTTP header.""" + ranges = [] + for begin, end in self.ranges: + if end is None: + ranges.append(begin >= 0 and '%s-' % begin or str(begin)) + else: + ranges.append('%s-%s' % (begin, end - 1)) + return '%s=%s' % (self.units, ','.join(ranges)) + + def to_content_range_header(self, length): + """Converts the object into `Content-Range` HTTP header, + based on given length + """ + range_for_length = self.range_for_length(length) + if range_for_length is not None: + return '%s %d-%d/%d' % (self.units, + range_for_length[0], + range_for_length[1] - 1, length) + return None + + def __str__(self): + return self.to_header() + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, str(self)) + + +class ContentRange(object): + + """Represents the content range header. + + .. versionadded:: 0.7 + """ + + def __init__(self, units, start, stop, length=None, on_update=None): + assert is_byte_range_valid(start, stop, length), \ + 'Bad range provided' + self.on_update = on_update + self.set(start, stop, length, units) + + def _callback_property(name): + def fget(self): + return getattr(self, name) + + def fset(self, value): + setattr(self, name, value) + if self.on_update is not None: + self.on_update(self) + return property(fget, fset) + + #: The units to use, usually "bytes" + units = _callback_property('_units') + #: The start point of the range or `None`. + start = _callback_property('_start') + #: The stop point of the range (non-inclusive) or `None`. Can only be + #: `None` if also start is `None`. + stop = _callback_property('_stop') + #: The length of the range or `None`. + length = _callback_property('_length') + + def set(self, start, stop, length=None, units='bytes'): + """Simple method to update the ranges.""" + assert is_byte_range_valid(start, stop, length), \ + 'Bad range provided' + self._units = units + self._start = start + self._stop = stop + self._length = length + if self.on_update is not None: + self.on_update(self) + + def unset(self): + """Sets the units to `None` which indicates that the header should + no longer be used. + """ + self.set(None, None, units=None) + + def to_header(self): + if self.units is None: + return '' + if self.length is None: + length = '*' + else: + length = self.length + if self.start is None: + return '%s */%s' % (self.units, length) + return '%s %s-%s/%s' % ( + self.units, + self.start, + self.stop - 1, + length + ) + + def __nonzero__(self): + return self.units is not None + + __bool__ = __nonzero__ + + def __str__(self): + return self.to_header() + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, str(self)) + + +class Authorization(ImmutableDictMixin, dict): + + """Represents an `Authorization` header sent by the client. You should + not create this kind of object yourself but use it when it's returned by + the `parse_authorization_header` function. + + This object is a dict subclass and can be altered by setting dict items + but it should be considered immutable as it's returned by the client and + not meant for modifications. + + .. versionchanged:: 0.5 + This object became immutable. + """ + + def __init__(self, auth_type, data=None): + dict.__init__(self, data or {}) + self.type = auth_type + + username = property(lambda x: x.get('username'), doc=''' + The username transmitted. This is set for both basic and digest + auth all the time.''') + password = property(lambda x: x.get('password'), doc=''' + When the authentication type is basic this is the password + transmitted by the client, else `None`.''') + realm = property(lambda x: x.get('realm'), doc=''' + This is the server realm sent back for HTTP digest auth.''') + nonce = property(lambda x: x.get('nonce'), doc=''' + The nonce the server sent for digest auth, sent back by the client. + A nonce should be unique for every 401 response for HTTP digest + auth.''') + uri = property(lambda x: x.get('uri'), doc=''' + The URI from Request-URI of the Request-Line; duplicated because + proxies are allowed to change the Request-Line in transit. HTTP + digest auth only.''') + nc = property(lambda x: x.get('nc'), doc=''' + The nonce count value transmitted by clients if a qop-header is + also transmitted. HTTP digest auth only.''') + cnonce = property(lambda x: x.get('cnonce'), doc=''' + If the server sent a qop-header in the ``WWW-Authenticate`` + header, the client has to provide this value for HTTP digest auth. + See the RFC for more details.''') + response = property(lambda x: x.get('response'), doc=''' + A string of 32 hex digits computed as defined in RFC 2617, which + proves that the user knows a password. Digest auth only.''') + opaque = property(lambda x: x.get('opaque'), doc=''' + The opaque header from the server returned unchanged by the client. + It is recommended that this string be base64 or hexadecimal data. + Digest auth only.''') + qop = property(lambda x: x.get('qop'), doc=''' + Indicates what "quality of protection" the client has applied to + the message for HTTP digest auth. Note that this is a single token, + not a quoted list of alternatives as in WWW-Authenticate.''') + + +class WWWAuthenticate(UpdateDictMixin, dict): + + """Provides simple access to `WWW-Authenticate` headers.""" + + #: list of keys that require quoting in the generated header + _require_quoting = frozenset(['domain', 'nonce', 'opaque', 'realm', 'qop']) + + def __init__(self, auth_type=None, values=None, on_update=None): + dict.__init__(self, values or ()) + if auth_type: + self['__auth_type__'] = auth_type + self.on_update = on_update + + def set_basic(self, realm='authentication required'): + """Clear the auth info and enable basic auth.""" + dict.clear(self) + dict.update(self, {'__auth_type__': 'basic', 'realm': realm}) + if self.on_update: + self.on_update(self) + + def set_digest(self, realm, nonce, qop=('auth',), opaque=None, + algorithm=None, stale=False): + """Clear the auth info and enable digest auth.""" + d = { + '__auth_type__': 'digest', + 'realm': realm, + 'nonce': nonce, + 'qop': dump_header(qop) + } + if stale: + d['stale'] = 'TRUE' + if opaque is not None: + d['opaque'] = opaque + if algorithm is not None: + d['algorithm'] = algorithm + dict.clear(self) + dict.update(self, d) + if self.on_update: + self.on_update(self) + + def to_header(self): + """Convert the stored values into a WWW-Authenticate header.""" + d = dict(self) + auth_type = d.pop('__auth_type__', None) or 'basic' + return '%s %s' % (auth_type.title(), ', '.join([ + '%s=%s' % (key, quote_header_value(value, + allow_token=key not in self._require_quoting)) + for key, value in iteritems(d) + ])) + + def __str__(self): + return self.to_header() + + def __repr__(self): + return '<%s %r>' % ( + self.__class__.__name__, + self.to_header() + ) + + def auth_property(name, doc=None): + """A static helper function for subclasses to add extra authentication + system properties onto a class:: + + class FooAuthenticate(WWWAuthenticate): + special_realm = auth_property('special_realm') + + For more information have a look at the sourcecode to see how the + regular properties (:attr:`realm` etc.) are implemented. + """ + + def _set_value(self, value): + if value is None: + self.pop(name, None) + else: + self[name] = str(value) + return property(lambda x: x.get(name), _set_value, doc=doc) + + def _set_property(name, doc=None): + def fget(self): + def on_update(header_set): + if not header_set and name in self: + del self[name] + elif header_set: + self[name] = header_set.to_header() + return parse_set_header(self.get(name), on_update) + return property(fget, doc=doc) + + type = auth_property('__auth_type__', doc=''' + The type of the auth mechanism. HTTP currently specifies + `Basic` and `Digest`.''') + realm = auth_property('realm', doc=''' + A string to be displayed to users so they know which username and + password to use. This string should contain at least the name of + the host performing the authentication and might additionally + indicate the collection of users who might have access.''') + domain = _set_property('domain', doc=''' + A list of URIs that define the protection space. If a URI is an + absolute path, it is relative to the canonical root URL of the + server being accessed.''') + nonce = auth_property('nonce', doc=''' + A server-specified data string which should be uniquely generated + each time a 401 response is made. It is recommended that this + string be base64 or hexadecimal data.''') + opaque = auth_property('opaque', doc=''' + A string of data, specified by the server, which should be returned + by the client unchanged in the Authorization header of subsequent + requests with URIs in the same protection space. It is recommended + that this string be base64 or hexadecimal data.''') + algorithm = auth_property('algorithm', doc=''' + A string indicating a pair of algorithms used to produce the digest + and a checksum. If this is not present it is assumed to be "MD5". + If the algorithm is not understood, the challenge should be ignored + (and a different one used, if there is more than one).''') + qop = _set_property('qop', doc=''' + A set of quality-of-privacy directives such as auth and auth-int.''') + + def _get_stale(self): + val = self.get('stale') + if val is not None: + return val.lower() == 'true' + + def _set_stale(self, value): + if value is None: + self.pop('stale', None) + else: + self['stale'] = value and 'TRUE' or 'FALSE' + stale = property(_get_stale, _set_stale, doc=''' + A flag, indicating that the previous request from the client was + rejected because the nonce value was stale.''') + del _get_stale, _set_stale + + # make auth_property a staticmethod so that subclasses of + # `WWWAuthenticate` can use it for new properties. + auth_property = staticmethod(auth_property) + del _set_property + + +class FileStorage(object): + + """The :class:`FileStorage` class is a thin wrapper over incoming files. + It is used by the request object to represent uploaded files. All the + attributes of the wrapper stream are proxied by the file storage so + it's possible to do ``storage.read()`` instead of the long form + ``storage.stream.read()``. + """ + + def __init__(self, stream=None, filename=None, name=None, + content_type=None, content_length=None, + headers=None): + self.name = name + self.stream = stream or _empty_stream + + # if no filename is provided we can attempt to get the filename + # from the stream object passed. There we have to be careful to + # skip things like , etc. Python marks these + # special filenames with angular brackets. + if filename is None: + filename = getattr(stream, 'name', None) + s = make_literal_wrapper(filename) + if filename and filename[0] == s('<') and filename[-1] == s('>'): + filename = None + + # On Python 3 we want to make sure the filename is always unicode. + # This might not be if the name attribute is bytes due to the + # file being opened from the bytes API. + if not PY2 and isinstance(filename, bytes): + filename = filename.decode(get_filesystem_encoding(), + 'replace') + + self.filename = filename + if headers is None: + headers = Headers() + self.headers = headers + if content_type is not None: + headers['Content-Type'] = content_type + if content_length is not None: + headers['Content-Length'] = str(content_length) + + def _parse_content_type(self): + if not hasattr(self, '_parsed_content_type'): + self._parsed_content_type = \ + parse_options_header(self.content_type) + + @property + def content_type(self): + """The content-type sent in the header. Usually not available""" + return self.headers.get('content-type') + + @property + def content_length(self): + """The content-length sent in the header. Usually not available""" + return int(self.headers.get('content-length') or 0) + + @property + def mimetype(self): + """Like :attr:`content_type`, but without parameters (eg, without + charset, type etc.) and always lowercase. For example if the content + type is ``text/HTML; charset=utf-8`` the mimetype would be + ``'text/html'``. + + .. versionadded:: 0.7 + """ + self._parse_content_type() + return self._parsed_content_type[0].lower() + + @property + def mimetype_params(self): + """The mimetype parameters as dict. For example if the content + type is ``text/html; charset=utf-8`` the params would be + ``{'charset': 'utf-8'}``. + + .. versionadded:: 0.7 + """ + self._parse_content_type() + return self._parsed_content_type[1] + + def save(self, dst, buffer_size=16384): + """Save the file to a destination path or file object. If the + destination is a file object you have to close it yourself after the + call. The buffer size is the number of bytes held in memory during + the copy process. It defaults to 16KB. + + For secure file saving also have a look at :func:`secure_filename`. + + :param dst: a filename or open file object the uploaded file + is saved to. + :param buffer_size: the size of the buffer. This works the same as + the `length` parameter of + :func:`shutil.copyfileobj`. + """ + from shutil import copyfileobj + close_dst = False + if isinstance(dst, string_types): + dst = open(dst, 'wb') + close_dst = True + try: + copyfileobj(self.stream, dst, buffer_size) + finally: + if close_dst: + dst.close() + + def close(self): + """Close the underlying file if possible.""" + try: + self.stream.close() + except Exception: + pass + + def __nonzero__(self): + return bool(self.filename) + __bool__ = __nonzero__ + + def __getattr__(self, name): + return getattr(self.stream, name) + + def __iter__(self): + return iter(self.stream) + + def __repr__(self): + return '<%s: %r (%r)>' % ( + self.__class__.__name__, + self.filename, + self.content_type + ) + + +# circular dependencies +from werkzeug.http import dump_options_header, dump_header, generate_etag, \ + quote_header_value, parse_set_header, unquote_etag, quote_etag, \ + parse_options_header, http_date, is_byte_range_valid +from werkzeug import exceptions diff --git a/pype/vendor/werkzeug/debug/__init__.py b/pype/vendor/werkzeug/debug/__init__.py new file mode 100644 index 0000000000..14fe193524 --- /dev/null +++ b/pype/vendor/werkzeug/debug/__init__.py @@ -0,0 +1,470 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.debug + ~~~~~~~~~~~~~~ + + WSGI application traceback debugger. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD, see LICENSE for more details. +""" +import os +import re +import sys +import uuid +import json +import time +import getpass +import hashlib +import mimetypes +from itertools import chain +from os.path import join, dirname, basename, isfile +from werkzeug.wrappers import BaseRequest as Request, BaseResponse as Response +from werkzeug.http import parse_cookie +from werkzeug.debug.tbtools import get_current_traceback, render_console_html +from werkzeug.debug.console import Console +from werkzeug.security import gen_salt +from werkzeug._internal import _log +from werkzeug._compat import text_type + + +# DEPRECATED +#: import this here because it once was documented as being available +#: from this module. In case there are users left ... +from werkzeug.debug.repr import debug_repr # noqa + + +# A week +PIN_TIME = 60 * 60 * 24 * 7 + + +def hash_pin(pin): + if isinstance(pin, text_type): + pin = pin.encode('utf-8', 'replace') + return hashlib.md5(pin + b'shittysalt').hexdigest()[:12] + + +_machine_id = None + + +def get_machine_id(): + global _machine_id + rv = _machine_id + if rv is not None: + return rv + + def _generate(): + # Potential sources of secret information on linux. The machine-id + # is stable across boots, the boot id is not + for filename in '/etc/machine-id', '/proc/sys/kernel/random/boot_id': + try: + with open(filename, 'rb') as f: + return f.readline().strip() + except IOError: + continue + + # On OS X we can use the computer's serial number assuming that + # ioreg exists and can spit out that information. + try: + # Also catch import errors: subprocess may not be available, e.g. + # Google App Engine + # See https://github.com/pallets/werkzeug/issues/925 + from subprocess import Popen, PIPE + dump = Popen(['ioreg', '-c', 'IOPlatformExpertDevice', '-d', '2'], + stdout=PIPE).communicate()[0] + match = re.search(b'"serial-number" = <([^>]+)', dump) + if match is not None: + return match.group(1) + except (OSError, ImportError): + pass + + # On Windows we can use winreg to get the machine guid + wr = None + try: + import winreg as wr + except ImportError: + try: + import _winreg as wr + except ImportError: + pass + if wr is not None: + try: + with wr.OpenKey(wr.HKEY_LOCAL_MACHINE, + 'SOFTWARE\\Microsoft\\Cryptography', 0, + wr.KEY_READ | wr.KEY_WOW64_64KEY) as rk: + machineGuid, wrType = wr.QueryValueEx(rk, 'MachineGuid') + if (wrType == wr.REG_SZ): + return machineGuid.encode('utf-8') + else: + return machineGuid + except WindowsError: + pass + + _machine_id = rv = _generate() + return rv + + +class _ConsoleFrame(object): + + """Helper class so that we can reuse the frame console code for the + standalone console. + """ + + def __init__(self, namespace): + self.console = Console(namespace) + self.id = 0 + + +def get_pin_and_cookie_name(app): + """Given an application object this returns a semi-stable 9 digit pin + code and a random key. The hope is that this is stable between + restarts to not make debugging particularly frustrating. If the pin + was forcefully disabled this returns `None`. + + Second item in the resulting tuple is the cookie name for remembering. + """ + pin = os.environ.get('WERKZEUG_DEBUG_PIN') + rv = None + num = None + + # Pin was explicitly disabled + if pin == 'off': + return None, None + + # Pin was provided explicitly + if pin is not None and pin.replace('-', '').isdigit(): + # If there are separators in the pin, return it directly + if '-' in pin: + rv = pin + else: + num = pin + + modname = getattr(app, '__module__', + getattr(app.__class__, '__module__')) + + try: + # `getpass.getuser()` imports the `pwd` module, + # which does not exist in the Google App Engine sandbox. + username = getpass.getuser() + except ImportError: + username = None + + mod = sys.modules.get(modname) + + # This information only exists to make the cookie unique on the + # computer, not as a security feature. + probably_public_bits = [ + username, + modname, + getattr(app, '__name__', getattr(app.__class__, '__name__')), + getattr(mod, '__file__', None), + ] + + # This information is here to make it harder for an attacker to + # guess the cookie name. They are unlikely to be contained anywhere + # within the unauthenticated debug page. + private_bits = [ + str(uuid.getnode()), + get_machine_id(), + ] + + h = hashlib.md5() + for bit in chain(probably_public_bits, private_bits): + if not bit: + continue + if isinstance(bit, text_type): + bit = bit.encode('utf-8') + h.update(bit) + h.update(b'cookiesalt') + + cookie_name = '__wzd' + h.hexdigest()[:20] + + # If we need to generate a pin we salt it a bit more so that we don't + # end up with the same value and generate out 9 digits + if num is None: + h.update(b'pinsalt') + num = ('%09d' % int(h.hexdigest(), 16))[:9] + + # Format the pincode in groups of digits for easier remembering if + # we don't have a result yet. + if rv is None: + for group_size in 5, 4, 3: + if len(num) % group_size == 0: + rv = '-'.join(num[x:x + group_size].rjust(group_size, '0') + for x in range(0, len(num), group_size)) + break + else: + rv = num + + return rv, cookie_name + + +class DebuggedApplication(object): + """Enables debugging support for a given application:: + + from werkzeug.debug import DebuggedApplication + from myapp import app + app = DebuggedApplication(app, evalex=True) + + The `evalex` keyword argument allows evaluating expressions in a + traceback's frame context. + + .. versionadded:: 0.9 + The `lodgeit_url` parameter was deprecated. + + :param app: the WSGI application to run debugged. + :param evalex: enable exception evaluation feature (interactive + debugging). This requires a non-forking server. + :param request_key: The key that points to the request object in ths + environment. This parameter is ignored in current + versions. + :param console_path: the URL for a general purpose console. + :param console_init_func: the function that is executed before starting + the general purpose console. The return value + is used as initial namespace. + :param show_hidden_frames: by default hidden traceback frames are skipped. + You can show them by setting this parameter + to `True`. + :param pin_security: can be used to disable the pin based security system. + :param pin_logging: enables the logging of the pin system. + """ + + def __init__(self, app, evalex=False, request_key='werkzeug.request', + console_path='/console', console_init_func=None, + show_hidden_frames=False, lodgeit_url=None, + pin_security=True, pin_logging=True): + if lodgeit_url is not None: + from warnings import warn + warn(DeprecationWarning('Werkzeug now pastes into gists.')) + if not console_init_func: + console_init_func = None + self.app = app + self.evalex = evalex + self.frames = {} + self.tracebacks = {} + self.request_key = request_key + self.console_path = console_path + self.console_init_func = console_init_func + self.show_hidden_frames = show_hidden_frames + self.secret = gen_salt(20) + self._failed_pin_auth = 0 + + self.pin_logging = pin_logging + if pin_security: + # Print out the pin for the debugger on standard out. + if os.environ.get('WERKZEUG_RUN_MAIN') == 'true' and \ + pin_logging: + _log('warning', ' * Debugger is active!') + if self.pin is None: + _log('warning', ' * Debugger PIN disabled. ' + 'DEBUGGER UNSECURED!') + else: + _log('info', ' * Debugger PIN: %s' % self.pin) + else: + self.pin = None + + def _get_pin(self): + if not hasattr(self, '_pin'): + self._pin, self._pin_cookie = get_pin_and_cookie_name(self.app) + return self._pin + + def _set_pin(self, value): + self._pin = value + + pin = property(_get_pin, _set_pin) + del _get_pin, _set_pin + + @property + def pin_cookie_name(self): + """The name of the pin cookie.""" + if not hasattr(self, '_pin_cookie'): + self._pin, self._pin_cookie = get_pin_and_cookie_name(self.app) + return self._pin_cookie + + def debug_application(self, environ, start_response): + """Run the application and conserve the traceback frames.""" + app_iter = None + try: + app_iter = self.app(environ, start_response) + for item in app_iter: + yield item + if hasattr(app_iter, 'close'): + app_iter.close() + except Exception: + if hasattr(app_iter, 'close'): + app_iter.close() + traceback = get_current_traceback( + skip=1, show_hidden_frames=self.show_hidden_frames, + ignore_system_exceptions=True) + for frame in traceback.frames: + self.frames[frame.id] = frame + self.tracebacks[traceback.id] = traceback + + try: + start_response('500 INTERNAL SERVER ERROR', [ + ('Content-Type', 'text/html; charset=utf-8'), + # Disable Chrome's XSS protection, the debug + # output can cause false-positives. + ('X-XSS-Protection', '0'), + ]) + except Exception: + # if we end up here there has been output but an error + # occurred. in that situation we can do nothing fancy any + # more, better log something into the error log and fall + # back gracefully. + environ['wsgi.errors'].write( + 'Debugging middleware caught exception in streamed ' + 'response at a point where response headers were already ' + 'sent.\n') + else: + is_trusted = bool(self.check_pin_trust(environ)) + yield traceback.render_full(evalex=self.evalex, + evalex_trusted=is_trusted, + secret=self.secret) \ + .encode('utf-8', 'replace') + + traceback.log(environ['wsgi.errors']) + + def execute_command(self, request, command, frame): + """Execute a command in a console.""" + return Response(frame.console.eval(command), mimetype='text/html') + + def display_console(self, request): + """Display a standalone shell.""" + if 0 not in self.frames: + if self.console_init_func is None: + ns = {} + else: + ns = dict(self.console_init_func()) + ns.setdefault('app', self.app) + self.frames[0] = _ConsoleFrame(ns) + is_trusted = bool(self.check_pin_trust(request.environ)) + return Response(render_console_html(secret=self.secret, + evalex_trusted=is_trusted), + mimetype='text/html') + + def paste_traceback(self, request, traceback): + """Paste the traceback and return a JSON response.""" + rv = traceback.paste() + return Response(json.dumps(rv), mimetype='application/json') + + def get_resource(self, request, filename): + """Return a static resource from the shared folder.""" + filename = join(dirname(__file__), 'shared', basename(filename)) + if isfile(filename): + mimetype = mimetypes.guess_type(filename)[0] \ + or 'application/octet-stream' + f = open(filename, 'rb') + try: + return Response(f.read(), mimetype=mimetype) + finally: + f.close() + return Response('Not Found', status=404) + + def check_pin_trust(self, environ): + """Checks if the request passed the pin test. This returns `True` if the + request is trusted on a pin/cookie basis and returns `False` if not. + Additionally if the cookie's stored pin hash is wrong it will return + `None` so that appropriate action can be taken. + """ + if self.pin is None: + return True + val = parse_cookie(environ).get(self.pin_cookie_name) + if not val or '|' not in val: + return False + ts, pin_hash = val.split('|', 1) + if not ts.isdigit(): + return False + if pin_hash != hash_pin(self.pin): + return None + return (time.time() - PIN_TIME) < int(ts) + + def _fail_pin_auth(self): + time.sleep(self._failed_pin_auth > 5 and 5.0 or 0.5) + self._failed_pin_auth += 1 + + def pin_auth(self, request): + """Authenticates with the pin.""" + exhausted = False + auth = False + trust = self.check_pin_trust(request.environ) + + # If the trust return value is `None` it means that the cookie is + # set but the stored pin hash value is bad. This means that the + # pin was changed. In this case we count a bad auth and unset the + # cookie. This way it becomes harder to guess the cookie name + # instead of the pin as we still count up failures. + bad_cookie = False + if trust is None: + self._fail_pin_auth() + bad_cookie = True + + # If we're trusted, we're authenticated. + elif trust: + auth = True + + # If we failed too many times, then we're locked out. + elif self._failed_pin_auth > 10: + exhausted = True + + # Otherwise go through pin based authentication + else: + entered_pin = request.args.get('pin') + if entered_pin.strip().replace('-', '') == \ + self.pin.replace('-', ''): + self._failed_pin_auth = 0 + auth = True + else: + self._fail_pin_auth() + + rv = Response(json.dumps({ + 'auth': auth, + 'exhausted': exhausted, + }), mimetype='application/json') + if auth: + rv.set_cookie(self.pin_cookie_name, '%s|%s' % ( + int(time.time()), + hash_pin(self.pin) + ), httponly=True) + elif bad_cookie: + rv.delete_cookie(self.pin_cookie_name) + return rv + + def log_pin_request(self): + """Log the pin if needed.""" + if self.pin_logging and self.pin is not None: + _log('info', ' * To enable the debugger you need to ' + 'enter the security pin:') + _log('info', ' * Debugger pin code: %s' % self.pin) + return Response('') + + def __call__(self, environ, start_response): + """Dispatch the requests.""" + # important: don't ever access a function here that reads the incoming + # form data! Otherwise the application won't have access to that data + # any more! + request = Request(environ) + response = self.debug_application + if request.args.get('__debugger__') == 'yes': + cmd = request.args.get('cmd') + arg = request.args.get('f') + secret = request.args.get('s') + traceback = self.tracebacks.get(request.args.get('tb', type=int)) + frame = self.frames.get(request.args.get('frm', type=int)) + if cmd == 'resource' and arg: + response = self.get_resource(request, arg) + elif cmd == 'paste' and traceback is not None and \ + secret == self.secret: + response = self.paste_traceback(request, traceback) + elif cmd == 'pinauth' and secret == self.secret: + response = self.pin_auth(request) + elif cmd == 'printpin' and secret == self.secret: + response = self.log_pin_request() + elif self.evalex and cmd is not None and frame is not None \ + and self.secret == secret and \ + self.check_pin_trust(environ): + response = self.execute_command(request, cmd, frame) + elif self.evalex and self.console_path is not None and \ + request.path == self.console_path: + response = self.display_console(request) + return response(environ, start_response) diff --git a/pype/vendor/werkzeug/debug/console.py b/pype/vendor/werkzeug/debug/console.py new file mode 100644 index 0000000000..30e89063ff --- /dev/null +++ b/pype/vendor/werkzeug/debug/console.py @@ -0,0 +1,215 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.debug.console + ~~~~~~~~~~~~~~~~~~~~~~ + + Interactive console support. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD. +""" +import sys +import code +from types import CodeType + +from werkzeug.utils import escape +from werkzeug.local import Local +from werkzeug.debug.repr import debug_repr, dump, helper + + +_local = Local() + + +class HTMLStringO(object): + + """A StringO version that HTML escapes on write.""" + + def __init__(self): + self._buffer = [] + + def isatty(self): + return False + + def close(self): + pass + + def flush(self): + pass + + def seek(self, n, mode=0): + pass + + def readline(self): + if len(self._buffer) == 0: + return '' + ret = self._buffer[0] + del self._buffer[0] + return ret + + def reset(self): + val = ''.join(self._buffer) + del self._buffer[:] + return val + + def _write(self, x): + if isinstance(x, bytes): + x = x.decode('utf-8', 'replace') + self._buffer.append(x) + + def write(self, x): + self._write(escape(x)) + + def writelines(self, x): + self._write(escape(''.join(x))) + + +class ThreadedStream(object): + + """Thread-local wrapper for sys.stdout for the interactive console.""" + + def push(): + if not isinstance(sys.stdout, ThreadedStream): + sys.stdout = ThreadedStream() + _local.stream = HTMLStringO() + push = staticmethod(push) + + def fetch(): + try: + stream = _local.stream + except AttributeError: + return '' + return stream.reset() + fetch = staticmethod(fetch) + + def displayhook(obj): + try: + stream = _local.stream + except AttributeError: + return _displayhook(obj) + # stream._write bypasses escaping as debug_repr is + # already generating HTML for us. + if obj is not None: + _local._current_ipy.locals['_'] = obj + stream._write(debug_repr(obj)) + displayhook = staticmethod(displayhook) + + def __setattr__(self, name, value): + raise AttributeError('read only attribute %s' % name) + + def __dir__(self): + return dir(sys.__stdout__) + + def __getattribute__(self, name): + if name == '__members__': + return dir(sys.__stdout__) + try: + stream = _local.stream + except AttributeError: + stream = sys.__stdout__ + return getattr(stream, name) + + def __repr__(self): + return repr(sys.__stdout__) + + +# add the threaded stream as display hook +_displayhook = sys.displayhook +sys.displayhook = ThreadedStream.displayhook + + +class _ConsoleLoader(object): + + def __init__(self): + self._storage = {} + + def register(self, code, source): + self._storage[id(code)] = source + # register code objects of wrapped functions too. + for var in code.co_consts: + if isinstance(var, CodeType): + self._storage[id(var)] = source + + def get_source_by_code(self, code): + try: + return self._storage[id(code)] + except KeyError: + pass + + +def _wrap_compiler(console): + compile = console.compile + + def func(source, filename, symbol): + code = compile(source, filename, symbol) + console.loader.register(code, source) + return code + console.compile = func + + +class _InteractiveConsole(code.InteractiveInterpreter): + + def __init__(self, globals, locals): + code.InteractiveInterpreter.__init__(self, locals) + self.globals = dict(globals) + self.globals['dump'] = dump + self.globals['help'] = helper + self.globals['__loader__'] = self.loader = _ConsoleLoader() + self.more = False + self.buffer = [] + _wrap_compiler(self) + + def runsource(self, source): + source = source.rstrip() + '\n' + ThreadedStream.push() + prompt = self.more and '... ' or '>>> ' + try: + source_to_eval = ''.join(self.buffer + [source]) + if code.InteractiveInterpreter.runsource(self, + source_to_eval, '', 'single'): + self.more = True + self.buffer.append(source) + else: + self.more = False + del self.buffer[:] + finally: + output = ThreadedStream.fetch() + return prompt + escape(source) + output + + def runcode(self, code): + try: + eval(code, self.globals, self.locals) + except Exception: + self.showtraceback() + + def showtraceback(self): + from werkzeug.debug.tbtools import get_current_traceback + tb = get_current_traceback(skip=1) + sys.stdout._write(tb.render_summary()) + + def showsyntaxerror(self, filename=None): + from werkzeug.debug.tbtools import get_current_traceback + tb = get_current_traceback(skip=4) + sys.stdout._write(tb.render_summary()) + + def write(self, data): + sys.stdout.write(data) + + +class Console(object): + + """An interactive console.""" + + def __init__(self, globals=None, locals=None): + if locals is None: + locals = {} + if globals is None: + globals = {} + self._ipy = _InteractiveConsole(globals, locals) + + def eval(self, code): + _local._current_ipy = self._ipy + old_sys_stdout = sys.stdout + try: + return self._ipy.runsource(code) + finally: + sys.stdout = old_sys_stdout diff --git a/pype/vendor/werkzeug/debug/repr.py b/pype/vendor/werkzeug/debug/repr.py new file mode 100644 index 0000000000..0a024576e0 --- /dev/null +++ b/pype/vendor/werkzeug/debug/repr.py @@ -0,0 +1,280 @@ +# -*- coding: utf-8 -*- +""" + werkzeug.debug.repr + ~~~~~~~~~~~~~~~~~~~ + + This module implements object representations for debugging purposes. + Unlike the default repr these reprs expose a lot more information and + produce HTML instead of ASCII. + + Together with the CSS and JavaScript files of the debugger this gives + a colorful and more compact output. + + :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details. + :license: BSD. +""" +import sys +import re +import codecs +from traceback import format_exception_only +try: + from collections import deque +except ImportError: # pragma: no cover + deque = None +from werkzeug.utils import escape +from werkzeug._compat import iteritems, PY2, text_type, integer_types, \ + string_types + + +missing = object() +_paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}') +RegexType = type(_paragraph_re) + + +HELP_HTML = '''\ +
    +

    %(title)s

    +
    %(text)s
    +
    \ +''' +OBJECT_DUMP_HTML = '''\ +
    +

    %(title)s

    + %(repr)s + %(items)s
    +
    \ +''' + + +def debug_repr(obj): + """Creates a debug repr of an object as HTML unicode string.""" + return DebugReprGenerator().repr(obj) + + +def dump(obj=missing): + """Print the object details to stdout._write (for the interactive + console of the web debugger. + """ + gen = DebugReprGenerator() + if obj is missing: + rv = gen.dump_locals(sys._getframe(1).f_locals) + else: + rv = gen.dump_object(obj) + sys.stdout._write(rv) + + +class _Helper(object): + + """Displays an HTML version of the normal help, for the interactive + debugger only because it requires a patched sys.stdout. + """ + + def __repr__(self): + return 'Type help(object) for help about object.' + + def __call__(self, topic=None): + if topic is None: + sys.stdout._write('%s' % repr(self)) + return + import pydoc + pydoc.help(topic) + rv = sys.stdout.reset() + if isinstance(rv, bytes): + rv = rv.decode('utf-8', 'ignore') + paragraphs = _paragraph_re.split(rv) + if len(paragraphs) > 1: + title = paragraphs[0] + text = '\n\n'.join(paragraphs[1:]) + else: # pragma: no cover + title = 'Help' + text = paragraphs[0] + sys.stdout._write(HELP_HTML % {'title': title, 'text': text}) + + +helper = _Helper() + + +def _add_subclass_info(inner, obj, base): + if isinstance(base, tuple): + for base in base: + if type(obj) is base: + return inner + elif type(obj) is base: + return inner + module = '' + if obj.__class__.__module__ not in ('__builtin__', 'exceptions'): + module = '%s.' % obj.__class__.__module__ + return '%s%s(%s)' % (module, obj.__class__.__name__, inner) + + +class DebugReprGenerator(object): + + def __init__(self): + self._stack = [] + + def _sequence_repr_maker(left, right, base=object(), limit=8): + def proxy(self, obj, recursive): + if recursive: + return _add_subclass_info(left + '...' + right, obj, base) + buf = [left] + have_extended_section = False + for idx, item in enumerate(obj): + if idx: + buf.append(', ') + if idx == limit: + buf.append('') + have_extended_section = True + buf.append(self.repr(item)) + if have_extended_section: + buf.append('') + buf.append(right) + return _add_subclass_info(u''.join(buf), obj, base) + return proxy + + list_repr = _sequence_repr_maker('[', ']', list) + tuple_repr = _sequence_repr_maker('(', ')', tuple) + set_repr = _sequence_repr_maker('set([', '])', set) + frozenset_repr = _sequence_repr_maker('frozenset([', '])', frozenset) + if deque is not None: + deque_repr = _sequence_repr_maker('collections.' + 'deque([', '])', deque) + del _sequence_repr_maker + + def regex_repr(self, obj): + pattern = repr(obj.pattern) + if PY2: + pattern = pattern.decode('string-escape', 'ignore') + else: + pattern = codecs.decode(pattern, 'unicode-escape', 'ignore') + if pattern[:1] == 'u': + pattern = 'ur' + pattern[1:] + else: + pattern = 'r' + pattern + return u're.compile(%s)' % pattern + + def string_repr(self, obj, limit=70): + buf = [''] + a = repr(obj[:limit]) + b = repr(obj[limit:]) + if isinstance(obj, text_type) and PY2: + buf.append('u') + a = a[1:] + b = b[1:] + if b != "''": + buf.extend((escape(a[:-1]), '', escape(b[1:]), '')) + else: + buf.append(escape(a)) + buf.append('') + return _add_subclass_info(u''.join(buf), obj, (bytes, text_type)) + + def dict_repr(self, d, recursive, limit=5): + if recursive: + return _add_subclass_info(u'{...}', d, dict) + buf = ['{'] + have_extended_section = False + for idx, (key, value) in enumerate(iteritems(d)): + if idx: + buf.append(', ') + if idx == limit - 1: + buf.append('') + have_extended_section = True + buf.append('%s: ' + '%s' % + (self.repr(key), self.repr(value))) + if have_extended_section: + buf.append('') + buf.append('}') + return _add_subclass_info(u''.join(buf), d, dict) + + def object_repr(self, obj): + r = repr(obj) + if PY2: + r = r.decode('utf-8', 'replace') + return u'%s' % escape(r) + + def dispatch_repr(self, obj, recursive): + if obj is helper: + return u'%r' % helper + if isinstance(obj, (integer_types, float, complex)): + return u'%r' % obj + if isinstance(obj, string_types): + return self.string_repr(obj) + if isinstance(obj, RegexType): + return self.regex_repr(obj) + if isinstance(obj, list): + return self.list_repr(obj, recursive) + if isinstance(obj, tuple): + return self.tuple_repr(obj, recursive) + if isinstance(obj, set): + return self.set_repr(obj, recursive) + if isinstance(obj, frozenset): + return self.frozenset_repr(obj, recursive) + if isinstance(obj, dict): + return self.dict_repr(obj, recursive) + if deque is not None and isinstance(obj, deque): + return self.deque_repr(obj, recursive) + return self.object_repr(obj) + + def fallback_repr(self): + try: + info = ''.join(format_exception_only(*sys.exc_info()[:2])) + except Exception: # pragma: no cover + info = '?' + if PY2: + info = info.decode('utf-8', 'ignore') + return u'<broken repr (%s)>' \ + u'' % escape(info.strip()) + + def repr(self, obj): + recursive = False + for item in self._stack: + if item is obj: + recursive = True + break + self._stack.append(obj) + try: + try: + return self.dispatch_repr(obj, recursive) + except Exception: + return self.fallback_repr() + finally: + self._stack.pop() + + def dump_object(self, obj): + repr = items = None + if isinstance(obj, dict): + title = 'Contents of' + items = [] + for key, value in iteritems(obj): + if not isinstance(key, string_types): + items = None + break + items.append((key, self.repr(value))) + if items is None: + items = [] + repr = self.repr(obj) + for key in dir(obj): + try: + items.append((key, self.repr(getattr(obj, key)))) + except Exception: + pass + title = 'Details for' + title += ' ' + object.__repr__(obj)[1:-1] + return self.render_object_dump(items, title, repr) + + def dump_locals(self, d): + items = [(key, self.repr(value)) for key, value in d.items()] + return self.render_object_dump(items, 'Local variables in frame') + + def render_object_dump(self, items, title, repr=None): + html_items = [] + for key, value in items: + html_items.append('%s
    %s
    ' % + (escape(key), value)) + if not html_items: + html_items.append('Nothing') + return OBJECT_DUMP_HTML % { + 'title': escape(title), + 'repr': repr and '
    %s
    ' % repr or '', + 'items': '\n'.join(html_items) + } diff --git a/pype/vendor/werkzeug/debug/shared/FONT_LICENSE b/pype/vendor/werkzeug/debug/shared/FONT_LICENSE new file mode 100644 index 0000000000..ae78a8f94e --- /dev/null +++ b/pype/vendor/werkzeug/debug/shared/FONT_LICENSE @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. diff --git a/pype/vendor/werkzeug/debug/shared/console.png b/pype/vendor/werkzeug/debug/shared/console.png new file mode 100644 index 0000000000000000000000000000000000000000..c28dd63812d80e416682f835652f8e5824bdccb2 GIT binary patch literal 507 zcmVM#v1#3=Jvuyn6YS$$CoGDq?9U@APAh~ZOF>jp#TVKsZ^rDVDQJO z=z(unDix`Pp@6(DbUGbswOaq~fE^0}P{J^D(r7fOTCGyOUUzmBMUy*UwAN0eHX3ch z0VGKh>h*fm?RK3*p0=MB(nc}0O&K6sv)ObGuro)jd=1C!>krB`s44?r3Yg)uiG7!8OBL$a-Fo@&0(0LjNH2#KGJZi@q2YVKu xMc5!EfO4vTMwnf`nA&W_@!!aPwbiWO`5Vn?>V~$MffN7$002ovPDHLkV1l0g-PQmA literal 0 HcmV?d00001 diff --git a/pype/vendor/werkzeug/debug/shared/debugger.js b/pype/vendor/werkzeug/debug/shared/debugger.js new file mode 100644 index 0000000000..534019dc41 --- /dev/null +++ b/pype/vendor/werkzeug/debug/shared/debugger.js @@ -0,0 +1,205 @@ +$(function() { + if (!EVALEX_TRUSTED) { + initPinBox(); + } + + /** + * if we are in console mode, show the console. + */ + if (CONSOLE_MODE && EVALEX) { + openShell(null, $('div.console div.inner').empty(), 0); + } + + $('div.traceback div.frame').each(function() { + var + target = $('pre', this), + consoleNode = null, + frameID = this.id.substring(6); + + target.click(function() { + $(this).parent().toggleClass('expanded'); + }); + + /** + * Add an interactive console to the frames + */ + if (EVALEX && target.is('.current')) { + $('') + .attr('title', 'Open an interactive python shell in this frame') + .click(function() { + consoleNode = openShell(consoleNode, target, frameID); + return false; + }) + .prependTo(target); + } + }); + + /** + * toggle traceback types on click. + */ + $('h2.traceback').click(function() { + $(this).next().slideToggle('fast'); + $('div.plain').slideToggle('fast'); + }).css('cursor', 'pointer'); + $('div.plain').hide(); + + /** + * Add extra info (this is here so that only users with JavaScript + * enabled see it.) + */ + $('span.nojavascript') + .removeClass('nojavascript') + .html('

    To switch between the interactive traceback and the plaintext ' + + 'one, you can click on the "Traceback" headline. From the text ' + + 'traceback you can also create a paste of it. ' + (!EVALEX ? '' : + 'For code execution mouse-over the frame you want to debug and ' + + 'click on the console icon on the right side.' + + '

    You can execute arbitrary Python code in the stack frames and ' + + 'there are some extra helpers available for introspection:' + + '

    • dump() shows all variables in the frame' + + '
    • dump(obj) dumps all that\'s known about the object
    ')); + + /** + * Add the pastebin feature + */ + $('div.plain form') + .submit(function() { + var label = $('input[type="submit"]', this); + var old_val = label.val(); + label.val('submitting...'); + $.ajax({ + dataType: 'json', + url: document.location.pathname, + data: {__debugger__: 'yes', tb: TRACEBACK, cmd: 'paste', + s: SECRET}, + success: function(data) { + $('div.plain span.pastemessage') + .removeClass('pastemessage') + .text('Paste created: ') + .append($('#' + data.id + '').attr('href', data.url)); + }, + error: function() { + alert('Error: Could not submit paste. No network connection?'); + label.val(old_val); + } + }); + return false; + }); + + // if we have javascript we submit by ajax anyways, so no need for the + // not scaling textarea. + var plainTraceback = $('div.plain textarea'); + plainTraceback.replaceWith($('
    ').text(plainTraceback.text()));
    +});
    +
    +function initPinBox() {
    +  $('.pin-prompt form').submit(function(evt) {
    +    evt.preventDefault();
    +    var pin = this.pin.value;
    +    var btn = this.btn;
    +    btn.disabled = true;
    +    $.ajax({
    +      dataType: 'json',
    +      url: document.location.pathname,
    +      data: {__debugger__: 'yes', cmd: 'pinauth', pin: pin,
    +             s: SECRET},
    +      success: function(data) {
    +        btn.disabled = false;
    +        if (data.auth) {
    +          EVALEX_TRUSTED = true;
    +          $('.pin-prompt').fadeOut();
    +        } else {
    +          if (data.exhausted) {
    +            alert('Error: too many attempts.  Restart server to retry.');
    +          } else {
    +            alert('Error: incorrect pin');
    +          }
    +        }
    +        console.log(data);
    +      },
    +      error: function() {
    +        btn.disabled = false;
    +        alert('Error: Could not verify PIN.  Network error?');
    +      }
    +    });
    +  });
    +}
    +
    +function promptForPin() {
    +  if (!EVALEX_TRUSTED) {
    +    $.ajax({
    +      url: document.location.pathname,
    +      data: {__debugger__: 'yes', cmd: 'printpin', s: SECRET}
    +    });
    +    $('.pin-prompt').fadeIn(function() {
    +      $('.pin-prompt input[name="pin"]').focus();
    +    });
    +  }
    +}
    +
    +
    +/**
    + * Helper function for shell initialization
    + */
    +function openShell(consoleNode, target, frameID) {
    +  promptForPin();
    +  if (consoleNode)
    +    return consoleNode.slideToggle('fast');
    +  consoleNode = $('
    ')
    +    .appendTo(target.parent())
    +    .hide()
    +  var historyPos = 0, history = [''];
    +  var output = $('
    [console ready]
    ') + .appendTo(consoleNode); + var form = $('
    >>>
    ') + .submit(function() { + var cmd = command.val(); + $.get('', { + __debugger__: 'yes', cmd: cmd, frm: frameID, s: SECRET}, function(data) { + var tmp = $('
    ').html(data); + $('span.extended', tmp).each(function() { + var hidden = $(this).wrap('').hide(); + hidden + .parent() + .append($('  ') + .click(function() { + hidden.toggle(); + $(this).toggleClass('open') + return false; + })); + }); + output.append(tmp); + command.focus(); + consoleNode.scrollTop(consoleNode.get(0).scrollHeight); + var old = history.pop(); + history.push(cmd); + if (typeof old != 'undefined') + history.push(old); + historyPos = history.length - 1; + }); + command.val(''); + return false; + }). + appendTo(consoleNode); + + var command = $('') + .appendTo(form) + .keydown(function(e) { + if (e.charCode == 100 && e.ctrlKey) { + output.text('--- screen cleared ---'); + return false; + } + else if (e.charCode == 0 && (e.keyCode == 38 || e.keyCode == 40)) { + if (e.keyCode == 38 && historyPos > 0) + historyPos--; + else if (e.keyCode == 40 && historyPos < history.length) + historyPos++; + command.val(history[historyPos]); + return false; + } + }); + + return consoleNode.slideDown('fast', function() { + command.focus(); + }); +} diff --git a/pype/vendor/werkzeug/debug/shared/jquery.js b/pype/vendor/werkzeug/debug/shared/jquery.js new file mode 100644 index 0000000000..0f60b7bd0d --- /dev/null +++ b/pype/vendor/werkzeug/debug/shared/jquery.js @@ -0,0 +1,5 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("

    Werkzeug